Resolves tdf#142651 Writer: Next Change stopped working
[LibreOffice.git] / configure.ac
blob7fc03600df25cc0b80126eab1605c107f473df5a
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.2.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_curl=yes
823 test_gdb_index=no
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*)
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     build_skia=yes
914     _os=WINNT
916     DLLPOST=".dll"
917     LINKFLAGSNOUNDEFS=
919     if test "$host_cpu" = "aarch64"; then
920         enable_gpgmepp=no
921         enable_coinmp=no
922         enable_firebird_sdbc=no
923     fi
924     ;;
926 darwin*|macos*) # macOS
927     using_freetype_fontconfig=no
928     using_x11=no
929     if test -n "$LODE_HOME" ; then
930         mac_sanitize_path
931         AC_MSG_NOTICE([sanitized the PATH to $PATH])
932     fi
933     _os=Darwin
934     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
935     INSTROOTCONTENTSUFFIX=/Contents
936     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
937     # See comment above the case "$host_os"
938     LINKFLAGSSHL="-dynamiclib -single_module"
940     # -fPIC is default
941     PICSWITCH=""
943     DLLPOST=".dylib"
945     # -undefined error is the default
946     LINKFLAGSNOUNDEFS=""
947     case "$host_cpu" in
948     aarch64|arm64)
949         case "$host_os" in
950         macos*)
951             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
952             # the "macos" part so be sure to use aarch64-apple-darwin for now.
953             HOST_PLATFORM=aarch64-apple-darwin
954             ;;
955         esac
957         # Apple's Clang uses "arm64"
958         host_cpu_for_clang=arm64
959     esac
962 ios*) # iOS
963     using_freetype_fontconfig=no
964     using_vclplug=no
965     using_x11=no
966     build_crypto=no
967     test_cmis=no
968     test_webdav=no
969     if test -n "$LODE_HOME" ; then
970         mac_sanitize_path
971         AC_MSG_NOTICE([sanitized the PATH to $PATH])
972     fi
973     enable_gpgmepp=no
974     _os=iOS
975     enable_mpl_subset=yes
976     enable_lotuswordpro=no
977     disable_database_connectivity_dependencies
978     enable_coinmp=no
979     enable_lpsolve=no
980     enable_extension_integration=no
981     with_ppds=no
982     if test "$enable_ios_simulator" = "yes"; then
983         host=x86_64-apple-darwin
984     fi
985     # See comment above the case "$host_os"
986     LINKFLAGSSHL="-dynamiclib -single_module"
988     # -fPIC is default
989     PICSWITCH=""
991     DLLPOST=".dylib"
993     # -undefined error is the default
994     LINKFLAGSNOUNDEFS=""
996     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
997     # part, so use aarch64-apple-darwin for now.
998     HOST_PLATFORM=aarch64-apple-darwin
1000     # Apple's Clang uses "arm64"
1001     host_cpu_for_clang=arm64
1004 freebsd*)
1005     using_freetype_fontconfig=yes
1006     using_x11=yes
1007     build_skia=yes
1008     AC_MSG_CHECKING([the FreeBSD operating system release])
1009     if test -n "$with_os_version"; then
1010         OSVERSION="$with_os_version"
1011     else
1012         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1013     fi
1014     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1015     AC_MSG_CHECKING([which thread library to use])
1016     if test "$OSVERSION" -lt "500016"; then
1017         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1018         PTHREAD_LIBS="-pthread"
1019     elif test "$OSVERSION" -lt "502102"; then
1020         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1021         PTHREAD_LIBS="-lc_r"
1022     else
1023         PTHREAD_CFLAGS=""
1024         PTHREAD_LIBS="-pthread"
1025     fi
1026     AC_MSG_RESULT([$PTHREAD_LIBS])
1027     _os=FreeBSD
1028     ;;
1030 *netbsd*)
1031     using_freetype_fontconfig=yes
1032     using_x11=yes
1033     test_gtk3_kde5=no
1034     build_skia=yes
1035     PTHREAD_LIBS="-pthread -lpthread"
1036     _os=NetBSD
1037     ;;
1039 aix*)
1040     using_freetype_fontconfig=yes
1041     using_x11=yes
1042     test_randr=no
1043     test_gstreamer_1_0=no
1044     PTHREAD_LIBS=-pthread
1045     _os=AIX
1046     ;;
1048 openbsd*)
1049     using_freetype_fontconfig=yes
1050     using_x11=yes
1051     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1052     PTHREAD_LIBS="-pthread"
1053     _os=OpenBSD
1054     ;;
1056 dragonfly*)
1057     using_freetype_fontconfig=yes
1058     using_x11=yes
1059     build_skia=yes
1060     PTHREAD_LIBS="-pthread"
1061     _os=DragonFly
1062     ;;
1064 linux-android*)
1065     using_freetype_fontconfig=yes
1066     using_headless_plugin=no
1067     using_x11=no
1068     build_crypto=no
1069     test_system_freetype=no
1070     test_webdav=no
1071     disable_database_connectivity_dependencies
1072     enable_lotuswordpro=no
1073     enable_mpl_subset=yes
1074     enable_cairo_canvas=no
1075     enable_coinmp=yes
1076     enable_lpsolve=no
1077     enable_odk=no
1078     enable_python=no
1079     _os=Android
1081     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1082     ;;
1084 haiku*)
1085     using_freetype_fontconfig=yes
1086     using_x11=no
1087     test_gtk3_kde5=no
1088     test_kf5=yes
1089     test_openldap=yes
1090     enable_odk=no
1091     enable_coinmp=no
1092     enable_pdfium=no
1093     enable_sdremote=no
1094     enable_postgresql_sdbc=no
1095     enable_firebird_sdbc=no
1096     _os=Haiku
1097     ;;
1099 emscripten)
1100     using_freetype_fontconfig=yes
1101     using_x11=no
1102     enable_compiler_plugins=no
1103     test_cmis=no
1104     test_webdav=no
1105     enable_database_connectivity=no
1106     enable_lpsolve=no
1107     with_system_zlib=no
1108     with_theme="breeze"
1109     _os=Emscripten
1110     ;;
1113     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1114     ;;
1115 esac
1117 AC_SUBST(HOST_PLATFORM)
1119 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1120     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1123 # Set defaults, if not set by platform
1124 test "${test_cups+set}" = set || test_cups="$using_x11"
1125 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1126 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1127 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1128 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1129 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1130 test "${test_openldap+set}" = set || test_openldap="$using_x11"
1131 # don't handle test_qt5, so it can disable test_kf5 later
1132 test "${test_randr+set}" = set || test_randr="$using_x11"
1133 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1134 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1136 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1137 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1138 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1140 # convenience / platform overriding "fixes"
1141 # Don't sort!
1142 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1143 test "$test_kf5" = yes && test_qt5=yes
1144 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1145 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1146 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1148 # Keep in sync with the above $using_x11 depending test default list
1149 disable_x11_tests()
1151     test_cups=no
1152     test_dbus=no
1153     test_gstreamer_1_0=no
1154     test_gtk3_kde5=no
1155     test_gtk3=no
1156     test_gtk4=no
1157     test_kf5=no
1158     test_openldap=no
1159     test_qt5=no
1160     test_randr=no
1161     test_xrender=no
1164 test "$using_x11" = yes && USING_X11=TRUE
1166 if test "$using_freetype_fontconfig" = yes; then
1167     if test "$using_headless_plugin" = yes; then
1168         AC_DEFINE(ENABLE_HEADLESS)
1169         ENABLE_HEADLESS=TRUE
1170     fi
1173 AC_SUBST(ENABLE_HEADLESS)
1175 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1176 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1177 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1178 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1180 # ===================================================================
1182 # End initial platform setup
1184 # ===================================================================
1186 if test "$_os" = "Android" ; then
1187     # Verify that the NDK and SDK options are proper
1188     if test -z "$with_android_ndk"; then
1189         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1190     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1191         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1192     fi
1194     if test -z "$ANDROID_SDK_HOME"; then
1195         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1196     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1197         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1198     fi
1200     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1201     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1202         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1203                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1204                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1205         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1206         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1207         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1208     fi
1209     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1210         AC_MSG_WARN([android support repository not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1212                      to allow the build to download the specified version of the android support libraries])
1213         add_warning "android support repository not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1215         add_warning "to allow the build to download the specified version of the android support libraries"
1216     fi
1219 if test "$_os" = "AIX"; then
1220     AC_PATH_PROG(GAWK, gawk)
1221     if test -z "$GAWK"; then
1222         AC_MSG_ERROR([gawk not found in \$PATH])
1223     fi
1226 AC_SUBST(SDKDIRNAME)
1228 AC_SUBST(PTHREAD_CFLAGS)
1229 AC_SUBST(PTHREAD_LIBS)
1231 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1232 # By default use the ones specified by our build system,
1233 # but explicit override is possible.
1234 AC_MSG_CHECKING(for explicit AFLAGS)
1235 if test -n "$AFLAGS"; then
1236     AC_MSG_RESULT([$AFLAGS])
1237     x_AFLAGS=
1238 else
1239     AC_MSG_RESULT(no)
1240     x_AFLAGS=[\#]
1242 AC_MSG_CHECKING(for explicit CFLAGS)
1243 if test -n "$CFLAGS"; then
1244     AC_MSG_RESULT([$CFLAGS])
1245     x_CFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_CFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CXXFLAGS)
1251 if test -n "$CXXFLAGS"; then
1252     AC_MSG_RESULT([$CXXFLAGS])
1253     x_CXXFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CXXFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1259 if test -n "$OBJCFLAGS"; then
1260     AC_MSG_RESULT([$OBJCFLAGS])
1261     x_OBJCFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_OBJCFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1267 if test -n "$OBJCXXFLAGS"; then
1268     AC_MSG_RESULT([$OBJCXXFLAGS])
1269     x_OBJCXXFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCXXFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit LDFLAGS)
1275 if test -n "$LDFLAGS"; then
1276     AC_MSG_RESULT([$LDFLAGS])
1277     x_LDFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_LDFLAGS=[\#]
1282 AC_SUBST(AFLAGS)
1283 AC_SUBST(CFLAGS)
1284 AC_SUBST(CXXFLAGS)
1285 AC_SUBST(OBJCFLAGS)
1286 AC_SUBST(OBJCXXFLAGS)
1287 AC_SUBST(LDFLAGS)
1288 AC_SUBST(x_AFLAGS)
1289 AC_SUBST(x_CFLAGS)
1290 AC_SUBST(x_CXXFLAGS)
1291 AC_SUBST(x_OBJCFLAGS)
1292 AC_SUBST(x_OBJCXXFLAGS)
1293 AC_SUBST(x_LDFLAGS)
1295 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1296 my_original_CFLAGS=$CFLAGS
1297 my_original_CXXFLAGS=$CXXFLAGS
1298 my_original_CPPFLAGS=$CPPFLAGS
1300 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1301 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1302 dnl AC_PROG_CC internally.
1303 if test "$_os" != "WINNT"; then
1304     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1305     save_CFLAGS=$CFLAGS
1306     AC_PROG_CC
1307     CFLAGS=$save_CFLAGS
1308     if test -z "$CC_BASE"; then
1309         CC_BASE=`first_arg_basename "$CC"`
1310     fi
1313 if test "$_os" != "WINNT"; then
1314     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1315 else
1316     ENDIANNESS=little
1318 AC_SUBST(ENDIANNESS)
1320 if test $_os != "WINNT"; then
1321     save_LIBS="$LIBS"
1322     AC_SEARCH_LIBS([dlsym], [dl],
1323         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1324         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1325     LIBS="$save_LIBS"
1327 AC_SUBST(DLOPEN_LIBS)
1329 dnl ===================================================================
1330 dnl Sanity checks for Emscripten SDK setup
1331 dnl ===================================================================
1333 if test "$_os" = "Emscripten"; then
1334     EMSCRIPTEN_ERROR=0
1335     if ! which emconfigure >/dev/null 2>&1; then
1336         AC_MSG_WARN([emconfigure must be in your \$PATH])
1337         EMSCRIPTEN_ERROR=1
1338     fi
1339     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1340         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1341         EMSCRIPTEN_ERROR=1
1342     fi
1343     if test $EMSCRIPTEN_ERROR -ne 0; then
1344         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1345     fi
1348 ###############################################################################
1349 # Extensions switches --enable/--disable
1350 ###############################################################################
1351 # By default these should be enabled unless having extra dependencies.
1352 # If there is extra dependency over configure options then the enable should
1353 # be automagic based on whether the requiring feature is enabled or not.
1354 # All this options change anything only with --enable-extension-integration.
1356 # The name of this option and its help string makes it sound as if
1357 # extensions are built anyway, just not integrated in the installer,
1358 # if you use --disable-extension-integration. Is that really the
1359 # case?
1361 AC_ARG_ENABLE(ios-simulator,
1362     AS_HELP_STRING([--enable-ios-simulator],
1363         [build for iOS simulator])
1366 libo_FUZZ_ARG_ENABLE(extension-integration,
1367     AS_HELP_STRING([--disable-extension-integration],
1368         [Disable integration of the built extensions in the installer of the
1369          product. Use this switch to disable the integration.])
1372 AC_ARG_ENABLE(avmedia,
1373     AS_HELP_STRING([--disable-avmedia],
1374         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1377 AC_ARG_ENABLE(database-connectivity,
1378     AS_HELP_STRING([--disable-database-connectivity],
1379         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1382 # This doesn't mean not building (or "integrating") extensions
1383 # (although it probably should; i.e. it should imply
1384 # --disable-extension-integration I guess), it means not supporting
1385 # any extension mechanism at all
1386 libo_FUZZ_ARG_ENABLE(extensions,
1387     AS_HELP_STRING([--disable-extensions],
1388         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1391 AC_ARG_ENABLE(scripting,
1392     AS_HELP_STRING([--disable-scripting],
1393         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1396 # This is mainly for Android and iOS, but could potentially be used in some
1397 # special case otherwise, too, so factored out as a separate setting
1399 AC_ARG_ENABLE(dynamic-loading,
1400     AS_HELP_STRING([--disable-dynamic-loading],
1401         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1404 libo_FUZZ_ARG_ENABLE(report-builder,
1405     AS_HELP_STRING([--disable-report-builder],
1406         [Disable the Report Builder.])
1409 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1410     AS_HELP_STRING([--enable-ext-wiki-publisher],
1411         [Enable the Wiki Publisher extension.])
1414 libo_FUZZ_ARG_ENABLE(lpsolve,
1415     AS_HELP_STRING([--disable-lpsolve],
1416         [Disable compilation of the lp solve solver ])
1418 libo_FUZZ_ARG_ENABLE(coinmp,
1419     AS_HELP_STRING([--disable-coinmp],
1420         [Disable compilation of the CoinMP solver ])
1423 libo_FUZZ_ARG_ENABLE(pdfimport,
1424     AS_HELP_STRING([--disable-pdfimport],
1425         [Disable building the PDF import feature.])
1428 libo_FUZZ_ARG_ENABLE(pdfium,
1429     AS_HELP_STRING([--disable-pdfium],
1430         [Disable building PDFium. Results in unsecure PDF signature verification.])
1433 libo_FUZZ_ARG_ENABLE(skia,
1434     AS_HELP_STRING([--disable-skia],
1435         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1438 ###############################################################################
1440 dnl ---------- *** ----------
1442 libo_FUZZ_ARG_ENABLE(mergelibs,
1443     AS_HELP_STRING([--enable-mergelibs],
1444         [Merge several of the smaller libraries into one big, "merged", one.])
1447 libo_FUZZ_ARG_ENABLE(breakpad,
1448     AS_HELP_STRING([--enable-breakpad],
1449         [Enables breakpad for crash reporting.])
1452 libo_FUZZ_ARG_ENABLE(crashdump,
1453     AS_HELP_STRING([--disable-crashdump],
1454         [Disable dump.ini and dump-file, when --enable-breakpad])
1457 AC_ARG_ENABLE(fetch-external,
1458     AS_HELP_STRING([--disable-fetch-external],
1459         [Disables fetching external tarballs from web sources.])
1462 AC_ARG_ENABLE(fuzzers,
1463     AS_HELP_STRING([--enable-fuzzers],
1464         [Enables building libfuzzer targets for fuzz testing.])
1467 libo_FUZZ_ARG_ENABLE(pch,
1468     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1469         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1470          Using 'system' will include only external headers, 'base' will add also headers
1471          from base modules, 'normal' will also add all headers except from the module built,
1472          'full' will use all suitable headers even from a module itself.])
1475 libo_FUZZ_ARG_ENABLE(epm,
1476     AS_HELP_STRING([--enable-epm],
1477         [LibreOffice includes self-packaging code, that requires epm, however epm is
1478          useless for large scale package building.])
1481 libo_FUZZ_ARG_ENABLE(odk,
1482     AS_HELP_STRING([--enable-odk],
1483         [Enable building the Office Development Kit, the part that extensions need to build against])
1486 AC_ARG_ENABLE(mpl-subset,
1487     AS_HELP_STRING([--enable-mpl-subset],
1488         [Don't compile any pieces which are not MPL or more liberally licensed])
1491 libo_FUZZ_ARG_ENABLE(evolution2,
1492     AS_HELP_STRING([--enable-evolution2],
1493         [Allows the built-in evolution 2 addressbook connectivity build to be
1494          enabled.])
1497 AC_ARG_ENABLE(avahi,
1498     AS_HELP_STRING([--enable-avahi],
1499         [Determines whether to use Avahi to advertise Impress to remote controls.])
1502 libo_FUZZ_ARG_ENABLE(werror,
1503     AS_HELP_STRING([--enable-werror],
1504         [Turn warnings to errors. (Has no effect in modules where the treating
1505          of warnings as errors is disabled explicitly.)]),
1508 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1509     AS_HELP_STRING([--enable-assert-always-abort],
1510         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1513 libo_FUZZ_ARG_ENABLE(dbgutil,
1514     AS_HELP_STRING([--enable-dbgutil],
1515         [Provide debugging support from --enable-debug and include additional debugging
1516          utilities such as object counting or more expensive checks.
1517          This is the recommended option for developers.
1518          Note that this makes the build ABI incompatible, it is not possible to mix object
1519          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1521 libo_FUZZ_ARG_ENABLE(debug,
1522     AS_HELP_STRING([--enable-debug],
1523         [Include debugging information, disable compiler optimization and inlining plus
1524          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1526 libo_FUZZ_ARG_ENABLE(split-debug,
1527     AS_HELP_STRING([--disable-split-debug],
1528         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1529          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1531 libo_FUZZ_ARG_ENABLE(gdb-index,
1532     AS_HELP_STRING([--disable-gdb-index],
1533         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1534          The feature requires the gold or lld linker.]))
1536 libo_FUZZ_ARG_ENABLE(sal-log,
1537     AS_HELP_STRING([--enable-sal-log],
1538         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1540 libo_FUZZ_ARG_ENABLE(symbols,
1541     AS_HELP_STRING([--enable-symbols],
1542         [Generate debug information.
1543          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1544          otherwise. It is possible to explicitly specify gbuild build targets
1545          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1546          everything in the directory; there is no ordering, more specific overrides
1547          more general, and disabling takes precedence).
1548          Example: --enable-symbols="all -sw/ -Library_sc".]))
1550 libo_FUZZ_ARG_ENABLE(optimized,
1551     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1552         [Whether to compile with optimization flags.
1553          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1554          otherwise. Using 'debug' will try to use only optimizations that should
1555          not interfere with debugging. For Emscripten we default to optimized (-O1)
1556          debug build, as otherwise binaries become too large.]))
1558 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1559     AS_HELP_STRING([--disable-runtime-optimizations],
1560         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1561          JVM JIT) that are known to interact badly with certain dynamic analysis
1562          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1563          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1564          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1566 AC_ARG_WITH(valgrind,
1567     AS_HELP_STRING([--with-valgrind],
1568         [Make availability of Valgrind headers a hard requirement.]))
1570 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1571     AS_HELP_STRING([--enable-compiler-plugins],
1572         [Enable compiler plugins that will perform additional checks during
1573          building. Enabled automatically by --enable-dbgutil.
1574          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1575 COMPILER_PLUGINS_DEBUG=
1576 if test "$enable_compiler_plugins" = debug; then
1577     enable_compiler_plugins=yes
1578     COMPILER_PLUGINS_DEBUG=TRUE
1581 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1582     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1583         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1584          relevant in the --disable-compiler-plugins case.]))
1586 libo_FUZZ_ARG_ENABLE(ooenv,
1587     AS_HELP_STRING([--enable-ooenv],
1588         [Enable ooenv for the instdir installation.]))
1590 AC_ARG_ENABLE(lto,
1591     AS_HELP_STRING([--enable-lto],
1592         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1593          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1594          linker. For MSVC, this option is broken at the moment. This is experimental work
1595          in progress that shouldn't be used unless you are working on it.)]))
1597 AC_ARG_ENABLE(python,
1598     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1599         [Enables or disables Python support at run-time.
1600          Also specifies what Python to use at build-time.
1601          'fully-internal' even forces the internal version for uses of Python
1602          during the build.
1603          On macOS the only choices are
1604          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1605          ]))
1607 libo_FUZZ_ARG_ENABLE(gtk3,
1608     AS_HELP_STRING([--disable-gtk3],
1609         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1610 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1612 AC_ARG_ENABLE(gtk4,
1613     AS_HELP_STRING([--enable-gtk4],
1614         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1616 AC_ARG_ENABLE(introspection,
1617     AS_HELP_STRING([--enable-introspection],
1618         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1619          Linux distributions.)]))
1621 AC_ARG_ENABLE(split-app-modules,
1622     AS_HELP_STRING([--enable-split-app-modules],
1623         [Split file lists for app modules, e.g. base, calc.
1624          Has effect only with make distro-pack-install]),
1627 AC_ARG_ENABLE(split-opt-features,
1628     AS_HELP_STRING([--enable-split-opt-features],
1629         [Split file lists for some optional features, e.g. pyuno, testtool.
1630          Has effect only with make distro-pack-install]),
1633 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1634     AS_HELP_STRING([--disable-cairo-canvas],
1635         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1638 libo_FUZZ_ARG_ENABLE(dbus,
1639     AS_HELP_STRING([--disable-dbus],
1640         [Determines whether to enable features that depend on dbus.
1641          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1642 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1644 libo_FUZZ_ARG_ENABLE(sdremote,
1645     AS_HELP_STRING([--disable-sdremote],
1646         [Determines whether to enable Impress remote control (i.e. the server component).]),
1647 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1649 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1650     AS_HELP_STRING([--disable-sdremote-bluetooth],
1651         [Determines whether to build sdremote with bluetooth support.
1652          Requires dbus on Linux.]))
1654 libo_FUZZ_ARG_ENABLE(gio,
1655     AS_HELP_STRING([--disable-gio],
1656         [Determines whether to use the GIO support.]),
1657 ,test "${enable_gio+set}" = set || enable_gio=yes)
1659 AC_ARG_ENABLE(qt5,
1660     AS_HELP_STRING([--enable-qt5],
1661         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1662          available.]),
1665 AC_ARG_ENABLE(kf5,
1666     AS_HELP_STRING([--enable-kf5],
1667         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1668          KF5 are available.]),
1671 AC_ARG_ENABLE(gtk3_kde5,
1672     AS_HELP_STRING([--enable-gtk3-kde5],
1673         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1674          platforms where Gtk3, Qt5 and Plasma is available.]),
1677 AC_ARG_ENABLE(gui,
1678     AS_HELP_STRING([--disable-gui],
1679         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1680 ,enable_gui=yes)
1682 libo_FUZZ_ARG_ENABLE(randr,
1683     AS_HELP_STRING([--disable-randr],
1684         [Disable RandR support in the vcl project.]),
1685 ,test "${enable_randr+set}" = set || enable_randr=yes)
1687 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1688     AS_HELP_STRING([--disable-gstreamer-1-0],
1689         [Disable building with the gstreamer 1.0 avmedia backend.]),
1690 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1692 libo_FUZZ_ARG_ENABLE([eot],
1693     [AS_HELP_STRING([--enable-eot],
1694         [Enable support for Embedded OpenType fonts.])],
1695 ,test "${enable_eot+set}" = set || enable_eot=no)
1697 libo_FUZZ_ARG_ENABLE(cve-tests,
1698     AS_HELP_STRING([--disable-cve-tests],
1699         [Prevent CVE tests to be executed]),
1702 libo_FUZZ_ARG_ENABLE(chart-tests,
1703     AS_HELP_STRING([--enable-chart-tests],
1704         [Executes chart XShape tests. In a perfect world these tests would be
1705          stable and everyone could run them, in reality it is best to run them
1706          only on a few machines that are known to work and maintained by people
1707          who can judge if a test failure is a regression or not.]),
1710 AC_ARG_ENABLE(build-opensymbol,
1711     AS_HELP_STRING([--enable-build-opensymbol],
1712         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1713          fontforge installed.]),
1716 AC_ARG_ENABLE(dependency-tracking,
1717     AS_HELP_STRING([--enable-dependency-tracking],
1718         [Do not reject slow dependency extractors.])[
1719   --disable-dependency-tracking
1720                           Disables generation of dependency information.
1721                           Speed up one-time builds.],
1724 AC_ARG_ENABLE(icecream,
1725     AS_HELP_STRING([--enable-icecream],
1726         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1727          It defaults to /opt/icecream for the location of the icecream gcc/g++
1728          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1731 AC_ARG_ENABLE(ld,
1732     AS_HELP_STRING([--enable-ld=<linker>],
1733         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1734          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1735          If <linker> contains any ':', the part before the first ':' is used as the value of
1736          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1737          needed for Clang 12).]),
1740 libo_FUZZ_ARG_ENABLE(cups,
1741     AS_HELP_STRING([--disable-cups],
1742         [Do not build cups support.])
1745 AC_ARG_ENABLE(ccache,
1746     AS_HELP_STRING([--disable-ccache],
1747         [Do not try to use ccache automatically.
1748          By default, unless on Windows, we will try to detect if ccache is available; in that case if
1749          CC/CXX are not yet set, and --enable-icecream is not given, we
1750          attempt to use ccache. --disable-ccache disables ccache completely.
1751          Additionally ccache's depend mode is enabled if possible,
1752          use --enable-ccache=nodepend to enable ccache without depend mode.
1756 libo_FUZZ_ARG_ENABLE(online-update,
1757     AS_HELP_STRING([--enable-online-update],
1758         [Enable the online update service that will check for new versions of
1759          LibreOffice. By default, it is enabled on Windows and Mac, disabled on Linux.
1760          If the value is "mar", the experimental Mozilla-like update will be
1761          enabled instead of the traditional update mechanism.]),
1764 AC_ARG_WITH(update-config,
1765     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1766                    [Path to the update config ini file]))
1768 libo_FUZZ_ARG_ENABLE(extension-update,
1769     AS_HELP_STRING([--disable-extension-update],
1770         [Disable possibility to update installed extensions.]),
1773 libo_FUZZ_ARG_ENABLE(release-build,
1774     AS_HELP_STRING([--enable-release-build],
1775         [Enable release build. Note that the "release build" choice is orthogonal to
1776          whether symbols are present, debug info is generated, or optimization
1777          is done.
1778          See http://wiki.documentfoundation.org/Development/DevBuild]),
1781 AC_ARG_ENABLE(windows-build-signing,
1782     AS_HELP_STRING([--enable-windows-build-signing],
1783         [Enable signing of windows binaries (*.exe, *.dll)]),
1786 AC_ARG_ENABLE(silent-msi,
1787     AS_HELP_STRING([--enable-silent-msi],
1788         [Enable MSI with LIMITUI=1 (silent install).]),
1791 AC_ARG_ENABLE(macosx-code-signing,
1792     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1793         [Sign executables, dylibs, frameworks and the app bundle. If you
1794          don't provide an identity the first suitable certificate
1795          in your keychain is used.]),
1798 AC_ARG_ENABLE(macosx-package-signing,
1799     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1800         [Create a .pkg suitable for uploading to the Mac App Store and sign
1801          it. If you don't provide an identity the first suitable certificate
1802          in your keychain is used.]),
1805 AC_ARG_ENABLE(macosx-sandbox,
1806     AS_HELP_STRING([--enable-macosx-sandbox],
1807         [Make the app bundle run in a sandbox. Requires code signing.
1808          Is required by apps distributed in the Mac App Store, and implies
1809          adherence to App Store rules.]),
1812 AC_ARG_WITH(macosx-bundle-identifier,
1813     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1814         [Define the macOS bundle identifier. Default is the somewhat weird
1815          org.libreoffice.script ("script", huh?).]),
1816 ,with_macosx_bundle_identifier=org.libreoffice.script)
1818 AC_ARG_WITH(product-name,
1819     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1820         [Define the product name. Default is AC_PACKAGE_NAME.]),
1821 ,with_product_name=$PRODUCTNAME)
1823 libo_FUZZ_ARG_ENABLE(community-flavor,
1824     AS_HELP_STRING([--disable-community-flavor],
1825         [Disable the Community branding.]),
1828 AC_ARG_WITH(package-version,
1829     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1830         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1833 libo_FUZZ_ARG_ENABLE(readonly-installset,
1834     AS_HELP_STRING([--enable-readonly-installset],
1835         [Prevents any attempts by LibreOffice to write into its installation. That means
1836          at least that no "system-wide" extensions can be added. Partly experimental work in
1837          progress, probably not fully implemented. Always enabled for macOS.]),
1840 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1841     AS_HELP_STRING([--disable-mariadb-sdbc],
1842         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1845 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1846     AS_HELP_STRING([--disable-postgresql-sdbc],
1847         [Disable the build of the PostgreSQL-SDBC driver.])
1850 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1851     AS_HELP_STRING([--disable-lotuswordpro],
1852         [Disable the build of the Lotus Word Pro filter.]),
1853 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1855 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1856     AS_HELP_STRING([--disable-firebird-sdbc],
1857         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1858 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1860 AC_ARG_ENABLE(bogus-pkg-config,
1861     AS_HELP_STRING([--enable-bogus-pkg-config],
1862         [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.]),
1865 AC_ARG_ENABLE(openssl,
1866     AS_HELP_STRING([--disable-openssl],
1867         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1868          components will either use GNUTLS or NSS. Work in progress,
1869          use only if you are hacking on it.]),
1870 ,enable_openssl=yes)
1872 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1873     AS_HELP_STRING([--enable-cipher-openssl-backend],
1874         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1875          Requires --enable-openssl.]))
1877 AC_ARG_ENABLE(nss,
1878     AS_HELP_STRING([--disable-nss],
1879         [Disable using NSS. If disabled,
1880          components will either use GNUTLS or openssl. Work in progress,
1881          use only if you are hacking on it.]),
1882 ,enable_nss=yes)
1884 AC_ARG_ENABLE(library-bin-tar,
1885     AS_HELP_STRING([--enable-library-bin-tar],
1886         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1887         Some libraries can save their build result in a tarball
1888         stored in TARFILE_LOCATION. That binary tarball is
1889         uniquely identified by the source tarball,
1890         the content of the config_host.mk file and the content
1891         of the top-level directory in core for that library
1892         If this option is enabled, then if such a tarfile exist, it will be untarred
1893         instead of the source tarfile, and the build step will be skipped for that
1894         library.
1895         If a proper tarfile does not exist, then the normal source-based
1896         build is done for that library and a proper binary tarfile is created
1897         for the next time.]),
1900 AC_ARG_ENABLE(dconf,
1901     AS_HELP_STRING([--disable-dconf],
1902         [Disable the dconf configuration backend (enabled by default where
1903          available).]))
1905 libo_FUZZ_ARG_ENABLE(formula-logger,
1906     AS_HELP_STRING(
1907         [--enable-formula-logger],
1908         [Enable formula logger for logging formula calculation flow in Calc.]
1909     )
1912 AC_ARG_ENABLE(ldap,
1913     AS_HELP_STRING([--disable-ldap],
1914         [Disable LDAP support.]),
1915 ,enable_ldap=yes)
1917 AC_ARG_ENABLE(opencl,
1918     AS_HELP_STRING([--disable-opencl],
1919         [Disable OpenCL support.]),
1920 ,enable_opencl=yes)
1922 libo_FUZZ_ARG_ENABLE(librelogo,
1923     AS_HELP_STRING([--disable-librelogo],
1924         [Do not build LibreLogo.]),
1925 ,enable_librelogo=yes)
1927 AC_ARG_ENABLE(cmis,
1928     AS_HELP_STRING([--disable-cmis],
1929         [Disable CMIS support.]),
1930 ,enable_cmis=yes)
1932 AC_ARG_ENABLE(curl,
1933     AS_HELP_STRING([--disable-curl],
1934         [Disable CURL support.]),
1935 ,enable_curl=yes)
1937 AC_ARG_ENABLE(wasm-strip,
1938     AS_HELP_STRING([--enable-wasm-strip],
1939         [Strip the static build like for WASM/emscripten platform.]),
1940 ,enable_wasm_strip=yes)
1943 dnl ===================================================================
1944 dnl Optional Packages (--with/without-)
1945 dnl ===================================================================
1947 AC_ARG_WITH(gcc-home,
1948     AS_HELP_STRING([--with-gcc-home],
1949         [Specify the location of gcc/g++ manually. This can be used in conjunction
1950          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1951          non-default path.]),
1954 AC_ARG_WITH(gnu-patch,
1955     AS_HELP_STRING([--with-gnu-patch],
1956         [Specify location of GNU patch on Solaris or FreeBSD.]),
1959 AC_ARG_WITH(build-platform-configure-options,
1960     AS_HELP_STRING([--with-build-platform-configure-options],
1961         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1964 AC_ARG_WITH(gnu-cp,
1965     AS_HELP_STRING([--with-gnu-cp],
1966         [Specify location of GNU cp on Solaris or FreeBSD.]),
1969 AC_ARG_WITH(external-tar,
1970     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1971         [Specify an absolute path of where to find (and store) tarfiles.]),
1972     TARFILE_LOCATION=$withval ,
1975 AC_ARG_WITH(referenced-git,
1976     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
1977         [Specify another checkout directory to reference. This makes use of
1978                  git submodule update --reference, and saves a lot of diskspace
1979                  when having multiple trees side-by-side.]),
1980     GIT_REFERENCE_SRC=$withval ,
1983 AC_ARG_WITH(linked-git,
1984     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
1985         [Specify a directory where the repositories of submodules are located.
1986          This uses a method similar to git-new-workdir to get submodules.]),
1987     GIT_LINK_SRC=$withval ,
1990 AC_ARG_WITH(galleries,
1991     AS_HELP_STRING([--with-galleries],
1992         [Specify how galleries should be built. It is possible either to
1993          build these internally from source ("build"),
1994          or to disable them ("no")]),
1997 AC_ARG_WITH(theme,
1998     AS_HELP_STRING([--with-theme="theme1 theme2..."],
1999         [Choose which themes to include. By default those themes with an '*' are included.
2000          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2001          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2004 libo_FUZZ_ARG_WITH(helppack-integration,
2005     AS_HELP_STRING([--without-helppack-integration],
2006         [It will not integrate the helppacks to the installer
2007          of the product. Please use this switch to use the online help
2008          or separate help packages.]),
2011 libo_FUZZ_ARG_WITH(fonts,
2012     AS_HELP_STRING([--without-fonts],
2013         [LibreOffice includes some third-party fonts to provide a reliable basis for
2014          help content, templates, samples, etc. When these fonts are already
2015          known to be available on the system then you should use this option.]),
2018 AC_ARG_WITH(epm,
2019     AS_HELP_STRING([--with-epm],
2020         [Decides which epm to use. Default is to use the one from the system if
2021          one is built. When either this is not there or you say =internal epm
2022          will be built.]),
2025 AC_ARG_WITH(package-format,
2026     AS_HELP_STRING([--with-package-format],
2027         [Specify package format(s) for LibreOffice installation sets. The
2028          implicit --without-package-format leads to no installation sets being
2029          generated. Possible values: aix, archive, bsd, deb, dmg,
2030          installed, msi, pkg, and rpm.
2031          Example: --with-package-format='deb rpm']),
2034 AC_ARG_WITH(tls,
2035     AS_HELP_STRING([--with-tls],
2036         [Decides which TLS/SSL and cryptographic implementations to use for
2037          LibreOffice's code. Notice that this doesn't apply for depending
2038          libraries like "neon", for example. Default is to use NSS
2039          although OpenSSL is also possible. Notice that selecting NSS restricts
2040          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2041          restrict by now the usage of NSS in LO's code. Possible values:
2042          openssl, nss. Example: --with-tls="nss"]),
2045 AC_ARG_WITH(system-libs,
2046     AS_HELP_STRING([--with-system-libs],
2047         [Use libraries already on system -- enables all --with-system-* flags.]),
2050 AC_ARG_WITH(system-bzip2,
2051     AS_HELP_STRING([--with-system-bzip2],
2052         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2053     [with_system_bzip2="$with_system_libs"])
2055 AC_ARG_WITH(system-headers,
2056     AS_HELP_STRING([--with-system-headers],
2057         [Use headers already on system -- enables all --with-system-* flags for
2058          external packages whose headers are the only entities used i.e.
2059          boost/odbc/sane-header(s).]),,
2060     [with_system_headers="$with_system_libs"])
2062 AC_ARG_WITH(system-jars,
2063     AS_HELP_STRING([--without-system-jars],
2064         [When building with --with-system-libs, also the needed jars are expected
2065          on the system. Use this to disable that]),,
2066     [with_system_jars="$with_system_libs"])
2068 AC_ARG_WITH(system-cairo,
2069     AS_HELP_STRING([--with-system-cairo],
2070         [Use cairo libraries already on system.  Happens automatically for
2071          (implicit) --enable-gtk3.]))
2073 AC_ARG_WITH(system-epoxy,
2074     AS_HELP_STRING([--with-system-epoxy],
2075         [Use epoxy libraries already on system.  Happens automatically for
2076          (implicit) --enable-gtk3.]),,
2077        [with_system_epoxy="$with_system_libs"])
2079 AC_ARG_WITH(myspell-dicts,
2080     AS_HELP_STRING([--with-myspell-dicts],
2081         [Adds myspell dictionaries to the LibreOffice installation set]),
2084 AC_ARG_WITH(system-dicts,
2085     AS_HELP_STRING([--without-system-dicts],
2086         [Do not use dictionaries from system paths.]),
2089 AC_ARG_WITH(external-dict-dir,
2090     AS_HELP_STRING([--with-external-dict-dir],
2091         [Specify external dictionary dir.]),
2094 AC_ARG_WITH(external-hyph-dir,
2095     AS_HELP_STRING([--with-external-hyph-dir],
2096         [Specify external hyphenation pattern dir.]),
2099 AC_ARG_WITH(external-thes-dir,
2100     AS_HELP_STRING([--with-external-thes-dir],
2101         [Specify external thesaurus dir.]),
2104 AC_ARG_WITH(system-zlib,
2105     AS_HELP_STRING([--with-system-zlib],
2106         [Use zlib already on system.]),,
2107     [with_system_zlib=auto])
2109 AC_ARG_WITH(system-jpeg,
2110     AS_HELP_STRING([--with-system-jpeg],
2111         [Use jpeg already on system.]),,
2112     [with_system_jpeg="$with_system_libs"])
2114 AC_ARG_WITH(system-clucene,
2115     AS_HELP_STRING([--with-system-clucene],
2116         [Use clucene already on system.]),,
2117     [with_system_clucene="$with_system_libs"])
2119 AC_ARG_WITH(system-expat,
2120     AS_HELP_STRING([--with-system-expat],
2121         [Use expat already on system.]),,
2122     [with_system_expat="$with_system_libs"])
2124 AC_ARG_WITH(system-libxml,
2125     AS_HELP_STRING([--with-system-libxml],
2126         [Use libxml/libxslt already on system.]),,
2127     [with_system_libxml=auto])
2129 AC_ARG_WITH(system-icu,
2130     AS_HELP_STRING([--with-system-icu],
2131         [Use icu already on system.]),,
2132     [with_system_icu="$with_system_libs"])
2134 AC_ARG_WITH(system-ucpp,
2135     AS_HELP_STRING([--with-system-ucpp],
2136         [Use ucpp already on system.]),,
2137     [])
2139 AC_ARG_WITH(system-openldap,
2140     AS_HELP_STRING([--with-system-openldap],
2141         [Use the OpenLDAP LDAP SDK already on system.]),,
2142     [with_system_openldap="$with_system_libs"])
2144 libo_FUZZ_ARG_ENABLE(poppler,
2145     AS_HELP_STRING([--disable-poppler],
2146         [Disable building Poppler.])
2149 AC_ARG_WITH(system-poppler,
2150     AS_HELP_STRING([--with-system-poppler],
2151         [Use system poppler (only needed for PDF import).]),,
2152     [with_system_poppler="$with_system_libs"])
2154 libo_FUZZ_ARG_ENABLE(gpgmepp,
2155     AS_HELP_STRING([--disable-gpgmepp],
2156         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2159 AC_ARG_WITH(system-gpgmepp,
2160     AS_HELP_STRING([--with-system-gpgmepp],
2161         [Use gpgmepp already on system]),,
2162     [with_system_gpgmepp="$with_system_libs"])
2164 AC_ARG_WITH(system-mariadb,
2165     AS_HELP_STRING([--with-system-mariadb],
2166         [Use MariaDB/MySQL libraries already on system.]),,
2167     [with_system_mariadb="$with_system_libs"])
2169 AC_ARG_ENABLE(bundle-mariadb,
2170     AS_HELP_STRING([--enable-bundle-mariadb],
2171         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2174 AC_ARG_WITH(system-postgresql,
2175     AS_HELP_STRING([--with-system-postgresql],
2176         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2177          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2178     [with_system_postgresql="$with_system_libs"])
2180 AC_ARG_WITH(libpq-path,
2181     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2182         [Use this PostgreSQL C interface (libpq) installation for building
2183          the PostgreSQL-SDBC extension.]),
2186 AC_ARG_WITH(system-firebird,
2187     AS_HELP_STRING([--with-system-firebird],
2188         [Use Firebird libraries already on system, for building the Firebird-SDBC
2189          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2190     [with_system_firebird="$with_system_libs"])
2192 AC_ARG_WITH(system-libtommath,
2193             AS_HELP_STRING([--with-system-libtommath],
2194                            [Use libtommath already on system]),,
2195             [with_system_libtommath="$with_system_libs"])
2197 AC_ARG_WITH(system-hsqldb,
2198     AS_HELP_STRING([--with-system-hsqldb],
2199         [Use hsqldb already on system.]))
2201 AC_ARG_WITH(hsqldb-jar,
2202     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2203         [Specify path to jarfile manually.]),
2204     HSQLDB_JAR=$withval)
2206 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2207     AS_HELP_STRING([--disable-scripting-beanshell],
2208         [Disable support for scripts in BeanShell.]),
2212 AC_ARG_WITH(system-beanshell,
2213     AS_HELP_STRING([--with-system-beanshell],
2214         [Use beanshell already on system.]),,
2215     [with_system_beanshell="$with_system_jars"])
2217 AC_ARG_WITH(beanshell-jar,
2218     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2219         [Specify path to jarfile manually.]),
2220     BSH_JAR=$withval)
2222 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2223     AS_HELP_STRING([--disable-scripting-javascript],
2224         [Disable support for scripts in JavaScript.]),
2228 AC_ARG_WITH(system-rhino,
2229     AS_HELP_STRING([--with-system-rhino],
2230         [Use rhino already on system.]),,)
2231 #    [with_system_rhino="$with_system_jars"])
2232 # Above is not used as we have different debug interface
2233 # patched into internal rhino. This code needs to be fixed
2234 # before we can enable it by default.
2236 AC_ARG_WITH(rhino-jar,
2237     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2238         [Specify path to jarfile manually.]),
2239     RHINO_JAR=$withval)
2241 AC_ARG_WITH(system-jfreereport,
2242     AS_HELP_STRING([--with-system-jfreereport],
2243         [Use JFreeReport already on system.]),,
2244     [with_system_jfreereport="$with_system_jars"])
2246 AC_ARG_WITH(sac-jar,
2247     AS_HELP_STRING([--with-sac-jar=JARFILE],
2248         [Specify path to jarfile manually.]),
2249     SAC_JAR=$withval)
2251 AC_ARG_WITH(libxml-jar,
2252     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2253         [Specify path to jarfile manually.]),
2254     LIBXML_JAR=$withval)
2256 AC_ARG_WITH(flute-jar,
2257     AS_HELP_STRING([--with-flute-jar=JARFILE],
2258         [Specify path to jarfile manually.]),
2259     FLUTE_JAR=$withval)
2261 AC_ARG_WITH(jfreereport-jar,
2262     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2263         [Specify path to jarfile manually.]),
2264     JFREEREPORT_JAR=$withval)
2266 AC_ARG_WITH(liblayout-jar,
2267     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2268         [Specify path to jarfile manually.]),
2269     LIBLAYOUT_JAR=$withval)
2271 AC_ARG_WITH(libloader-jar,
2272     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2273         [Specify path to jarfile manually.]),
2274     LIBLOADER_JAR=$withval)
2276 AC_ARG_WITH(libformula-jar,
2277     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2278         [Specify path to jarfile manually.]),
2279     LIBFORMULA_JAR=$withval)
2281 AC_ARG_WITH(librepository-jar,
2282     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2283         [Specify path to jarfile manually.]),
2284     LIBREPOSITORY_JAR=$withval)
2286 AC_ARG_WITH(libfonts-jar,
2287     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2288         [Specify path to jarfile manually.]),
2289     LIBFONTS_JAR=$withval)
2291 AC_ARG_WITH(libserializer-jar,
2292     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2293         [Specify path to jarfile manually.]),
2294     LIBSERIALIZER_JAR=$withval)
2296 AC_ARG_WITH(libbase-jar,
2297     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2298         [Specify path to jarfile manually.]),
2299     LIBBASE_JAR=$withval)
2301 AC_ARG_WITH(system-odbc,
2302     AS_HELP_STRING([--with-system-odbc],
2303         [Use the odbc headers already on system.]),,
2304     [with_system_odbc="auto"])
2306 AC_ARG_WITH(system-sane,
2307     AS_HELP_STRING([--with-system-sane],
2308         [Use sane.h already on system.]),,
2309     [with_system_sane="$with_system_headers"])
2311 AC_ARG_WITH(system-bluez,
2312     AS_HELP_STRING([--with-system-bluez],
2313         [Use bluetooth.h already on system.]),,
2314     [with_system_bluez="$with_system_headers"])
2316 AC_ARG_WITH(system-curl,
2317     AS_HELP_STRING([--with-system-curl],
2318         [Use curl already on system.]),,
2319     [with_system_curl=auto])
2321 AC_ARG_WITH(system-boost,
2322     AS_HELP_STRING([--with-system-boost],
2323         [Use boost already on system.]),,
2324     [with_system_boost="$with_system_headers"])
2326 AC_ARG_WITH(system-glm,
2327     AS_HELP_STRING([--with-system-glm],
2328         [Use glm already on system.]),,
2329     [with_system_glm="$with_system_headers"])
2331 AC_ARG_WITH(system-hunspell,
2332     AS_HELP_STRING([--with-system-hunspell],
2333         [Use libhunspell already on system.]),,
2334     [with_system_hunspell="$with_system_libs"])
2336 libo_FUZZ_ARG_ENABLE(zxing,
2337     AS_HELP_STRING([--disable-zxing],
2338        [Disable use of zxing external library.]))
2340 AC_ARG_WITH(system-zxing,
2341     AS_HELP_STRING([--with-system-zxing],
2342         [Use libzxing already on system.]),,
2343     [with_system_zxing="$with_system_libs"])
2345 AC_ARG_WITH(system-box2d,
2346     AS_HELP_STRING([--with-system-box2d],
2347         [Use box2d already on system.]),,
2348     [with_system_box2d="$with_system_libs"])
2350 AC_ARG_WITH(system-mythes,
2351     AS_HELP_STRING([--with-system-mythes],
2352         [Use mythes already on system.]),,
2353     [with_system_mythes="$with_system_libs"])
2355 AC_ARG_WITH(system-altlinuxhyph,
2356     AS_HELP_STRING([--with-system-altlinuxhyph],
2357         [Use ALTLinuxhyph already on system.]),,
2358     [with_system_altlinuxhyph="$with_system_libs"])
2360 AC_ARG_WITH(system-lpsolve,
2361     AS_HELP_STRING([--with-system-lpsolve],
2362         [Use lpsolve already on system.]),,
2363     [with_system_lpsolve="$with_system_libs"])
2365 AC_ARG_WITH(system-coinmp,
2366     AS_HELP_STRING([--with-system-coinmp],
2367         [Use CoinMP already on system.]),,
2368     [with_system_coinmp="$with_system_libs"])
2370 AC_ARG_WITH(system-liblangtag,
2371     AS_HELP_STRING([--with-system-liblangtag],
2372         [Use liblangtag library already on system.]),,
2373     [with_system_liblangtag="$with_system_libs"])
2375 AC_ARG_WITH(webdav,
2376     AS_HELP_STRING([--with-webdav],
2377         [Specify which library to use for webdav implementation.
2378          Possible values: "neon", "serf", "no". The default value is "neon".
2379          Example: --with-webdav="serf"]))
2381 AC_ARG_WITH(linker-hash-style,
2382     AS_HELP_STRING([--with-linker-hash-style],
2383         [Use linker with --hash-style=<style> when linking shared objects.
2384          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2385          if supported on the build system, and "sysv" otherwise.]))
2387 AC_ARG_WITH(jdk-home,
2388     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2389         [If you have installed JDK 9 or later on your system please supply the
2390          path here. Note that this is not the location of the java command but the
2391          location of the entire distribution. In case of cross-compiling, this
2392          is the JDK of the host os. Use --with-build-platform-configure-options
2393          to point to a different build platform JDK.]),
2396 AC_ARG_WITH(help,
2397     AS_HELP_STRING([--with-help],
2398         [Enable the build of help. There is a special parameter "common" that
2399          can be used to bundle only the common part, .e.g help-specific icons.
2400          This is useful when you build the helpcontent separately.])
2401     [
2402                           Usage:     --with-help    build the old local help
2403                                  --without-help     no local help (default)
2404                                  --with-help=html   build the new HTML local help
2405                                  --with-help=online build the new HTML online help
2406     ],
2409 AC_ARG_WITH(omindex,
2410    AS_HELP_STRING([--with-omindex],
2411         [Enable the support of xapian-omega index for online help.])
2412    [
2413                          Usage: --with-omindex=server prepare the pages for omindex
2414                                 but let xapian-omega be built in server.
2415                                 --with-omindex=noxap do not prepare online pages
2416                                 for xapian-omega
2417   ],
2420 libo_FUZZ_ARG_WITH(java,
2421     AS_HELP_STRING([--with-java=<java command>],
2422         [Specify the name of the Java interpreter command. Typically "java"
2423          which is the default.
2425          To build without support for Java components, applets, accessibility
2426          or the XML filters written in Java, use --without-java or --with-java=no.]),
2427     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2428     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2431 AC_ARG_WITH(jvm-path,
2432     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2433         [Use a specific JVM search path at runtime.
2434          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2437 AC_ARG_WITH(ant-home,
2438     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2439         [If you have installed Apache Ant on your system, please supply the path here.
2440          Note that this is not the location of the Ant binary but the location
2441          of the entire distribution.]),
2444 AC_ARG_WITH(symbol-config,
2445     AS_HELP_STRING([--with-symbol-config],
2446         [Configuration for the crashreport symbol upload]),
2447         [],
2448         [with_symbol_config=no])
2450 AC_ARG_WITH(export-validation,
2451     AS_HELP_STRING([--without-export-validation],
2452         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2453 ,with_export_validation=auto)
2455 AC_ARG_WITH(bffvalidator,
2456     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2457         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2458          Requires installed Microsoft Office Binary File Format Validator.
2459          Note: export-validation (--with-export-validation) is required to be turned on.
2460          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2461 ,with_bffvalidator=no)
2463 libo_FUZZ_ARG_WITH(junit,
2464     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2465         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2466          --without-junit disables those tests. Not relevant in the --without-java case.]),
2467 ,with_junit=yes)
2469 AC_ARG_WITH(hamcrest,
2470     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2471         [Specifies the hamcrest jar file to use for JUnit-based tests.
2472          --without-junit disables those tests. Not relevant in the --without-java case.]),
2473 ,with_hamcrest=yes)
2475 AC_ARG_WITH(perl-home,
2476     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2477         [If you have installed Perl 5 Distribution, on your system, please
2478          supply the path here. Note that this is not the location of the Perl
2479          binary but the location of the entire distribution.]),
2482 libo_FUZZ_ARG_WITH(doxygen,
2483     AS_HELP_STRING(
2484         [--with-doxygen=<absolute path to doxygen executable>],
2485         [Specifies the doxygen executable to use when generating ODK C/C++
2486          documentation. --without-doxygen disables generation of ODK C/C++
2487          documentation. Not relevant in the --disable-odk case.]),
2488 ,with_doxygen=yes)
2490 AC_ARG_WITH(visual-studio,
2491     AS_HELP_STRING([--with-visual-studio=<2019>],
2492         [Specify which Visual Studio version to use in case several are
2493          installed. Currently only 2019 (default) is supported.]),
2496 AC_ARG_WITH(windows-sdk,
2497     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2498         [Specify which Windows SDK, or "Windows Kit", version to use
2499          in case the one that came with the selected Visual Studio
2500          is not what you want for some reason. Note that not all compiler/SDK
2501          combinations are supported. The intent is that this option should not
2502          be needed.]),
2505 AC_ARG_WITH(lang,
2506     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2507         [Use this option to build LibreOffice with additional UI language support.
2508          English (US) is always included by default.
2509          Separate multiple languages with space.
2510          For all languages, use --with-lang=ALL.]),
2513 AC_ARG_WITH(locales,
2514     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2515         [Use this option to limit the locale information built in.
2516          Separate multiple locales with space.
2517          Very experimental and might well break stuff.
2518          Just a desperate measure to shrink code and data size.
2519          By default all the locales available is included.
2520          This option is completely unrelated to --with-lang.])
2521     [
2522                           Affects also our character encoding conversion
2523                           tables for encodings mainly targeted for a
2524                           particular locale, like EUC-CN and EUC-TW for
2525                           zh, ISO-2022-JP for ja.
2527                           Affects also our add-on break iterator data for
2528                           some languages.
2530                           For the default, all locales, don't use this switch at all.
2531                           Specifying just the language part of a locale means all matching
2532                           locales will be included.
2533     ],
2536 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2537 libo_FUZZ_ARG_WITH(krb5,
2538     AS_HELP_STRING([--with-krb5],
2539         [Enable MIT Kerberos 5 support in modules that support it.
2540          By default automatically enabled on platforms
2541          where a good system Kerberos 5 is available.]),
2544 libo_FUZZ_ARG_WITH(gssapi,
2545     AS_HELP_STRING([--with-gssapi],
2546         [Enable GSSAPI support in modules that support it.
2547          By default automatically enabled on platforms
2548          where a good system GSSAPI is available.]),
2551 AC_ARG_WITH(iwyu,
2552     AS_HELP_STRING([--with-iwyu],
2553         [Use given IWYU binary path to check unneeded includes instead of building.
2554          Use only if you are hacking on it.]),
2557 libo_FUZZ_ARG_WITH(lxml,
2558     AS_HELP_STRING([--without-lxml],
2559         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2560          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2561          report widget classes and ids.]),
2564 libo_FUZZ_ARG_WITH(latest-c++,
2565     AS_HELP_STRING([--with-latest-c++],
2566         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2567          published standard.]),,
2568         [with_latest_c__=no])
2570 dnl ===================================================================
2571 dnl Branding
2572 dnl ===================================================================
2574 AC_ARG_WITH(branding,
2575     AS_HELP_STRING([--with-branding=/path/to/images],
2576         [Use given path to retrieve branding images set.])
2577     [
2578                           Search for intro.png about.svg and logo.svg.
2579                           If any is missing, default ones will be used instead.
2581                           Search also progress.conf for progress
2582                           settings on intro screen :
2584                           PROGRESSBARCOLOR="255,255,255" Set color of
2585                           progress bar. Comma separated RGB decimal values.
2586                           PROGRESSSIZE="407,6" Set size of progress bar.
2587                           Comma separated decimal values (width, height).
2588                           PROGRESSPOSITION="61,317" Set position of progress
2589                           bar from left,top. Comma separated decimal values.
2590                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2591                           bar frame. Comma separated RGB decimal values.
2592                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2593                           bar text. Comma separated RGB decimal values.
2594                           PROGRESSTEXTBASELINE="287" Set vertical position of
2595                           progress bar text from top. Decimal value.
2597                           Default values will be used if not found.
2598     ],
2602 AC_ARG_WITH(extra-buildid,
2603     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2604         [Show addition build identification in about dialog.]),
2608 AC_ARG_WITH(vendor,
2609     AS_HELP_STRING([--with-vendor="John the Builder"],
2610         [Set vendor of the build.]),
2613 AC_ARG_WITH(privacy-policy-url,
2614     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2615         [The URL to your privacy policy (needed when
2616          enabling online-update or crashreporting via breakpad)]),
2617         [if test "x$with_privacy_policy_url" = "xyes"; then
2618             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2619          elif test "x$with_privacy_policy_url" = "xno"; then
2620             with_privacy_policy_url="undefined"
2621          fi]
2622 ,[with_privacy_policy_url="undefined"])
2624 AC_ARG_WITH(android-package-name,
2625     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2626         [Set Android package name of the build.]),
2629 AC_ARG_WITH(compat-oowrappers,
2630     AS_HELP_STRING([--with-compat-oowrappers],
2631         [Install oo* wrappers in parallel with
2632          lo* ones to keep backward compatibility.
2633          Has effect only with make distro-pack-install]),
2636 AC_ARG_WITH(os-version,
2637     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2638         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2641 AC_ARG_WITH(idlc-cpp,
2642     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2643         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2646 AC_ARG_WITH(parallelism,
2647     AS_HELP_STRING([--with-parallelism],
2648         [Number of jobs to run simultaneously during build. Parallel builds can
2649         save a lot of time on multi-cpu machines. Defaults to the number of
2650         CPUs on the machine, unless you configure --enable-icecream - then to
2651         40.]),
2654 AC_ARG_WITH(all-tarballs,
2655     AS_HELP_STRING([--with-all-tarballs],
2656         [Download all external tarballs unconditionally]))
2658 AC_ARG_WITH(gdrive-client-id,
2659     AS_HELP_STRING([--with-gdrive-client-id],
2660         [Provides the client id of the application for OAuth2 authentication
2661         on Google Drive. If either this or --with-gdrive-client-secret is
2662         empty, the feature will be disabled]),
2665 AC_ARG_WITH(gdrive-client-secret,
2666     AS_HELP_STRING([--with-gdrive-client-secret],
2667         [Provides the client secret of the application for OAuth2
2668         authentication on Google Drive. If either this or
2669         --with-gdrive-client-id is empty, the feature will be disabled]),
2672 AC_ARG_WITH(alfresco-cloud-client-id,
2673     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2674         [Provides the client id of the application for OAuth2 authentication
2675         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2676         empty, the feature will be disabled]),
2679 AC_ARG_WITH(alfresco-cloud-client-secret,
2680     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2681         [Provides the client secret of the application for OAuth2
2682         authentication on Alfresco Cloud. If either this or
2683         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2686 AC_ARG_WITH(onedrive-client-id,
2687     AS_HELP_STRING([--with-onedrive-client-id],
2688         [Provides the client id of the application for OAuth2 authentication
2689         on OneDrive. If either this or --with-onedrive-client-secret is
2690         empty, the feature will be disabled]),
2693 AC_ARG_WITH(onedrive-client-secret,
2694     AS_HELP_STRING([--with-onedrive-client-secret],
2695         [Provides the client secret of the application for OAuth2
2696         authentication on OneDrive. If either this or
2697         --with-onedrive-client-id is empty, the feature will be disabled]),
2699 dnl ===================================================================
2700 dnl Do we want to use pre-build binary tarball for recompile
2701 dnl ===================================================================
2703 if test "$enable_library_bin_tar" = "yes" ; then
2704     USE_LIBRARY_BIN_TAR=TRUE
2705 else
2706     USE_LIBRARY_BIN_TAR=
2708 AC_SUBST(USE_LIBRARY_BIN_TAR)
2710 dnl ===================================================================
2711 dnl Test whether build target is Release Build
2712 dnl ===================================================================
2713 AC_MSG_CHECKING([whether build target is Release Build])
2714 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2715     AC_MSG_RESULT([no])
2716     ENABLE_RELEASE_BUILD=
2717     GET_TASK_ALLOW_ENTITLEMENT='
2718         <!-- We want to be able to debug a hardened process when not building for release -->
2719         <key>com.apple.security.get-task-allow</key>
2720         <true/>'
2721 else
2722     AC_MSG_RESULT([yes])
2723     ENABLE_RELEASE_BUILD=TRUE
2724     GET_TASK_ALLOW_ENTITLEMENT=''
2726 AC_SUBST(ENABLE_RELEASE_BUILD)
2727 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2729 AC_MSG_CHECKING([whether to build a Community flavor])
2730 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2731     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2732     AC_MSG_RESULT([yes])
2733 else
2734     AC_MSG_RESULT([no])
2737 dnl ===================================================================
2738 dnl Test whether to sign Windows Build
2739 dnl ===================================================================
2740 AC_MSG_CHECKING([whether to sign windows build])
2741 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2742     AC_MSG_RESULT([yes])
2743     WINDOWS_BUILD_SIGNING="TRUE"
2744 else
2745     AC_MSG_RESULT([no])
2746     WINDOWS_BUILD_SIGNING="FALSE"
2748 AC_SUBST(WINDOWS_BUILD_SIGNING)
2750 dnl ===================================================================
2751 dnl MacOSX build and runtime environment options
2752 dnl ===================================================================
2754 AC_ARG_WITH(macosx-sdk,
2755     AS_HELP_STRING([--with-macosx-sdk=<version>],
2756         [Prefer a specific SDK for building.])
2757     [
2758                           If the requested SDK is not available, a search for the oldest one will be done.
2759                           With current Xcode versions, only the latest SDK is included, so this option is
2760                           not terribly useful. It works fine to build with a new SDK and run the result
2761                           on an older OS.
2763                           e. g.: --with-macosx-sdk=10.10
2765                           there are 3 options to control the MacOSX build:
2766                           --with-macosx-sdk (referred as 'sdk' below)
2767                           --with-macosx-version-min-required (referred as 'min' below)
2768                           --with-macosx-version-max-allowed (referred as 'max' below)
2770                           the connection between these value and the default they take is as follow:
2771                           ( ? means not specified on the command line, s means the SDK version found,
2772                           constraint: 8 <= x <= y <= z)
2774                           ==========================================
2775                            command line      || config result
2776                           ==========================================
2777                           min  | max  | sdk  || min   | max  | sdk  |
2778                           ?    | ?    | ?    || 10.10 | 10.s | 10.s |
2779                           ?    | ?    | 10.x || 10.10 | 10.x | 10.x |
2780                           ?    | 10.x | ?    || 10.10 | 10.s | 10.s |
2781                           ?    | 10.x | 10.y || 10.10 | 10.x | 10.y |
2782                           10.x | ?    | ?    || 10.x  | 10.s | 10.s |
2783                           10.x | ?    | 10.y || 10.x  | 10.y | 10.y |
2784                           10.x | 10.y | ?    || 10.x  | 10.y | 10.y |
2785                           10.x | 10.y | 10.z || 10.x  | 10.y | 10.z |
2788                           see: http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2789                           for a detailed technical explanation of these variables
2791                           Note: MACOSX_DEPLOYMENT_TARGET will be set to the value of 'min'.
2792     ],
2795 AC_ARG_WITH(macosx-version-min-required,
2796     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2797         [set the minimum OS version needed to run the built LibreOffice])
2798     [
2799                           e. g.: --with-macosx-version-min-required=10.10
2800                           see --with-macosx-sdk for more info
2801     ],
2804 AC_ARG_WITH(macosx-version-max-allowed,
2805     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2806         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2807     [
2808                           e. g.: --with-macosx-version-max-allowed=10.10
2809                           see --with-macosx-sdk for more info
2810     ],
2814 dnl ===================================================================
2815 dnl options for stuff used during cross-compilation build
2816 dnl Not quite superseded by --with-build-platform-configure-options.
2817 dnl TODO: check, if the "force" option is still needed anywhere.
2818 dnl ===================================================================
2820 AC_ARG_WITH(system-icu-for-build,
2821     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2822         [Use icu already on system for build tools (cross-compilation only).]))
2825 dnl ===================================================================
2826 dnl Check for incompatible options set by fuzzing, and reset those
2827 dnl automatically to working combinations
2828 dnl ===================================================================
2830 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2831         "$enable_dbus" != "$enable_avahi"; then
2832     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2833     enable_avahi=$enable_dbus
2836 add_lopath_after ()
2838     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2839         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2840     fi
2843 add_lopath_before ()
2845     local IFS=${P_SEP}
2846     local path_cleanup
2847     local dir
2848     for dir in $LO_PATH ; do
2849         if test "$dir" != "$1" ; then
2850             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2851         fi
2852     done
2853     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2856 dnl ===================================================================
2857 dnl check for required programs (grep, awk, sed, bash)
2858 dnl ===================================================================
2860 pathmunge ()
2862     local new_path
2863     if test -n "$1"; then
2864         if test "$build_os" = "cygwin"; then
2865             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2866                 PathFormat "$1"
2867                 new_path=`cygpath -sm "$formatted_path"`
2868             else
2869                 PathFormat "$1"
2870                 new_path=`cygpath -u "$formatted_path"`
2871             fi
2872         else
2873             new_path="$1"
2874         fi
2875         if test "$2" = "after"; then
2876             add_lopath_after "$new_path"
2877         else
2878             add_lopath_before "$new_path"
2879         fi
2880     fi
2883 AC_PROG_AWK
2884 AC_PATH_PROG( AWK, $AWK)
2885 if test -z "$AWK"; then
2886     AC_MSG_ERROR([install awk to run this script])
2889 AC_PATH_PROG(BASH, bash)
2890 if test -z "$BASH"; then
2891     AC_MSG_ERROR([bash not found in \$PATH])
2893 AC_SUBST(BASH)
2895 AC_MSG_CHECKING([for GNU or BSD tar])
2896 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2897     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2898     if test $? -eq 0;  then
2899         GNUTAR=$a
2900         break
2901     fi
2902 done
2903 AC_MSG_RESULT($GNUTAR)
2904 if test -z "$GNUTAR"; then
2905     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2907 AC_SUBST(GNUTAR)
2909 AC_MSG_CHECKING([for tar's option to strip components])
2910 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2911 if test $? -eq 0; then
2912     STRIP_COMPONENTS="--strip-components"
2913 else
2914     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2915     if test $? -eq 0; then
2916         STRIP_COMPONENTS="--strip-path"
2917     else
2918         STRIP_COMPONENTS="unsupported"
2919     fi
2921 AC_MSG_RESULT($STRIP_COMPONENTS)
2922 if test x$STRIP_COMPONENTS = xunsupported; then
2923     AC_MSG_ERROR([you need a tar that is able to strip components.])
2925 AC_SUBST(STRIP_COMPONENTS)
2927 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2928 dnl desktop OSes from "mobile" ones.
2930 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2931 dnl In other words, that when building for an OS that is not a
2932 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2934 dnl Note the direction of the implication; there is no assumption that
2935 dnl cross-compiling would imply a non-desktop OS.
2937 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2938     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2939     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2940     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2943 # Whether to build "avmedia" functionality or not.
2945 if test -z "$enable_avmedia"; then
2946     enable_avmedia=yes
2949 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2950 if test "$enable_avmedia" = yes; then
2951     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2952 else
2953     USE_AVMEDIA_DUMMY='TRUE'
2955 AC_SUBST(USE_AVMEDIA_DUMMY)
2957 # Decide whether to build database connectivity stuff (including Base) or not.
2958 if test "$enable_database_connectivity" != no; then
2959     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2960     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2961 else
2962     if test "$_os" = iOS; then
2963         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2964     fi
2965     disable_database_connectivity_dependencies
2968 if test -z "$enable_extensions"; then
2969     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2970     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2971         enable_extensions=yes
2972     fi
2975 if test "$enable_extensions" = yes; then
2976     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2977     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2980 if test -z "$enable_scripting"; then
2981     # Disable scripting for iOS unless specifically overridden
2982     # with --enable-scripting.
2983     if test $_os != iOS -o $_os = Emscripten; then
2984         enable_scripting=yes
2985     fi
2988 DISABLE_SCRIPTING=''
2989 if test "$enable_scripting" = yes; then
2990     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
2991     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
2992 else
2993     DISABLE_SCRIPTING='TRUE'
2994     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
2997 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
2998     # Disable dynamic_loading always for iOS and Android
2999     enable_dynamic_loading=no
3000 elif test -z "$enable_dynamic_loading"; then
3001     # Otherwise enable it unless specifically disabled
3002     enable_dynamic_loading=yes
3005 DISABLE_DYNLOADING=''
3006 if test "$enable_dynamic_loading" = yes; then
3007     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3008 else
3009     DISABLE_DYNLOADING='TRUE'
3011 AC_SUBST(DISABLE_DYNLOADING)
3013 # remember SYSBASE value
3014 AC_SUBST(SYSBASE)
3016 dnl ===================================================================
3017 dnl  Sort out various gallery compilation options
3018 dnl ===================================================================
3019 WITH_GALLERY_BUILD=TRUE
3020 AC_MSG_CHECKING([how to build and package galleries])
3021 if test -n "${with_galleries}"; then
3022     if test "$with_galleries" = "build"; then
3023         if test "$enable_database_connectivity" = no; then
3024             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3025         fi
3026         AC_MSG_RESULT([build from source images internally])
3027     elif test "$with_galleries" = "no"; then
3028         WITH_GALLERY_BUILD=
3029         AC_MSG_RESULT([disable non-internal gallery build])
3030     else
3031         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3032     fi
3033 else
3034     if test $_os != iOS -a $_os != Android; then
3035         AC_MSG_RESULT([internal src images for desktop])
3036     else
3037         WITH_GALLERY_BUILD=
3038         AC_MSG_RESULT([disable src image build])
3039     fi
3041 AC_SUBST(WITH_GALLERY_BUILD)
3043 dnl ===================================================================
3044 dnl  Checks if ccache is available
3045 dnl ===================================================================
3046 CCACHE_DEPEND_MODE=
3047 if test "$enable_ccache" = "no"; then
3048     CCACHE=""
3049 elif test "$_os" = "WINNT"; then
3050     # on windows/VC build do not use ccache - but perhaps sccache is around?
3051     case "%$CC%$CXX%" in
3052     # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3053     # assume that's good then
3054     *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3055         AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3056         CCACHE_DEPEND_MODE=1
3057         ;;
3058     *)
3059         # for sharing code below, reuse CCACHE env var
3060         AC_PATH_PROG([CCACHE],[sccache],[not found])
3061         if test "$CCACHE" = "not found"; then
3062             CCACHE=""
3063         else
3064             CCACHE=`win_short_path_for_make "$CCACHE"`
3065             CCACHE_DEPEND_MODE=1
3066         fi
3067         ;;
3068     esac
3069 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3070     case "%$CC%$CXX%" in
3071     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3072     # assume that's good then
3073     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3074         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3075         CCACHE_DEPEND_MODE=1
3076         ;;
3077     *)
3078         AC_PATH_PROG([CCACHE],[ccache],[not found])
3079         if test "$CCACHE" = "not found"; then
3080             CCACHE=""
3081         else
3082             CCACHE_DEPEND_MODE=1
3083             # Need to check for ccache version: otherwise prevents
3084             # caching of the results (like "-x objective-c++" for Mac)
3085             if test $_os = Darwin -o $_os = iOS; then
3086                 # Check ccache version
3087                 AC_MSG_CHECKING([whether version of ccache is suitable])
3088                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3089                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3090                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3091                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3092                 else
3093                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3094                     CCACHE=""
3095                     CCACHE_DEPEND_MODE=
3096                 fi
3097             fi
3098         fi
3099         ;;
3100     esac
3101 else
3102     CCACHE=""
3104 if test "$enable_ccache" = "nodepend"; then
3105     CCACHE_DEPEND_MODE=""
3107 AC_SUBST(CCACHE_DEPEND_MODE)
3109 # skip on windows - sccache defaults are good enough
3110 if test "$CCACHE" != "" -a "$_os" != "WINNT"; then
3111     ccache_size_msg=$([ccache -s | tail -n 1 | sed 's/^[^0-9]*//' | sed -e 's/\.[0-9]*//'])
3112     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3113     if test "$ccache_size" = ""; then
3114         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3115         if test "$ccache_size" = ""; then
3116             ccache_size=0
3117         fi
3118         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3119         if test $ccache_size -lt 1024; then
3120             CCACHE=""
3121             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3122             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3123         else
3124             # warn that ccache may be too small for debug build
3125             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3126             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3127         fi
3128     else
3129         if test $ccache_size -lt 5; then
3130             #warn that ccache may be too small for debug build
3131             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3132             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3133         fi
3134     fi
3137 dnl ===================================================================
3138 dnl  Checks for C compiler,
3139 dnl  The check for the C++ compiler is later on.
3140 dnl ===================================================================
3141 if test "$_os" != "WINNT"; then
3142     GCC_HOME_SET="true"
3143     AC_MSG_CHECKING([gcc home])
3144     if test -z "$with_gcc_home"; then
3145         if test "$enable_icecream" = "yes"; then
3146             if test -d "/usr/lib/icecc/bin"; then
3147                 GCC_HOME="/usr/lib/icecc/"
3148             elif test -d "/usr/libexec/icecc/bin"; then
3149                 GCC_HOME="/usr/libexec/icecc/"
3150             elif test -d "/opt/icecream/bin"; then
3151                 GCC_HOME="/opt/icecream/"
3152             else
3153                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3155             fi
3156         else
3157             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3158             GCC_HOME_SET="false"
3159         fi
3160     else
3161         GCC_HOME="$with_gcc_home"
3162     fi
3163     AC_MSG_RESULT($GCC_HOME)
3164     AC_SUBST(GCC_HOME)
3166     if test "$GCC_HOME_SET" = "true"; then
3167         if test -z "$CC"; then
3168             CC="$GCC_HOME/bin/gcc"
3169             CC_BASE="gcc"
3170         fi
3171         if test -z "$CXX"; then
3172             CXX="$GCC_HOME/bin/g++"
3173             CXX_BASE="g++"
3174         fi
3175     fi
3178 COMPATH=`dirname "$CC"`
3179 if test "$COMPATH" = "."; then
3180     AC_PATH_PROGS(COMPATH, $CC)
3181     dnl double square bracket to get single because of M4 quote...
3182     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3184 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3186 dnl ===================================================================
3187 dnl Java support
3188 dnl ===================================================================
3189 AC_MSG_CHECKING([whether to build with Java support])
3190 if test "$with_java" != "no"; then
3191     if test "$DISABLE_SCRIPTING" = TRUE; then
3192         AC_MSG_RESULT([no, overridden by --disable-scripting])
3193         ENABLE_JAVA=""
3194         with_java=no
3195     else
3196         AC_MSG_RESULT([yes])
3197         ENABLE_JAVA="TRUE"
3198         AC_DEFINE(HAVE_FEATURE_JAVA)
3199     fi
3200 else
3201     AC_MSG_RESULT([no])
3202     ENABLE_JAVA=""
3205 AC_SUBST(ENABLE_JAVA)
3207 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3209 dnl ENABLE_JAVA="" indicate no Java support at all
3211 dnl ===================================================================
3212 dnl Check macOS SDK and compiler
3213 dnl ===================================================================
3215 if test $_os = Darwin; then
3217     # If no --with-macosx-sdk option is given, look for one
3219     # The intent is that for "most" Mac-based developers, a suitable
3220     # SDK will be found automatically without any configure options.
3222     # For developers with a current Xcode, the lowest-numbered SDK
3223     # higher than or equal to the minimum required should be found.
3225     AC_MSG_CHECKING([what macOS SDK to use])
3226     for _macosx_sdk in ${with_macosx_sdk-11.3 11.1 11.0 10.15 10.14 10.13}; do
3227         MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null`
3228         if test -d "$MACOSX_SDK_PATH"; then
3229             with_macosx_sdk="${_macosx_sdk}"
3230             break
3231         else
3232             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${_macosx_sdk}.sdk"
3233             if test -d "$MACOSX_SDK_PATH"; then
3234                 with_macosx_sdk="${_macosx_sdk}"
3235                 break
3236             fi
3237         fi
3238     done
3239     if test ! -d "$MACOSX_SDK_PATH"; then
3240         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3241     fi
3243     AC_MSG_RESULT([SDK $with_macosx_sdk at $MACOSX_SDK_PATH])
3245     case $with_macosx_sdk in
3246     10.13)
3247         MACOSX_SDK_VERSION=101300
3248         ;;
3249     10.14)
3250         MACOSX_SDK_VERSION=101400
3251         ;;
3252     10.15)
3253         MACOSX_SDK_VERSION=101500
3254         ;;
3255     11.0)
3256         MACOSX_SDK_VERSION=110000
3257         ;;
3258     11.1)
3259         MACOSX_SDK_VERSION=110100
3260         ;;
3261     11.3)
3262         MACOSX_SDK_VERSION=110300
3263         ;;
3264     *)
3265         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.13--11.3])
3266         ;;
3267     esac
3269     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3270         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value for Apple Silicon])
3271     fi
3273     if test "$with_macosx_version_min_required" = "" ; then
3274         if test "$host_cpu" = x86_64; then
3275             with_macosx_version_min_required="10.10";
3276         else
3277             with_macosx_version_min_required="11.0";
3278         fi
3279     fi
3281     if test "$with_macosx_version_max_allowed" = "" ; then
3282         with_macosx_version_max_allowed="$with_macosx_sdk"
3283     fi
3285     # export this so that "xcrun" invocations later return matching values
3286     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3287     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3288     export DEVELOPER_DIR
3289     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3290     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3292     AC_MSG_CHECKING([whether Xcode is new enough])
3293     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3294     my_xcode_ver2=${my_xcode_ver1#Xcode }
3295     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3296     if test "$my_xcode_ver3" -ge 1103; then
3297         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3298     else
3299         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3300     fi
3302     case "$with_macosx_version_min_required" in
3303     10.10)
3304         MAC_OS_X_VERSION_MIN_REQUIRED="101000"
3305         ;;
3306     10.11)
3307         MAC_OS_X_VERSION_MIN_REQUIRED="101100"
3308         ;;
3309     10.12)
3310         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3311         ;;
3312     10.13)
3313         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3314         ;;
3315     10.14)
3316         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3317         ;;
3318     10.15)
3319         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3320         ;;
3321     10.16)
3322         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3323         ;;
3324     11.0)
3325         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3326         ;;
3327     11.1)
3328         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3329         ;;
3330     11.3)
3331         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3332         ;;
3333     *)
3334         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, supported values are 10.10--11.3])
3335         ;;
3336     esac
3338     LIBTOOL=/usr/bin/libtool
3339     INSTALL_NAME_TOOL=install_name_tool
3340     if test -z "$save_CC"; then
3341         stdlib=-stdlib=libc++
3343         AC_MSG_CHECKING([what C compiler to use])
3344         CC="`xcrun -find clang`"
3345         CC_BASE=`first_arg_basename "$CC"`
3346         if test "$host_cpu" = x86_64; then
3347             CC+=" -target x86_64-apple-macos"
3348         else
3349             CC+=" -target arm64-apple-macos"
3350         fi
3351         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3352         AC_MSG_RESULT([$CC])
3354         AC_MSG_CHECKING([what C++ compiler to use])
3355         CXX="`xcrun -find clang++`"
3356         CXX_BASE=`first_arg_basename "$CXX"`
3357         if test "$host_cpu" = x86_64; then
3358             CXX+=" -target x86_64-apple-macos"
3359         else
3360             CXX+=" -target arm64-apple-macos"
3361         fi
3362         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3363         AC_MSG_RESULT([$CXX])
3365         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3366         AR=`xcrun -find ar`
3367         NM=`xcrun -find nm`
3368         STRIP=`xcrun -find strip`
3369         LIBTOOL=`xcrun -find libtool`
3370         RANLIB=`xcrun -find ranlib`
3371     fi
3373     case "$with_macosx_version_max_allowed" in
3374     10.10)
3375         MAC_OS_X_VERSION_MAX_ALLOWED="101000"
3376         ;;
3377     10.11)
3378         MAC_OS_X_VERSION_MAX_ALLOWED="101100"
3379         ;;
3380     10.12)
3381         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3382         ;;
3383     10.13)
3384         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3385         ;;
3386     10.14)
3387         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3388         ;;
3389     10.15)
3390         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3391         ;;
3392     11.0)
3393         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3394         ;;
3395     11.1)
3396         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3397         ;;
3398     11.3)
3399         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3400         ;;
3401     *)
3402         AC_MSG_ERROR([with-macosx-version-max-allowed $with_macosx_version_max_allowed is not a supported value, supported values are 10.10--11.3])
3403         ;;
3404     esac
3406     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3407     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3408         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])
3409     else
3410         AC_MSG_RESULT([ok])
3411     fi
3413     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3414     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3415         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3416     else
3417         AC_MSG_RESULT([ok])
3418     fi
3419     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3420     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3422     AC_MSG_CHECKING([whether to do code signing])
3424     if test "$enable_macosx_code_signing" = yes; then
3425         # By default use the first suitable certificate (?).
3427         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3428         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3429         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3430         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3431         # "Developer ID Application" one.
3433         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3434         if test -n "$identity"; then
3435             MACOSX_CODESIGNING_IDENTITY=$identity
3436             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3437             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3438         else
3439             AC_MSG_ERROR([cannot determine identity to use])
3440         fi
3441     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3442         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3443         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3444         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3445     else
3446         AC_MSG_RESULT([no])
3447     fi
3449     AC_MSG_CHECKING([whether to create a Mac App Store package])
3451     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3452         AC_MSG_RESULT([no])
3453     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3454         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3455     elif test "$enable_macosx_package_signing" = yes; then
3456         # By default use the first suitable certificate.
3457         # It should be a "3rd Party Mac Developer Installer" one
3459         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3460         if test -n "$identity"; then
3461             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3462             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3463             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3464         else
3465             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3466         fi
3467     else
3468         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3469         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3470         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3471     fi
3473     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3474         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3475     fi
3477     AC_MSG_CHECKING([whether to sandbox the application])
3479     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3480         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3481     elif test "$enable_macosx_sandbox" = yes; then
3482         ENABLE_MACOSX_SANDBOX=TRUE
3483         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3484         AC_MSG_RESULT([yes])
3485     else
3486         AC_MSG_RESULT([no])
3487     fi
3489     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3490     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3491     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3493 AC_SUBST(MACOSX_SDK_PATH)
3494 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3495 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3496 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3497 AC_SUBST(INSTALL_NAME_TOOL)
3498 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3499 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3500 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3501 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3502 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3504 dnl ===================================================================
3505 dnl Check iOS SDK and compiler
3506 dnl ===================================================================
3508 if test $_os = iOS; then
3509     AC_MSG_CHECKING([what iOS SDK to use])
3510     current_sdk_ver=14.5
3511     older_sdk_vers="14.4 14.3 14.2 14.1 14.0 13.7"
3512     if test "$enable_ios_simulator" = "yes"; then
3513         platform=iPhoneSimulator
3514         versionmin=-mios-simulator-version-min=12.2
3515     else
3516         platform=iPhoneOS
3517         versionmin=-miphoneos-version-min=12.2
3518     fi
3519     xcode_developer=`xcode-select -print-path`
3521     for sdkver in $current_sdk_ver $older_sdk_vers; do
3522         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3523         if test -d $t; then
3524             sysroot=$t
3525             break
3526         fi
3527     done
3529     if test -z "$sysroot"; then
3530         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3531     fi
3533     AC_MSG_RESULT($sysroot)
3535     stdlib="-stdlib=libc++"
3537     AC_MSG_CHECKING([what C compiler to use])
3538     CC="`xcrun -find clang`"
3539     CC_BASE=`first_arg_basename "$CC"`
3540     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3541     AC_MSG_RESULT([$CC])
3543     AC_MSG_CHECKING([what C++ compiler to use])
3544     CXX="`xcrun -find clang++`"
3545     CXX_BASE=`first_arg_basename "$CXX"`
3546     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3547     AC_MSG_RESULT([$CXX])
3549     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3550     AR=`xcrun -find ar`
3551     NM=`xcrun -find nm`
3552     STRIP=`xcrun -find strip`
3553     LIBTOOL=`xcrun -find libtool`
3554     RANLIB=`xcrun -find ranlib`
3557 AC_MSG_CHECKING([whether to treat the installation as read-only])
3559 if test $_os = Darwin; then
3560     enable_readonly_installset=yes
3561 elif test "$enable_extensions" != yes; then
3562     enable_readonly_installset=yes
3564 if test "$enable_readonly_installset" = yes; then
3565     AC_MSG_RESULT([yes])
3566     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3567 else
3568     AC_MSG_RESULT([no])
3571 dnl ===================================================================
3572 dnl Structure of install set
3573 dnl ===================================================================
3575 if test $_os = Darwin; then
3576     LIBO_BIN_FOLDER=MacOS
3577     LIBO_ETC_FOLDER=Resources
3578     LIBO_LIBEXEC_FOLDER=MacOS
3579     LIBO_LIB_FOLDER=Frameworks
3580     LIBO_LIB_PYUNO_FOLDER=Resources
3581     LIBO_SHARE_FOLDER=Resources
3582     LIBO_SHARE_HELP_FOLDER=Resources/help
3583     LIBO_SHARE_JAVA_FOLDER=Resources/java
3584     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3585     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3586     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3587     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3588     LIBO_URE_BIN_FOLDER=MacOS
3589     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3590     LIBO_URE_LIB_FOLDER=Frameworks
3591     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3592     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3593 elif test $_os = WINNT; then
3594     LIBO_BIN_FOLDER=program
3595     LIBO_ETC_FOLDER=program
3596     LIBO_LIBEXEC_FOLDER=program
3597     LIBO_LIB_FOLDER=program
3598     LIBO_LIB_PYUNO_FOLDER=program
3599     LIBO_SHARE_FOLDER=share
3600     LIBO_SHARE_HELP_FOLDER=help
3601     LIBO_SHARE_JAVA_FOLDER=program/classes
3602     LIBO_SHARE_PRESETS_FOLDER=presets
3603     LIBO_SHARE_READMES_FOLDER=readmes
3604     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3605     LIBO_SHARE_SHELL_FOLDER=program/shell
3606     LIBO_URE_BIN_FOLDER=program
3607     LIBO_URE_ETC_FOLDER=program
3608     LIBO_URE_LIB_FOLDER=program
3609     LIBO_URE_MISC_FOLDER=program
3610     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3611 else
3612     LIBO_BIN_FOLDER=program
3613     LIBO_ETC_FOLDER=program
3614     LIBO_LIBEXEC_FOLDER=program
3615     LIBO_LIB_FOLDER=program
3616     LIBO_LIB_PYUNO_FOLDER=program
3617     LIBO_SHARE_FOLDER=share
3618     LIBO_SHARE_HELP_FOLDER=help
3619     LIBO_SHARE_JAVA_FOLDER=program/classes
3620     LIBO_SHARE_PRESETS_FOLDER=presets
3621     LIBO_SHARE_READMES_FOLDER=readmes
3622     if test "$enable_fuzzers" != yes; then
3623         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3624     else
3625         LIBO_SHARE_RESOURCE_FOLDER=resource
3626     fi
3627     LIBO_SHARE_SHELL_FOLDER=program/shell
3628     LIBO_URE_BIN_FOLDER=program
3629     LIBO_URE_ETC_FOLDER=program
3630     LIBO_URE_LIB_FOLDER=program
3631     LIBO_URE_MISC_FOLDER=program
3632     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3634 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3635 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3636 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3637 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3638 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3639 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3640 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3641 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3642 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3643 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3644 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3645 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3646 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3647 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3648 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3649 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3651 # Not all of them needed in config_host.mk, add more if need arises
3652 AC_SUBST(LIBO_BIN_FOLDER)
3653 AC_SUBST(LIBO_ETC_FOLDER)
3654 AC_SUBST(LIBO_LIB_FOLDER)
3655 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3656 AC_SUBST(LIBO_SHARE_FOLDER)
3657 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3658 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3659 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3660 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3661 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3662 AC_SUBST(LIBO_URE_BIN_FOLDER)
3663 AC_SUBST(LIBO_URE_ETC_FOLDER)
3664 AC_SUBST(LIBO_URE_LIB_FOLDER)
3665 AC_SUBST(LIBO_URE_MISC_FOLDER)
3666 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3668 dnl ===================================================================
3669 dnl Windows specific tests and stuff
3670 dnl ===================================================================
3672 reg_get_value()
3674     # Return value: $regvalue
3675     unset regvalue
3677     if test "$build_os" = "wsl"; then
3678         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3679         return
3680     fi
3682     local _regentry="/proc/registry${1}/${2}"
3683     if test -f "$_regentry"; then
3684         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3685         # Registry keys read via /proc/registry* are always \0 terminated!
3686         local _regvalue=$(tr -d '\0' < "$_regentry")
3687         if test $? -eq 0; then
3688             regvalue=$_regvalue
3689         fi
3690     fi
3693 # Get a value from the 32-bit side of the Registry
3694 reg_get_value_32()
3696     reg_get_value "32" "$1"
3699 # Get a value from the 64-bit side of the Registry
3700 reg_get_value_64()
3702     reg_get_value "64" "$1"
3705 case "$host_os" in
3706 cygwin*|wsl*)
3707     COM=MSC
3708     OS=WNT
3709     RTL_OS=Windows
3710     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3711         P_SEP=";"
3712     else
3713         P_SEP=:
3714     fi
3715     case "$host_cpu" in
3716     x86_64)
3717         CPUNAME=X86_64
3718         RTL_ARCH=X86_64
3719         PLATFORMID=windows_x86_64
3720         WINDOWS_X64=1
3721         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3722         WIN_HOST_ARCH="x64"
3723         WIN_MULTI_ARCH="x86"
3724         WIN_HOST_BITS=64
3725         ;;
3726     i*86)
3727         CPUNAME=INTEL
3728         RTL_ARCH=x86
3729         PLATFORMID=windows_x86
3730         WIN_HOST_ARCH="x86"
3731         WIN_HOST_BITS=32
3732         WIN_OTHER_ARCH="x64"
3733         ;;
3734     aarch64)
3735         CPUNAME=AARCH64
3736         RTL_ARCH=AARCH64
3737         PLATFORMID=windows_aarch64
3738         WINDOWS_X64=1
3739         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3740         WIN_HOST_ARCH="arm64"
3741         WIN_HOST_BITS=64
3742         with_ucrt_dir=no
3743         ;;
3744     *)
3745         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3746         ;;
3747     esac
3749     case "$build_cpu" in
3750     x86_64) WIN_BUILD_ARCH="x64" ;;
3751     i*86) WIN_BUILD_ARCH="x86" ;;
3752     aarch64) WIN_BUILD_ARCH="arm64" ;;
3753     *)
3754         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3755         ;;
3756     esac
3758     SCPDEFS="$SCPDEFS -D_MSC_VER"
3759     ;;
3760 esac
3762 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3763 # other-arch won't, but wouldn't break the build (x64 on x86).
3764 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3765     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3769 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3770     # To allow building Windows multi-arch releases without cross-tooling
3771     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3772         cross_compiling="yes"
3773     fi
3776 ENABLE_WASM_STRIP=''
3777 if test "$cross_compiling" = "yes"; then
3778     export CROSS_COMPILING=TRUE
3779     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3780         ENABLE_WASM_STRIP=TRUE
3781     fi
3782 else
3783     CROSS_COMPILING=
3784     BUILD_TYPE="$BUILD_TYPE NATIVE"
3786 AC_SUBST(CROSS_COMPILING)
3787 AC_SUBST(ENABLE_WASM_STRIP)
3789 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3790 # NOTE: must _not_ be used for bundled external libraries!
3791 ISYSTEM=
3792 if test "$GCC" = "yes"; then
3793     AC_MSG_CHECKING( for -isystem )
3794     save_CFLAGS=$CFLAGS
3795     CFLAGS="$CFLAGS -Werror"
3796     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3797     CFLAGS=$save_CFLAGS
3798     if test -n "$ISYSTEM"; then
3799         AC_MSG_RESULT(yes)
3800     else
3801         AC_MSG_RESULT(no)
3802     fi
3804 if test -z "$ISYSTEM"; then
3805     # fall back to using -I
3806     ISYSTEM=-I
3808 AC_SUBST(ISYSTEM)
3810 dnl ===================================================================
3811 dnl  Check which Visual Studio compiler is used
3812 dnl ===================================================================
3814 map_vs_year_to_version()
3816     # Return value: $vsversion
3818     unset vsversion
3820     case $1 in
3821     2019)
3822         vsversion=16;;
3823     *)
3824         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3825     esac
3828 vs_versions_to_check()
3830     # Args: $1 (optional) : versions to check, in the order of preference
3831     # Return value: $vsversions
3833     unset vsversions
3835     if test -n "$1"; then
3836         map_vs_year_to_version "$1"
3837         vsversions=$vsversion
3838     else
3839         # We accept only 2019
3840         vsversions="16"
3841     fi
3844 win_get_env_from_vsvars32bat()
3846     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3847     # Also seems to be located in another directory under the same name: vsvars32.bat
3848     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3849     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3850     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3851     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3852     local result
3853     if test "$build_os" = "wsl"; then
3854         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3855     else
3856         chmod +x $WRAPPERBATCHFILEPATH
3857         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3858     fi
3859     rm -f $WRAPPERBATCHFILEPATH
3860     printf '%s' "$result"
3863 find_ucrt()
3865     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3866     if test -n "$regvalue"; then
3867         PathFormat "$regvalue"
3868         UCRTSDKDIR=$formatted_path_unix
3869         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3870         UCRTVERSION=$regvalue
3871         # Rest if not exist
3872         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3873           UCRTSDKDIR=
3874         fi
3875     fi
3876     if test -z "$UCRTSDKDIR"; then
3877         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3878         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3879         if test -f "$ide_env_file"; then
3880             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3881             UCRTSDKDIR=$formatted_path
3882             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3883             dnl Hack needed at least by tml:
3884             if test "$UCRTVERSION" = 10.0.15063.0 \
3885                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3886                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3887             then
3888                 UCRTVERSION=10.0.14393.0
3889             fi
3890         else
3891           AC_MSG_ERROR([No UCRT found])
3892         fi
3893     fi
3896 find_msvc()
3898     # Find Visual C++ 2019
3899     # Args: $1 (optional) : The VS version year
3900     # Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot, $vcbuildnumber
3902     unset vctest vcnum vcnumwithdot vcbuildnumber
3904     vs_versions_to_check "$1"
3905     if test "$build_os" = wsl; then
3906         vswhere="$PROGRAMFILESX86"
3907     else
3908         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3909     fi
3910     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3911     PathFormat "$vswhere"
3912     vswhere=$formatted_path_unix
3913     for ver in $vsversions; do
3914         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3915         # Fall back to all MS products (this includes VC++ Build Tools)
3916         if ! test -n "$vswhereoutput"; then
3917             AC_MSG_CHECKING([VC++ Build Tools and similar])
3918             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3919         fi
3920         if test -n "$vswhereoutput"; then
3921             PathFormat "$vswhereoutput"
3922             vctest=$formatted_path_unix
3923             break
3924         fi
3925     done
3927     if test -n "$vctest"; then
3928         vcnumwithdot="$ver.0"
3929         case "$vcnumwithdot" in
3930         16.0)
3931             vcyear=2019
3932             vcnum=160
3933             ;;
3934         esac
3935         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3937     fi
3940 test_cl_exe()
3942     AC_MSG_CHECKING([$1 compiler])
3944     CL_EXE_PATH="$2/cl.exe"
3946     if test ! -f "$CL_EXE_PATH"; then
3947         if test "$1" = "multi-arch"; then
3948             AC_MSG_WARN([no compiler (cl.exe) in $2])
3949             return 1
3950         else
3951             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3952         fi
3953     fi
3955     dnl ===========================================================
3956     dnl  Check for the corresponding mspdb*.dll
3957     dnl ===========================================================
3959     # MSVC 15.0 has libraries from 14.0?
3960     mspdbnum="140"
3962     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
3963         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
3964     fi
3966     # The compiles has to find its shared libraries
3967     OLD_PATH="$PATH"
3968     TEMP_PATH=`cygpath -d "$2"`
3969     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
3971     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
3972         AC_MSG_ERROR([no compiler (cl.exe) in $2])
3973     fi
3975     PATH="$OLD_PATH"
3977     AC_MSG_RESULT([$CL_EXE_PATH])
3980 SOLARINC=
3981 MSBUILD_PATH=
3982 DEVENV=
3983 if test "$_os" = "WINNT"; then
3984     AC_MSG_CHECKING([Visual C++])
3985     find_msvc "$with_visual_studio"
3986     if test -z "$vctest"; then
3987         if test -n "$with_visual_studio"; then
3988             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
3989         else
3990             AC_MSG_ERROR([no Visual Studio 2019 installation found])
3991         fi
3992     fi
3993     AC_MSG_RESULT([])
3995     VC_PRODUCT_DIR="$vctest/VC"
3996     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
3998     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
3999     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4000         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4001         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4002         if test $? -ne 0; then
4003             WIN_MULTI_ARCH=""
4004             WIN_OTHER_ARCH=""
4005         fi
4006     fi
4008     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4009         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4010         test_cl_exe "build" "$MSVC_BUILD_PATH"
4011     fi
4013     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4014         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4015         test_cl_exe "host" "$MSVC_HOST_PATH"
4016     else
4017         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4018     fi
4020     AC_MSG_CHECKING([for short pathname of VC product directory])
4021     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4022     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4024     UCRTSDKDIR=
4025     UCRTVERSION=
4027     AC_MSG_CHECKING([for UCRT location])
4028     find_ucrt
4029     # find_ucrt errors out if it doesn't find it
4030     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4031     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4032     ucrtincpath_formatted=$formatted_path
4033     # SOLARINC is used for external modules and must be set too.
4034     # And no, it's not sufficient to set SOLARINC only, as configure
4035     # itself doesn't honour it.
4036     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4037     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4038     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4039     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4041     AC_SUBST(UCRTSDKDIR)
4042     AC_SUBST(UCRTVERSION)
4044     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4045     # Find the proper version of MSBuild.exe to use based on the VS version
4046     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4047     if test -n "$regvalue" ; then
4048         AC_MSG_RESULT([found: $regvalue])
4049         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4050     else
4051         if test "$vcnumwithdot" = "16.0"; then
4052             if test "$WIN_BUILD_ARCH" != "x64"; then
4053                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4054             else
4055                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4056             fi
4057         else
4058             if test "$WIN_BUILD_ARCH" != "x64"; then
4059                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin"
4060             else
4061                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin/amd64"
4062             fi
4063         fi
4064         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4065         AC_MSG_RESULT([$regvalue])
4066     fi
4068     # Find the version of devenv.exe
4069     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4070     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4071     DEVENV_unix=$(cygpath -u "$DEVENV")
4072     if test ! -e "$DEVENV_unix"; then
4073         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4074     fi
4076     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4077     dnl needed when building CLR code:
4078     if test -z "$MSVC_CXX"; then
4079         # This gives us a posix path with 8.3 filename restrictions
4080         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4081     fi
4083     if test -z "$CC"; then
4084         CC=$MSVC_CXX
4085         CC_BASE=`first_arg_basename "$CC"`
4086     fi
4087     if test -z "$CXX"; then
4088         CXX=$MSVC_CXX
4089         CXX_BASE=`first_arg_basename "$CXX"`
4090     fi
4092     if test -n "$CC"; then
4093         # Remove /cl.exe from CC case insensitive
4094         AC_MSG_NOTICE([found Visual C++ $vcyear])
4096         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4097         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4099         PathFormat "$COMPATH"
4100         COMPATH=`win_short_path_for_make "$formatted_path"`
4102         VCVER=$vcnum
4104         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4105         # are always "better", we list them in reverse chronological order.
4107         case "$vcnum" in
4108         160)
4109             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4110             ;;
4111         esac
4113         # The expectation is that --with-windows-sdk should not need to be used
4114         if test -n "$with_windows_sdk"; then
4115             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4116             *" "$with_windows_sdk" "*)
4117                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4118                 ;;
4119             *)
4120                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4121                 ;;
4122             esac
4123         fi
4125         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4126         ac_objext=obj
4127         ac_exeext=exe
4129     else
4130         AC_MSG_ERROR([Visual C++ not found after all, huh])
4131     fi
4133     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4134     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4135         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4136         // between Visual Studio versions and _MSC_VER:
4137         #if _MSC_VER < 1925
4138         #error
4139         #endif
4140     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4142     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4143     # version of the Explorer extension (and maybe other small
4144     # bits, too) needed when installing a 32-bit LibreOffice on a
4145     # 64-bit OS. The 64-bit Explorer extension is a feature that
4146     # has been present since long in OOo. Don't confuse it with
4147     # building LibreOffice itself as 64-bit code.
4149     BUILD_X64=
4150     CXX_X64_BINARY=
4152     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4153         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4154         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4155              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4156         then
4157             BUILD_X64=TRUE
4158             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4159             AC_MSG_RESULT([found])
4160         else
4161             AC_MSG_RESULT([not found])
4162             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4163         fi
4164     elif test "$WIN_HOST_ARCH" = "x64"; then
4165         CXX_X64_BINARY=$CXX
4166     fi
4167     AC_SUBST(BUILD_X64)
4169     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4170     AC_SUBST(CXX_X64_BINARY)
4172     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4173     # needed to support TWAIN scan on both 32- and 64-bit systems
4175     case "$WIN_HOST_ARCH" in
4176     x64)
4177         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4178         if test -n "$CXX_X86_BINARY"; then
4179             BUILD_X86=TRUE
4180             AC_MSG_RESULT([preset])
4181         elif test -n "$WIN_MULTI_ARCH"; then
4182             BUILD_X86=TRUE
4183             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4184             CXX_X86_BINARY+=" /arch:SSE"
4185             AC_MSG_RESULT([found])
4186         else
4187             AC_MSG_RESULT([not found])
4188             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4189         fi
4190         ;;
4191     x86)
4192         BUILD_X86=TRUE
4193         CXX_X86_BINARY=$MSVC_CXX
4194         ;;
4195     esac
4196     AC_SUBST(BUILD_X86)
4197     AC_SUBST(CXX_X86_BINARY)
4199 AC_SUBST(VCVER)
4200 AC_SUBST(DEVENV)
4201 AC_SUBST(MSVC_CXX)
4203 COM_IS_CLANG=
4204 AC_MSG_CHECKING([whether the compiler is actually Clang])
4205 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4206     #ifndef __clang__
4207     you lose
4208     #endif
4209     int foo=42;
4210     ]])],
4211     [AC_MSG_RESULT([yes])
4212      COM_IS_CLANG=TRUE],
4213     [AC_MSG_RESULT([no])])
4214 AC_SUBST(COM_IS_CLANG)
4216 CC_PLAIN=$CC
4217 CLANGVER=
4218 if test "$COM_IS_CLANG" = TRUE; then
4219     AC_MSG_CHECKING([whether Clang is new enough])
4220     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4221         #if !defined __apple_build_version__
4222         #error
4223         #endif
4224         ]])],
4225         [my_apple_clang=yes],[my_apple_clang=])
4226     if test "$my_apple_clang" = yes; then
4227         AC_MSG_RESULT([assumed yes (Apple Clang)])
4228     elif test "$_os" = Emscripten; then
4229         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4230     else
4231         if test "$_os" = WINNT; then
4232             dnl In which case, assume clang-cl:
4233             my_args="/EP /TC"
4234             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4235             dnl clang-cl:
4236             CC_PLAIN=
4237             for i in $CC; do
4238                 case $i in
4239                 -FIIntrin.h)
4240                     ;;
4241                 *)
4242                     CC_PLAIN="$CC_PLAIN $i"
4243                     ;;
4244                 esac
4245             done
4246         else
4247             my_args="-E -P"
4248         fi
4249         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4250         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4251         CLANGVER=`echo $clang_version \
4252             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4253         if test "$CLANGVER" -ge 50002; then
4254             AC_MSG_RESULT([yes ($clang_version)])
4255         else
4256             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4257         fi
4258         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4259         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4260     fi
4263 SHOWINCLUDES_PREFIX=
4264 if test "$_os" = WINNT; then
4265     dnl We need to guess the prefix of the -showIncludes output, it can be
4266     dnl localized
4267     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4268     echo "#include <stdlib.h>" > conftest.c
4269     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4270         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4271     rm -f conftest.c conftest.obj
4272     if test -z "$SHOWINCLUDES_PREFIX"; then
4273         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4274     else
4275         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4276     fi
4278 AC_SUBST(SHOWINCLUDES_PREFIX)
4281 # prefix C with ccache if needed
4283 UNCACHED_CC="$CC"
4284 if test "$CCACHE" != ""; then
4285     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4287     AC_LANG_PUSH([C])
4288     save_CFLAGS=$CFLAGS
4289     CFLAGS="$CFLAGS --ccache-skip -O2"
4290     dnl an empty program will do, we're checking the compiler flags
4291     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4292                       [use_ccache=yes], [use_ccache=no])
4293     CFLAGS=$save_CFLAGS
4294     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4295         AC_MSG_RESULT([yes])
4296     else
4297         CC="$CCACHE $CC"
4298         CC_BASE="ccache $CC_BASE"
4299         AC_MSG_RESULT([no])
4300     fi
4301     AC_LANG_POP([C])
4304 # ===================================================================
4305 # check various GCC options that Clang does not support now but maybe
4306 # will somewhen in the future, check them even for GCC, so that the
4307 # flags are set
4308 # ===================================================================
4310 HAVE_GCC_GGDB2=
4311 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4312     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4313     save_CFLAGS=$CFLAGS
4314     CFLAGS="$CFLAGS -Werror -ggdb2"
4315     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4316     CFLAGS=$save_CFLAGS
4317     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4318         AC_MSG_RESULT([yes])
4319     else
4320         AC_MSG_RESULT([no])
4321     fi
4323     if test "$host_cpu" = "m68k"; then
4324         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4325         save_CFLAGS=$CFLAGS
4326         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4327         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4328         CFLAGS=$save_CFLAGS
4329         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4330             AC_MSG_RESULT([yes])
4331         else
4332             AC_MSG_ERROR([no])
4333         fi
4334     fi
4336 AC_SUBST(HAVE_GCC_GGDB2)
4338 dnl ===================================================================
4339 dnl  Test the gcc version
4340 dnl ===================================================================
4341 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4342     AC_MSG_CHECKING([the GCC version])
4343     _gcc_version=`$CC -dumpversion`
4344     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4345         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4346     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4348     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4350     if test "$gcc_full_version" -lt 70000; then
4351         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4352     fi
4353 else
4354     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4355     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4356     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4357     # (which reports itself as GCC 4.2.1).
4358     GCC_VERSION=
4360 AC_SUBST(GCC_VERSION)
4362 dnl Set the ENABLE_DBGUTIL variable
4363 dnl ===================================================================
4364 AC_MSG_CHECKING([whether to build with additional debug utilities])
4365 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4366     ENABLE_DBGUTIL="TRUE"
4367     # this is an extra var so it can have different default on different MSVC
4368     # versions (in case there are version specific problems with it)
4369     MSVC_USE_DEBUG_RUNTIME="TRUE"
4371     AC_MSG_RESULT([yes])
4372     # cppunit and graphite expose STL in public headers
4373     if test "$with_system_cppunit" = "yes"; then
4374         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4375     else
4376         with_system_cppunit=no
4377     fi
4378     if test "$with_system_graphite" = "yes"; then
4379         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4380     else
4381         with_system_graphite=no
4382     fi
4383     if test "$with_system_orcus" = "yes"; then
4384         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4385     else
4386         with_system_orcus=no
4387     fi
4388     if test "$with_system_libcmis" = "yes"; then
4389         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4390     else
4391         with_system_libcmis=no
4392     fi
4393     if test "$with_system_hunspell" = "yes"; then
4394         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4395     else
4396         with_system_hunspell=no
4397     fi
4398     if test "$with_system_gpgmepp" = "yes"; then
4399         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4400     else
4401         with_system_gpgmepp=no
4402     fi
4403     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4404     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4405     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4406     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4407     # of those two is using the system variant:
4408     if test "$with_system_libnumbertext" = "yes"; then
4409         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4410     else
4411         with_system_libnumbertext=no
4412     fi
4413     if test "$with_system_libwps" = "yes"; then
4414         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4415     else
4416         with_system_libwps=no
4417     fi
4418 else
4419     ENABLE_DBGUTIL=""
4420     MSVC_USE_DEBUG_RUNTIME=""
4421     AC_MSG_RESULT([no])
4423 AC_SUBST(ENABLE_DBGUTIL)
4424 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4426 dnl Set the ENABLE_DEBUG variable.
4427 dnl ===================================================================
4428 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4429     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4431 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4432     if test -z "$libo_fuzzed_enable_debug"; then
4433         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4434     else
4435         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4436         enable_debug=yes
4437     fi
4440 AC_MSG_CHECKING([whether to do a debug build])
4441 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4442     ENABLE_DEBUG="TRUE"
4443     if test -n "$ENABLE_DBGUTIL" ; then
4444         AC_MSG_RESULT([yes (dbgutil)])
4445     else
4446         AC_MSG_RESULT([yes])
4447     fi
4448 else
4449     ENABLE_DEBUG=""
4450     AC_MSG_RESULT([no])
4452 AC_SUBST(ENABLE_DEBUG)
4454 dnl ===================================================================
4455 dnl Select the linker to use (gold/lld/ld.bfd).
4456 dnl This is done only after compiler checks (need to know if Clang is
4457 dnl used, for different defaults) and after checking if a debug build
4458 dnl is wanted (non-debug builds get the default linker if not explicitly
4459 dnl specified otherwise).
4460 dnl All checks for linker features/options should come after this.
4461 dnl ===================================================================
4462 check_use_ld()
4464     use_ld=-fuse-ld=${1%%:*}
4465     use_ld_path=${1#*:}
4466     if test "$use_ld_path" != "$1"; then
4467         use_ld="$use_ld --ld-path=$use_ld_path"
4468     fi
4469     use_ld_fail_if_error=$2
4470     use_ld_ok=
4471     AC_MSG_CHECKING([for $use_ld linker support])
4472     use_ld_ldflags_save="$LDFLAGS"
4473     LDFLAGS="$LDFLAGS $use_ld"
4474     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4475 #include <stdio.h>
4476         ],[
4477 printf ("hello world\n");
4478         ])], USE_LD=$use_ld, [])
4479     if test -n "$USE_LD"; then
4480         AC_MSG_RESULT( yes )
4481         use_ld_ok=yes
4482     else
4483         if test -n "$use_ld_fail_if_error"; then
4484             AC_MSG_ERROR( no )
4485         else
4486             AC_MSG_RESULT( no )
4487         fi
4488     fi
4489     if test -n "$use_ld_ok"; then
4490         dnl keep the value of LDFLAGS
4491         return 0
4492     fi
4493     LDFLAGS="$use_ld_ldflags_save"
4494     return 1
4496 USE_LD=
4497 if test "$enable_ld" != "no"; then
4498     if test "$GCC" = "yes"; then
4499         if test -n "$enable_ld"; then
4500             check_use_ld "$enable_ld" fail_if_error
4501         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4502             dnl non-debug builds default to the default linker
4503             true
4504         elif test -n "$COM_IS_CLANG"; then
4505             check_use_ld lld
4506             if test $? -ne 0; then
4507                 check_use_ld gold
4508             fi
4509         else
4510             # For gcc first try gold, new versions also support lld.
4511             check_use_ld gold
4512             if test $? -ne 0; then
4513                 check_use_ld lld
4514             fi
4515         fi
4516         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4517         rm conftest.out
4518         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4519         if test -z "$ld_used"; then
4520             ld_used="unknown"
4521         fi
4522         AC_MSG_CHECKING([for linker that is used])
4523         AC_MSG_RESULT([$ld_used])
4524         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4525             if echo "$ld_used" | grep -q "^GNU ld"; then
4526                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4527                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4528             fi
4529         fi
4530     else
4531         if test "$enable_ld" = "yes"; then
4532             AC_MSG_ERROR([--enable-ld not supported])
4533         fi
4534     fi
4536 AC_SUBST(USE_LD)
4538 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4539 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4540     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4541     bsymbolic_functions_ldflags_save=$LDFLAGS
4542     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4543     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4544 #include <stdio.h>
4545         ],[
4546 printf ("hello world\n");
4547         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4548     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4549         AC_MSG_RESULT( found )
4550     else
4551         AC_MSG_RESULT( not found )
4552     fi
4553     LDFLAGS=$bsymbolic_functions_ldflags_save
4555 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4557 LD_GC_SECTIONS=
4558 if test "$GCC" = "yes"; then
4559     for flag in "--gc-sections" "-dead_strip"; do
4560         AC_MSG_CHECKING([for $flag linker support])
4561         ldflags_save=$LDFLAGS
4562         LDFLAGS="$LDFLAGS -Wl,$flag"
4563         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4564 #include <stdio.h>
4565             ],[
4566 printf ("hello world\n");
4567             ])],[
4568             LD_GC_SECTIONS="-Wl,$flag"
4569             AC_MSG_RESULT( found )
4570             ], [
4571             AC_MSG_RESULT( not found )
4572             ])
4573         LDFLAGS=$ldflags_save
4574         if test -n "$LD_GC_SECTIONS"; then
4575             break
4576         fi
4577     done
4579 AC_SUBST(LD_GC_SECTIONS)
4581 HAVE_GSPLIT_DWARF=
4582 if test "$enable_split_debug" != no; then
4583     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4584     if test "$enable_split_debug" = yes -o \( "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4585         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4586         save_CFLAGS=$CFLAGS
4587         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4588         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4589         CFLAGS=$save_CFLAGS
4590         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4591             AC_MSG_RESULT([yes])
4592         else
4593             if test "$enable_split_debug" = yes; then
4594                 AC_MSG_ERROR([no])
4595             else
4596                 AC_MSG_RESULT([no])
4597             fi
4598         fi
4599     fi
4600     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4601         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4602         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4603     fi
4605 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4607 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4608 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4609 save_CFLAGS=$CFLAGS
4610 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4611 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4612 CFLAGS=$save_CFLAGS
4613 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4614     AC_MSG_RESULT([yes])
4615 else
4616     AC_MSG_RESULT([no])
4618 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4620 ENABLE_GDB_INDEX=
4621 if test "$enable_gdb_index" != "no"; then
4622     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4623     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -o -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4624         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4625         save_CFLAGS=$CFLAGS
4626         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4627         have_ggnu_pubnames=
4628         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4629         if test "$have_ggnu_pubnames" != "TRUE"; then
4630             if test "$enable_gdb_index" = "yes"; then
4631                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4632             else
4633                 AC_MSG_RESULT( no )
4634             fi
4635         else
4636             AC_MSG_RESULT( yes )
4637             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4638             ldflags_save=$LDFLAGS
4639             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4640             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4641 #include <stdio.h>
4642                 ],[
4643 printf ("hello world\n");
4644                 ])], ENABLE_GDB_INDEX=TRUE, [])
4645             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4646                 AC_MSG_RESULT( yes )
4647             else
4648                 if test "$enable_gdb_index" = "yes"; then
4649                     AC_MSG_ERROR( no )
4650                 else
4651                     AC_MSG_RESULT( no )
4652                 fi
4653             fi
4654             LDFLAGS=$ldflags_save
4655         fi
4656         CFLAGS=$save_CFLAGS
4657         fi
4658     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4659         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4660         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4661     fi
4663 AC_SUBST(ENABLE_GDB_INDEX)
4665 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4666     enable_sal_log=yes
4668 if test "$enable_sal_log" = yes; then
4669     ENABLE_SAL_LOG=TRUE
4671 AC_SUBST(ENABLE_SAL_LOG)
4673 dnl Check for enable symbols option
4674 dnl ===================================================================
4675 AC_MSG_CHECKING([whether to generate debug information])
4676 if test -z "$enable_symbols"; then
4677     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4678         enable_symbols=yes
4679     else
4680         enable_symbols=no
4681     fi
4683 if test "$enable_symbols" = yes; then
4684     ENABLE_SYMBOLS_FOR=all
4685     AC_MSG_RESULT([yes])
4686 elif test "$enable_symbols" = no; then
4687     ENABLE_SYMBOLS_FOR=
4688     AC_MSG_RESULT([no])
4689 else
4690     # Selective debuginfo.
4691     ENABLE_SYMBOLS_FOR="$enable_symbols"
4692     AC_MSG_RESULT([for "$enable_symbols"])
4694 AC_SUBST(ENABLE_SYMBOLS_FOR)
4696 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4697     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4698     AC_MSG_CHECKING([whether enough memory is available for linking])
4699     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4700     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4701     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4702         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4703     else
4704         AC_MSG_RESULT([yes])
4705     fi
4708 ENABLE_OPTIMIZED=
4709 ENABLE_OPTIMIZED_DEBUG=
4710 AC_MSG_CHECKING([whether to compile with optimization flags])
4711 if test -z "$enable_optimized"; then
4712     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4713         enable_optimized=no
4714     else
4715         enable_optimized=yes
4716     fi
4718 if test "$enable_optimized" = yes; then
4719     ENABLE_OPTIMIZED=TRUE
4720     AC_MSG_RESULT([yes])
4721 elif test "$enable_optimized" = debug; then
4722     ENABLE_OPTIMIZED_DEBUG=TRUE
4723     AC_MSG_RESULT([yes (debug)])
4724     HAVE_GCC_OG=
4725     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4726         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4727         save_CFLAGS=$CFLAGS
4728         CFLAGS="$CFLAGS -Werror -Og"
4729         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4730         CFLAGS=$save_CFLAGS
4731         if test "$HAVE_GCC_OG" = "TRUE"; then
4732             AC_MSG_RESULT([yes])
4733         else
4734             AC_MSG_RESULT([no])
4735         fi
4736     fi
4737     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4738         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4739     fi
4740 else
4741     AC_MSG_RESULT([no])
4743 AC_SUBST(ENABLE_OPTIMIZED)
4744 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4747 # determine CPUNAME, OS, ...
4749 case "$host_os" in
4751 aix*)
4752     COM=GCC
4753     CPUNAME=POWERPC
4754     OS=AIX
4755     RTL_OS=AIX
4756     RTL_ARCH=PowerPC
4757     PLATFORMID=aix_powerpc
4758     P_SEP=:
4759     ;;
4761 cygwin*|wsl*)
4762     # Already handled
4763     ;;
4765 darwin*|macos*)
4766     COM=GCC
4767     OS=MACOSX
4768     RTL_OS=MacOSX
4769     P_SEP=:
4771     case "$host_cpu" in
4772     aarch64|arm64)
4773         if test "$enable_ios_simulator" = "yes"; then
4774             OS=iOS
4775         else
4776             CPUNAME=AARCH64
4777             RTL_ARCH=AARCH64
4778             PLATFORMID=macosx_aarch64
4779         fi
4780         ;;
4781     x86_64)
4782         if test "$enable_ios_simulator" = "yes"; then
4783             OS=iOS
4784         fi
4785         CPUNAME=X86_64
4786         RTL_ARCH=X86_64
4787         PLATFORMID=macosx_x86_64
4788         ;;
4789     *)
4790         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4791         ;;
4792     esac
4793     ;;
4795 ios*)
4796     COM=GCC
4797     OS=iOS
4798     RTL_OS=iOS
4799     P_SEP=:
4801     case "$host_cpu" in
4802     aarch64|arm64)
4803         if test "$enable_ios_simulator" = "yes"; then
4804             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4805         fi
4806         ;;
4807     *)
4808         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4809         ;;
4810     esac
4811     CPUNAME=AARCH64
4812     RTL_ARCH=AARCH64
4813     PLATFORMID=ios_arm64
4814     ;;
4816 dragonfly*)
4817     COM=GCC
4818     OS=DRAGONFLY
4819     RTL_OS=DragonFly
4820     P_SEP=:
4822     case "$host_cpu" in
4823     i*86)
4824         CPUNAME=INTEL
4825         RTL_ARCH=x86
4826         PLATFORMID=dragonfly_x86
4827         ;;
4828     x86_64)
4829         CPUNAME=X86_64
4830         RTL_ARCH=X86_64
4831         PLATFORMID=dragonfly_x86_64
4832         ;;
4833     *)
4834         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4835         ;;
4836     esac
4837     ;;
4839 freebsd*)
4840     COM=GCC
4841     RTL_OS=FreeBSD
4842     OS=FREEBSD
4843     P_SEP=:
4845     case "$host_cpu" in
4846     aarch64)
4847         CPUNAME=AARCH64
4848         PLATFORMID=freebsd_aarch64
4849         RTL_ARCH=AARCH64
4850         ;;
4851     i*86)
4852         CPUNAME=INTEL
4853         RTL_ARCH=x86
4854         PLATFORMID=freebsd_x86
4855         ;;
4856     x86_64|amd64)
4857         CPUNAME=X86_64
4858         RTL_ARCH=X86_64
4859         PLATFORMID=freebsd_x86_64
4860         ;;
4861     powerpc64)
4862         CPUNAME=POWERPC64
4863         RTL_ARCH=PowerPC_64
4864         PLATFORMID=freebsd_powerpc64
4865         ;;
4866     powerpc|powerpcspe)
4867         CPUNAME=POWERPC
4868         RTL_ARCH=PowerPC
4869         PLATFORMID=freebsd_powerpc
4870         ;;
4871     *)
4872         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4873         ;;
4874     esac
4875     ;;
4877 haiku*)
4878     COM=GCC
4879     GUIBASE=haiku
4880     RTL_OS=Haiku
4881     OS=HAIKU
4882     P_SEP=:
4884     case "$host_cpu" in
4885     i*86)
4886         CPUNAME=INTEL
4887         RTL_ARCH=x86
4888         PLATFORMID=haiku_x86
4889         ;;
4890     x86_64|amd64)
4891         CPUNAME=X86_64
4892         RTL_ARCH=X86_64
4893         PLATFORMID=haiku_x86_64
4894         ;;
4895     *)
4896         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4897         ;;
4898     esac
4899     ;;
4901 kfreebsd*)
4902     COM=GCC
4903     OS=LINUX
4904     RTL_OS=kFreeBSD
4905     P_SEP=:
4907     case "$host_cpu" in
4909     i*86)
4910         CPUNAME=INTEL
4911         RTL_ARCH=x86
4912         PLATFORMID=kfreebsd_x86
4913         ;;
4914     x86_64)
4915         CPUNAME=X86_64
4916         RTL_ARCH=X86_64
4917         PLATFORMID=kfreebsd_x86_64
4918         ;;
4919     *)
4920         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4921         ;;
4922     esac
4923     ;;
4925 linux-gnu*)
4926     COM=GCC
4927     OS=LINUX
4928     RTL_OS=Linux
4929     P_SEP=:
4931     case "$host_cpu" in
4933     aarch64)
4934         CPUNAME=AARCH64
4935         PLATFORMID=linux_aarch64
4936         RTL_ARCH=AARCH64
4937         EPM_FLAGS="-a arm64"
4938         ;;
4939     alpha)
4940         CPUNAME=AXP
4941         RTL_ARCH=ALPHA
4942         PLATFORMID=linux_alpha
4943         ;;
4944     arm*)
4945         CPUNAME=ARM
4946         EPM_FLAGS="-a arm"
4947         RTL_ARCH=ARM_EABI
4948         PLATFORMID=linux_arm_eabi
4949         case "$host_cpu" in
4950         arm*-linux)
4951             RTL_ARCH=ARM_OABI
4952             PLATFORMID=linux_arm_oabi
4953             ;;
4954         esac
4955         ;;
4956     hppa)
4957         CPUNAME=HPPA
4958         RTL_ARCH=HPPA
4959         EPM_FLAGS="-a hppa"
4960         PLATFORMID=linux_hppa
4961         ;;
4962     i*86)
4963         CPUNAME=INTEL
4964         RTL_ARCH=x86
4965         PLATFORMID=linux_x86
4966         ;;
4967     ia64)
4968         CPUNAME=IA64
4969         RTL_ARCH=IA64
4970         PLATFORMID=linux_ia64
4971         ;;
4972     mips)
4973         CPUNAME=GODSON
4974         RTL_ARCH=MIPS_EB
4975         EPM_FLAGS="-a mips"
4976         PLATFORMID=linux_mips_eb
4977         ;;
4978     mips64)
4979         CPUNAME=GODSON64
4980         RTL_ARCH=MIPS64_EB
4981         EPM_FLAGS="-a mips64"
4982         PLATFORMID=linux_mips64_eb
4983         ;;
4984     mips64el)
4985         CPUNAME=GODSON64
4986         RTL_ARCH=MIPS64_EL
4987         EPM_FLAGS="-a mips64el"
4988         PLATFORMID=linux_mips64_el
4989         ;;
4990     mipsel)
4991         CPUNAME=GODSON
4992         RTL_ARCH=MIPS_EL
4993         EPM_FLAGS="-a mipsel"
4994         PLATFORMID=linux_mips_el
4995         ;;
4996     m68k)
4997         CPUNAME=M68K
4998         RTL_ARCH=M68K
4999         PLATFORMID=linux_m68k
5000         ;;
5001     powerpc)
5002         CPUNAME=POWERPC
5003         RTL_ARCH=PowerPC
5004         PLATFORMID=linux_powerpc
5005         ;;
5006     powerpc64)
5007         CPUNAME=POWERPC64
5008         RTL_ARCH=PowerPC_64
5009         PLATFORMID=linux_powerpc64
5010         ;;
5011     powerpc64le)
5012         CPUNAME=POWERPC64
5013         RTL_ARCH=PowerPC_64_LE
5014         PLATFORMID=linux_powerpc64_le
5015         ;;
5016     sparc)
5017         CPUNAME=SPARC
5018         RTL_ARCH=SPARC
5019         PLATFORMID=linux_sparc
5020         ;;
5021     sparc64)
5022         CPUNAME=SPARC64
5023         RTL_ARCH=SPARC64
5024         PLATFORMID=linux_sparc64
5025         ;;
5026     s390)
5027         CPUNAME=S390
5028         RTL_ARCH=S390
5029         PLATFORMID=linux_s390
5030         ;;
5031     s390x)
5032         CPUNAME=S390X
5033         RTL_ARCH=S390x
5034         PLATFORMID=linux_s390x
5035         ;;
5036     x86_64)
5037         CPUNAME=X86_64
5038         RTL_ARCH=X86_64
5039         PLATFORMID=linux_x86_64
5040         ;;
5041     *)
5042         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5043         ;;
5044     esac
5045     ;;
5047 linux-android*)
5048     COM=GCC
5049     OS=ANDROID
5050     RTL_OS=Android
5051     P_SEP=:
5053     case "$host_cpu" in
5055     arm|armel)
5056         CPUNAME=ARM
5057         RTL_ARCH=ARM_EABI
5058         PLATFORMID=android_arm_eabi
5059         ;;
5060     aarch64)
5061         CPUNAME=AARCH64
5062         RTL_ARCH=AARCH64
5063         PLATFORMID=android_aarch64
5064         ;;
5065     i*86)
5066         CPUNAME=INTEL
5067         RTL_ARCH=x86
5068         PLATFORMID=android_x86
5069         ;;
5070     x86_64)
5071         CPUNAME=X86_64
5072         RTL_ARCH=X86_64
5073         PLATFORMID=android_x86_64
5074         ;;
5075     *)
5076         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5077         ;;
5078     esac
5079     ;;
5081 *netbsd*)
5082     COM=GCC
5083     OS=NETBSD
5084     RTL_OS=NetBSD
5085     P_SEP=:
5087     case "$host_cpu" in
5088     i*86)
5089         CPUNAME=INTEL
5090         RTL_ARCH=x86
5091         PLATFORMID=netbsd_x86
5092         ;;
5093     powerpc)
5094         CPUNAME=POWERPC
5095         RTL_ARCH=PowerPC
5096         PLATFORMID=netbsd_powerpc
5097         ;;
5098     sparc)
5099         CPUNAME=SPARC
5100         RTL_ARCH=SPARC
5101         PLATFORMID=netbsd_sparc
5102         ;;
5103     x86_64)
5104         CPUNAME=X86_64
5105         RTL_ARCH=X86_64
5106         PLATFORMID=netbsd_x86_64
5107         ;;
5108     *)
5109         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5110         ;;
5111     esac
5112     ;;
5114 openbsd*)
5115     COM=GCC
5116     OS=OPENBSD
5117     RTL_OS=OpenBSD
5118     P_SEP=:
5120     case "$host_cpu" in
5121     i*86)
5122         CPUNAME=INTEL
5123         RTL_ARCH=x86
5124         PLATFORMID=openbsd_x86
5125         ;;
5126     x86_64)
5127         CPUNAME=X86_64
5128         RTL_ARCH=X86_64
5129         PLATFORMID=openbsd_x86_64
5130         ;;
5131     *)
5132         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5133         ;;
5134     esac
5135     SOLARINC="$SOLARINC -I/usr/local/include"
5136     ;;
5138 solaris*)
5139     COM=GCC
5140     OS=SOLARIS
5141     RTL_OS=Solaris
5142     P_SEP=:
5144     case "$host_cpu" in
5145     i*86)
5146         CPUNAME=INTEL
5147         RTL_ARCH=x86
5148         PLATFORMID=solaris_x86
5149         ;;
5150     sparc)
5151         CPUNAME=SPARC
5152         RTL_ARCH=SPARC
5153         PLATFORMID=solaris_sparc
5154         ;;
5155     sparc64)
5156         CPUNAME=SPARC64
5157         RTL_ARCH=SPARC64
5158         PLATFORMID=solaris_sparc64
5159         ;;
5160     *)
5161         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5162         ;;
5163     esac
5164     SOLARINC="$SOLARINC -I/usr/local/include"
5165     ;;
5167 emscripten*)
5168     COM=GCC
5169     OS=EMSCRIPTEN
5170     RTL_OS=Emscripten
5171     P_SEP=:
5173     case "$host_cpu" in
5174     wasm32|wasm64)
5175         ;;
5176     *)
5177         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5178         ;;
5179     esac
5180     CPUNAME=INTEL
5181     RTL_ARCH=x86
5182     PLATFORMID=linux_x86
5183     ;;
5186     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5187     ;;
5188 esac
5190 if test "$with_x" = "no"; then
5191     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5194 DISABLE_GUI=""
5195 if test "$enable_gui" = "no"; then
5196     if test "$using_x11" != yes; then
5197         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5198     fi
5199     USING_X11=
5200     DISABLE_GUI=TRUE
5201 else
5202     AC_DEFINE(HAVE_FEATURE_UI)
5204 AC_SUBST(DISABLE_GUI)
5206 if test "$using_x11" = yes; then
5207     if test "$USING_X11" = TRUE; then
5208         AC_DEFINE(USING_X11)
5209     else
5210         disable_x11_tests
5211     fi
5212 else
5213     if test "$USING_X11" = TRUE; then
5214         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5215     fi
5218 WORKDIR="${BUILDDIR}/workdir"
5219 INSTDIR="${BUILDDIR}/instdir"
5220 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5221 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5222 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5223 AC_SUBST(COM)
5224 AC_SUBST(CPUNAME)
5225 AC_SUBST(RTL_OS)
5226 AC_SUBST(RTL_ARCH)
5227 AC_SUBST(EPM_FLAGS)
5228 AC_SUBST(USING_X11)
5229 AC_SUBST([INSTDIR])
5230 AC_SUBST([INSTROOT])
5231 AC_SUBST([INSTROOTBASE])
5232 AC_SUBST(OS)
5233 AC_SUBST(P_SEP)
5234 AC_SUBST(WORKDIR)
5235 AC_SUBST(PLATFORMID)
5236 AC_SUBST(WINDOWS_X64)
5237 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5239 if test "$OS" = WNT -a "$COM" = MSC; then
5240     case "$CPUNAME" in
5241     INTEL) CPPU_ENV=msci ;;
5242     X86_64) CPPU_ENV=mscx ;;
5243     AARCH64) CPPU_ENV=msca ;;
5244     *)
5245         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5246         ;;
5247     esac
5248 else
5249     CPPU_ENV=gcc3
5251 AC_SUBST(CPPU_ENV)
5253 dnl ===================================================================
5254 dnl Test which package format to use
5255 dnl ===================================================================
5256 AC_MSG_CHECKING([which package format to use])
5257 if test -n "$with_package_format" -a "$with_package_format" != no; then
5258     for i in $with_package_format; do
5259         case "$i" in
5260         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5261             ;;
5262         *)
5263             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5264 aix - AIX software distribution
5265 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5266 deb - Debian software distribution
5267 pkg - Solaris software distribution
5268 rpm - RedHat software distribution
5270 LibreOffice additionally supports:
5271 archive - .tar.gz or .zip
5272 dmg - macOS .dmg
5273 installed - installation tree
5274 msi - Windows .msi
5275         ])
5276             ;;
5277         esac
5278     done
5279     # fakeroot is needed to ensure correct file ownerships/permissions
5280     # inside deb packages and tar archives created on Linux and Solaris.
5281     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5282         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5283         if test "$FAKEROOT" = "no"; then
5284             AC_MSG_ERROR(
5285                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5286         fi
5287     fi
5288     PKGFORMAT="$with_package_format"
5289     AC_MSG_RESULT([$PKGFORMAT])
5290 else
5291     PKGFORMAT=
5292     AC_MSG_RESULT([none])
5294 AC_SUBST(PKGFORMAT)
5296 dnl ===================================================================
5297 dnl Set up a different compiler to produce tools to run on the build
5298 dnl machine when doing cross-compilation
5299 dnl ===================================================================
5301 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5302 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5303 if test "$cross_compiling" = "yes"; then
5304     AC_MSG_CHECKING([for BUILD platform configuration])
5305     echo
5306     rm -rf CONF-FOR-BUILD config_build.mk
5307     mkdir CONF-FOR-BUILD
5308     # Here must be listed all files needed when running the configure script. In particular, also
5309     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5310     # keep them in the same order as there.
5311     (cd $SRC_ROOT && tar cf - \
5312         config.guess \
5313         bin/get_config_variables \
5314         solenv/bin/getcompver.awk \
5315         solenv/inc/langlist.mk \
5316         download.lst \
5317         config_host.mk.in \
5318         config_host_lang.mk.in \
5319         Makefile.in \
5320         bin/bffvalidator.sh.in \
5321         bin/odfvalidator.sh.in \
5322         bin/officeotron.sh.in \
5323         hardened_runtime.xcent.in \
5324         instsetoo_native/util/openoffice.lst.in \
5325         config_host/*.in \
5326         sysui/desktop/macosx/Info.plist.in \
5327         .vscode/vs-code-template.code-workspace.in \
5328         ) \
5329     | (cd CONF-FOR-BUILD && tar xf -)
5330     cp configure CONF-FOR-BUILD
5331     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5332     (
5333     unset COM USING_X11 OS CPUNAME
5334     unset CC CXX SYSBASE CFLAGS
5335     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5336     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5337     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5338     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5339     if test -n "$CC_FOR_BUILD"; then
5340         export CC="$CC_FOR_BUILD"
5341         CC_BASE=`first_arg_basename "$CC"`
5342     fi
5343     if test -n "$CXX_FOR_BUILD"; then
5344         export CXX="$CXX_FOR_BUILD"
5345         CXX_BASE=`first_arg_basename "$CXX"`
5346     fi
5347     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5348     cd CONF-FOR-BUILD
5350     # Handle host configuration, which affects the cross-toolset too
5351     sub_conf_opts=""
5352     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5353     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5354     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5355     if test -n "$ENABLE_JAVA"; then
5356         case "$_os" in
5357         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5358         Android)
5359             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5360             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5361             ;;
5362         *)
5363             if test -z "$with_jdk_home"; then
5364                 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.])
5365             fi
5366             ;;
5367         esac
5368     else
5369         sub_conf_opts="$sub_conf_opts --without-java"
5370     fi
5371     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5372     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5373     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5374     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5375     sub_conf_opts="$sub_conf_opts $with_build_platform_configure_options"
5377     # Don't bother having configure look for stuff not needed for the build platform anyway
5378     ./configure \
5379         --build="$build_alias" \
5380         --disable-cairo-canvas \
5381         --disable-cups \
5382         --disable-firebird-sdbc \
5383         --disable-gpgmepp \
5384         --disable-gstreamer-1-0 \
5385         --disable-gtk3 \
5386         --disable-gtk4 \
5387         --disable-mariadb-sdbc \
5388         --disable-nss \
5389         --disable-online-update \
5390         --disable-opencl \
5391         --disable-pdfimport \
5392         --disable-postgresql-sdbc \
5393         --disable-skia \
5394         --enable-icecream="$enable_icecream" \
5395         --without-doxygen \
5396         --without-webdav \
5397         --with-parallelism="$with_parallelism" \
5398         --with-theme="$with_theme" \
5399         --with-tls=openssl \
5400         $sub_conf_opts \
5401         --srcdir=$srcdir \
5402         2>&1 | sed -e 's/^/    /'
5403     if test [${PIPESTATUS[0]}] -ne 0; then
5404         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5405     fi
5407     # filter permitted build targets
5408     PERMITTED_BUILD_TARGETS="
5409         AVMEDIA
5410         BOOST
5411         CAIRO
5412         CLUCENE
5413         CURL
5414         DBCONNECTIVITY
5415         DESKTOP
5416         DYNLOADING
5417         EPOXY
5418         EXPAT
5419         GLM
5420         GRAPHITE
5421         HARFBUZZ
5422         ICU
5423         LCMS2
5424         LIBJPEG_TURBO
5425         LIBLANGTAG
5426         LibO
5427         LIBFFI
5428         LIBPN
5429         LIBXML2
5430         LIBXSLT
5431         MDDS
5432         NATIVE
5433         OPENSSL
5434         ORCUS
5435         PYTHON
5436         SCRIPTING
5437         ZLIB
5439     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5440     # newlined lists, to use grep as a filter
5441     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5442     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5443     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5444     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5446     cp config_host.mk ../config_build.mk
5447     cp config_host_lang.mk ../config_build_lang.mk
5448     mv config.log ../config.Build.log
5449     mkdir -p ../config_build
5450     mv config_host/*.h ../config_build
5451     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5453     # all these will get a _FOR_BUILD postfix
5454     DIRECT_FOR_BUILD_SETTINGS="
5455         CC
5456         CPPU_ENV
5457         CXX
5458         ILIB
5459         JAVA_HOME
5460         JAVAIFLAGS
5461         JDK
5462         LIBO_BIN_FOLDER
5463         LIBO_LIB_FOLDER
5464         LIBO_URE_LIB_FOLDER
5465         LIBO_URE_MISC_FOLDER
5466         OS
5467         SDKDIRNAME
5468         SYSTEM_LIBXML
5469         SYSTEM_LIBXSLT
5471     # these overwrite host config with build config
5472     OVERWRITING_SETTINGS="
5473         ANT
5474         ANT_HOME
5475         ANT_LIB
5476         HSQLDB_USE_JDBC_4_1
5477         JAVA_CLASSPATH_NOT_SET
5478         JAVA_SOURCE_VER
5479         JAVA_TARGET_VER
5480         JAVACFLAGS
5481         JAVACOMPILER
5482         JAVADOC
5483         JAVADOCISGJDOC
5485     # these need some special handling
5486     EXTRA_HANDLED_SETTINGS="
5487         INSTDIR
5488         INSTROOT
5489         PATH
5490         WORKDIR
5492     OLD_PATH=$PATH
5493     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5494     BUILD_PATH=$PATH
5495     PATH=$OLD_PATH
5497     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5498     echo "$line" >>build-config
5500     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5501         VV='$'$V
5502         VV=`eval "echo $VV"`
5503         if test -n "$VV"; then
5504             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5505             echo "$line" >>build-config
5506         fi
5507     done
5509     for V in $OVERWRITING_SETTINGS; do
5510         VV='$'$V
5511         VV=`eval "echo $VV"`
5512         if test -n "$VV"; then
5513             line=${V}='${'${V}:-$VV'}'
5514             echo "$line" >>build-config
5515         fi
5516     done
5518     for V in INSTDIR INSTROOT WORKDIR; do
5519         VV='$'$V
5520         VV=`eval "echo $VV"`
5521         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5522         if test -n "$VV"; then
5523             line="${V}_FOR_BUILD='$VV'"
5524             echo "$line" >>build-config
5525         fi
5526     done
5528     )
5529     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5530     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])
5531     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5532              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5534     eval `cat CONF-FOR-BUILD/build-config`
5536     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5538     rm -rf CONF-FOR-BUILD
5539 else
5540     OS_FOR_BUILD="$OS"
5541     CC_FOR_BUILD="$CC"
5542     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5543     CXX_FOR_BUILD="$CXX"
5544     INSTDIR_FOR_BUILD="$INSTDIR"
5545     INSTROOT_FOR_BUILD="$INSTROOT"
5546     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5547     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5548     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5549     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5550     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5551     WORKDIR_FOR_BUILD="$WORKDIR"
5553 AC_SUBST(OS_FOR_BUILD)
5554 AC_SUBST(INSTDIR_FOR_BUILD)
5555 AC_SUBST(INSTROOT_FOR_BUILD)
5556 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5557 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5558 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5559 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5560 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5561 AC_SUBST(WORKDIR_FOR_BUILD)
5562 AC_SUBST(CC_FOR_BUILD)
5563 AC_SUBST(CXX_FOR_BUILD)
5564 AC_SUBST(CPPU_ENV_FOR_BUILD)
5566 dnl ===================================================================
5567 dnl Check for syslog header
5568 dnl ===================================================================
5569 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5571 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5572 dnl ===================================================================
5573 AC_MSG_CHECKING([whether to turn warnings to errors])
5574 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5575     ENABLE_WERROR="TRUE"
5576     PYTHONWARNINGS="error"
5577     AC_MSG_RESULT([yes])
5578 else
5579     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5580         ENABLE_WERROR="TRUE"
5581         PYTHONWARNINGS="error"
5582         AC_MSG_RESULT([yes])
5583     else
5584         AC_MSG_RESULT([no])
5585     fi
5587 AC_SUBST(ENABLE_WERROR)
5588 AC_SUBST(PYTHONWARNINGS)
5590 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5591 dnl ===================================================================
5592 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5593 if test -z "$enable_assert_always_abort"; then
5594    if test "$ENABLE_DEBUG" = TRUE; then
5595        enable_assert_always_abort=yes
5596    else
5597        enable_assert_always_abort=no
5598    fi
5600 if test "$enable_assert_always_abort" = "yes"; then
5601     ASSERT_ALWAYS_ABORT="TRUE"
5602     AC_MSG_RESULT([yes])
5603 else
5604     ASSERT_ALWAYS_ABORT="FALSE"
5605     AC_MSG_RESULT([no])
5607 AC_SUBST(ASSERT_ALWAYS_ABORT)
5609 # Determine whether to use ooenv for the instdir installation
5610 # ===================================================================
5611 if test $_os != "WINNT" -a $_os != "Darwin"; then
5612     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5613     if test -z "$enable_ooenv"; then
5614         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5615             enable_ooenv=yes
5616         else
5617             enable_ooenv=no
5618         fi
5619     fi
5620     if test "$enable_ooenv" = "no"; then
5621         AC_MSG_RESULT([no])
5622     else
5623         ENABLE_OOENV="TRUE"
5624         AC_MSG_RESULT([yes])
5625     fi
5627 AC_SUBST(ENABLE_OOENV)
5629 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5630     if test "$enable_qt5" = "no"; then
5631         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5632     else
5633         enable_qt5=yes
5634     fi
5637 dnl ===================================================================
5638 dnl check for cups support
5639 dnl ===================================================================
5641 AC_MSG_CHECKING([whether to enable CUPS support])
5642 if test "$test_cups" = yes -a "$enable_cups" != no; then
5643     ENABLE_CUPS=TRUE
5644     AC_MSG_RESULT([yes])
5646     AC_MSG_CHECKING([whether cups support is present])
5647     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5648     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5649     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5650         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5651     fi
5652 else
5653     AC_MSG_RESULT([no])
5656 AC_SUBST(ENABLE_CUPS)
5658 # fontconfig checks
5659 if test "$using_freetype_fontconfig" = yes; then
5660     AC_MSG_CHECKING([which fontconfig to use])
5662 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5663     AC_MSG_RESULT([external])
5664     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5665     SYSTEM_FONTCONFIG=TRUE
5666     FilterLibs "${FONTCONFIG_LIBS}"
5667     FONTCONFIG_LIBS="${filteredlibs}"
5668 elif test "$using_freetype_fontconfig" = yes; then
5669     AC_MSG_RESULT([internal])
5670     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5672 AC_SUBST(FONTCONFIG_CFLAGS)
5673 AC_SUBST(FONTCONFIG_LIBS)
5674 AC_SUBST([SYSTEM_FONTCONFIG])
5676 dnl whether to find & fetch external tarballs?
5677 dnl ===================================================================
5678 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5679    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5680        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5681    else
5682        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5683    fi
5685 if test -z "$TARFILE_LOCATION"; then
5686     if test -d "$SRC_ROOT/src" ; then
5687         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5688         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5689     fi
5690     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5691 else
5692     AbsolutePath "$TARFILE_LOCATION"
5693     PathFormat "${absolute_path}"
5694     TARFILE_LOCATION="${formatted_path}"
5696 AC_SUBST(TARFILE_LOCATION)
5698 AC_MSG_CHECKING([whether we want to fetch tarballs])
5699 if test "$enable_fetch_external" != "no"; then
5700     if test "$with_all_tarballs" = "yes"; then
5701         AC_MSG_RESULT([yes, all of them])
5702         DO_FETCH_TARBALLS="ALL"
5703     else
5704         AC_MSG_RESULT([yes, if we use them])
5705         DO_FETCH_TARBALLS="TRUE"
5706     fi
5707 else
5708     AC_MSG_RESULT([no])
5709     DO_FETCH_TARBALLS=
5711 AC_SUBST(DO_FETCH_TARBALLS)
5713 AC_MSG_CHECKING([whether to build help])
5714 if test -n "$with_help" -a "$with_help" != "no" -a $_os != iOS -a $_os != Android; then
5715     BUILD_TYPE="$BUILD_TYPE HELP"
5716     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5717     case "$with_help" in
5718     "html")
5719         ENABLE_HTMLHELP=TRUE
5720         SCPDEFS="$SCPDEFS -DWITH_HELP"
5721         AC_MSG_RESULT([HTML])
5722         ;;
5723     "online")
5724         ENABLE_HTMLHELP=TRUE
5725         HELP_ONLINE=TRUE
5726         AC_MSG_RESULT([HTML])
5727         ;;
5728     yes)
5729         SCPDEFS="$SCPDEFS -DWITH_HELP"
5730         AC_MSG_RESULT([yes])
5731         ;;
5732     *)
5733         AC_MSG_ERROR([Unknown --with-help=$with_help])
5734         ;;
5735     esac
5736 else
5737     AC_MSG_RESULT([no])
5739 AC_SUBST([ENABLE_HTMLHELP])
5740 AC_SUBST([HELP_ONLINE])
5742 AC_MSG_CHECKING([whether to enable xapian-omega support for help])
5743 if test -n "$with_omindex" -a "$with_omindex" != "no" -a $_os != iOS -a $_os != Android; then
5744     BUILD_TYPE="$BUILD_TYPE HELP"
5745     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5746     case "$with_omindex" in
5747     "server")
5748         ENABLE_HTMLHELP=TRUE
5749         HELP_ONLINE=TRUE
5750         HELP_OMINDEX_PAGE=TRUE
5751         AC_MSG_RESULT([SERVER])
5752         ;;
5753     "noxap")
5754         ENABLE_HTMLHELP=TRUE
5755         HELP_ONLINE=TRUE
5756         HELP_OMINDEX_PAGE=FALSE
5757         AC_MSG_RESULT([NOXAP])
5758         ;;
5759     *)
5760         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5761         ;;
5762     esac
5763 else
5764     HELP_OMINDEX_PAGE=FALSE
5765     AC_MSG_RESULT([no])
5767 AC_SUBST([ENABLE_HTMLHELP])
5768 AC_SUBST([HELP_OMINDEX_PAGE])
5769 AC_SUBST([HELP_ONLINE])
5772 dnl Test whether to include MySpell dictionaries
5773 dnl ===================================================================
5774 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5775 if test "$with_myspell_dicts" = "yes"; then
5776     AC_MSG_RESULT([yes])
5777     WITH_MYSPELL_DICTS=TRUE
5778     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5779     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5780 else
5781     AC_MSG_RESULT([no])
5782     WITH_MYSPELL_DICTS=
5784 AC_SUBST(WITH_MYSPELL_DICTS)
5786 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5787 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5788     if test "$with_system_dicts" = yes; then
5789         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5790     fi
5791     with_system_dicts=no
5794 AC_MSG_CHECKING([whether to use dicts from external paths])
5795 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5796     AC_MSG_RESULT([yes])
5797     SYSTEM_DICTS=TRUE
5798     AC_MSG_CHECKING([for spelling dictionary directory])
5799     if test -n "$with_external_dict_dir"; then
5800         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5801     else
5802         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5803         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5804             DICT_SYSTEM_DIR=file:///usr/share/myspell
5805         fi
5806     fi
5807     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5808     AC_MSG_CHECKING([for hyphenation patterns directory])
5809     if test -n "$with_external_hyph_dir"; then
5810         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5811     else
5812         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5813     fi
5814     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5815     AC_MSG_CHECKING([for thesaurus directory])
5816     if test -n "$with_external_thes_dir"; then
5817         THES_SYSTEM_DIR=file://$with_external_thes_dir
5818     else
5819         THES_SYSTEM_DIR=file:///usr/share/mythes
5820     fi
5821     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5822 else
5823     AC_MSG_RESULT([no])
5824     SYSTEM_DICTS=
5826 AC_SUBST(SYSTEM_DICTS)
5827 AC_SUBST(DICT_SYSTEM_DIR)
5828 AC_SUBST(HYPH_SYSTEM_DIR)
5829 AC_SUBST(THES_SYSTEM_DIR)
5831 dnl ===================================================================
5832 dnl Precompiled headers.
5833 ENABLE_PCH=""
5834 AC_MSG_CHECKING([whether to enable pch feature])
5835 if test -z "$enable_pch"; then
5836     if test "$_os" = "WINNT"; then
5837         # Enabled by default on Windows.
5838         enable_pch=yes
5839     else
5840         enable_pch=no
5841     fi
5843 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5844     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5846 if test "$enable_pch" = "system"; then
5847     ENABLE_PCH="1"
5848     AC_MSG_RESULT([yes (system headers)])
5849 elif test "$enable_pch" = "base"; then
5850     ENABLE_PCH="2"
5851     AC_MSG_RESULT([yes (system and base headers)])
5852 elif test "$enable_pch" = "normal"; then
5853     ENABLE_PCH="3"
5854     AC_MSG_RESULT([yes (normal)])
5855 elif test "$enable_pch" = "full"; then
5856     ENABLE_PCH="4"
5857     AC_MSG_RESULT([yes (full)])
5858 elif test "$enable_pch" = "yes"; then
5859     # Pick a suitable default.
5860     if test "$GCC" = "yes"; then
5861         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5862         # while making the PCHs larger and rebuilds more likely.
5863         ENABLE_PCH="2"
5864         AC_MSG_RESULT([yes (system and base headers)])
5865     else
5866         # With MSVC the highest level makes a significant difference,
5867         # and it was the default when there used to be no PCH levels.
5868         ENABLE_PCH="4"
5869         AC_MSG_RESULT([yes (full)])
5870     fi
5871 elif test "$enable_pch" = "no"; then
5872     AC_MSG_RESULT([no])
5873 else
5874     AC_MSG_ERROR([Unknown value for --enable-pch])
5876 AC_SUBST(ENABLE_PCH)
5877 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5878 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5879     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5880     if test "$CCACHE_BIN" != "not found"; then
5881         AC_MSG_CHECKING([ccache version])
5882         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5883         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5884         AC_MSG_RESULT([$CCACHE_VERSION])
5885         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5886         if test "$CCACHE_NUMVER" -gt "030701"; then
5887             AC_MSG_RESULT([yes])
5888         else
5889             AC_MSG_RESULT([no (not newer than 3.7.1)])
5890             CCACHE_DEPEND_MODE=
5891         fi
5892     fi
5895 PCH_INSTANTIATE_TEMPLATES=
5896 if test -n "$ENABLE_PCH"; then
5897     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5898     save_CFLAGS=$CFLAGS
5899     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5900     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5901     CFLAGS=$save_CFLAGS
5902     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5903         AC_MSG_RESULT(yes)
5904     else
5905         AC_MSG_RESULT(no)
5906     fi
5908 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5910 BUILDING_PCH_WITH_OBJ=
5911 if test -n "$ENABLE_PCH"; then
5912     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5913     save_CFLAGS=$CFLAGS
5914     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5915     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5916     CFLAGS=$save_CFLAGS
5917     if test -n "$BUILDING_PCH_WITH_OBJ"; then
5918         AC_MSG_RESULT(yes)
5919     else
5920         AC_MSG_RESULT(no)
5921     fi
5923 AC_SUBST(BUILDING_PCH_WITH_OBJ)
5925 PCH_CODEGEN=
5926 PCH_NO_CODEGEN=
5927 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5928     AC_MSG_CHECKING([whether $CC supports -fpch-codegen])
5929     save_CFLAGS=$CFLAGS
5930     CFLAGS="$CFLAGS -Werror -fpch-codegen"
5931     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
5932         [
5933         PCH_CODEGEN="-fpch-codegen"
5934         PCH_NO_CODEGEN="-fno-pch-codegen"
5935         ],[])
5936     CFLAGS=$save_CFLAGS
5937     if test -n "$PCH_CODEGEN"; then
5938         AC_MSG_RESULT(yes)
5939     else
5940         AC_MSG_RESULT(no)
5941     fi
5943 AC_SUBST(PCH_CODEGEN)
5944 AC_SUBST(PCH_NO_CODEGEN)
5945 PCH_DEBUGINFO=
5946 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5947     AC_MSG_CHECKING([whether $CC supports -fpch-debuginfo])
5948     save_CFLAGS=$CFLAGS
5949     CFLAGS="$CFLAGS -Werror -fpch-debuginfo"
5950     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="-fpch-debuginfo" ],[])
5951     CFLAGS=$save_CFLAGS
5952     if test -n "$PCH_DEBUGINFO"; then
5953         AC_MSG_RESULT(yes)
5954     else
5955         AC_MSG_RESULT(no)
5956     fi
5958 AC_SUBST(PCH_DEBUGINFO)
5960 TAB=`printf '\t'`
5962 AC_MSG_CHECKING([the GNU Make version])
5963 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
5964 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5965 if test "$_make_longver" -ge "038200"; then
5966     AC_MSG_RESULT([$GNUMAKE $_make_version])
5968 elif test "$_make_longver" -ge "038100"; then
5969     if test "$build_os" = "cygwin"; then
5970         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
5971     fi
5972     AC_MSG_RESULT([$GNUMAKE $_make_version])
5974     dnl ===================================================================
5975     dnl Search all the common names for sha1sum
5976     dnl ===================================================================
5977     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
5978     if test -z "$SHA1SUM"; then
5979         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
5980     elif test "$SHA1SUM" = "openssl"; then
5981         SHA1SUM="openssl sha1"
5982     fi
5983     AC_MSG_CHECKING([for GNU Make bug 20033])
5984     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
5985     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
5986 A := \$(wildcard *.a)
5988 .PHONY: all
5989 all: \$(A:.a=.b)
5990 <TAB>@echo survived bug20033.
5992 .PHONY: setup
5993 setup:
5994 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
5996 define d1
5997 @echo lala \$(1)
5998 @sleep 1
5999 endef
6001 define d2
6002 @echo tyty \$(1)
6003 @sleep 1
6004 endef
6006 %.b : %.a
6007 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6008 <TAB>\$(call d1,\$(CHECKSUM)),\
6009 <TAB>\$(call d2,\$(CHECKSUM)))
6011     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6012         no_parallelism_make="YES"
6013         AC_MSG_RESULT([yes, disable parallelism])
6014     else
6015         AC_MSG_RESULT([no, keep parallelism enabled])
6016     fi
6017     rm -rf $TESTGMAKEBUG20033
6018 else
6019     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6022 # find if gnumake support file function
6023 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6024 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6025 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6026     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6028 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6029 \$(file >test.txt,Success )
6031 .PHONY: all
6032 all:
6033 <TAB>@cat test.txt
6036 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6037 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6038     HAVE_GNUMAKE_FILE_FUNC=TRUE
6039     AC_MSG_RESULT([yes])
6040 else
6041     AC_MSG_RESULT([no])
6043 rm -rf $TESTGMAKEFILEFUNC
6044 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6045 AC_SUBST(GNUMAKE_WIN_NATIVE)
6047 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6048 STALE_MAKE=
6049 if test "$_make_ver_check" = ""; then
6050    STALE_MAKE=TRUE
6053 HAVE_LD_HASH_STYLE=FALSE
6054 WITH_LINKER_HASH_STYLE=
6055 AC_MSG_CHECKING([for --hash-style gcc linker support])
6056 if test "$GCC" = "yes"; then
6057     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6058         hash_styles="gnu sysv"
6059     elif test "$with_linker_hash_style" = "no"; then
6060         hash_styles=
6061     else
6062         hash_styles="$with_linker_hash_style"
6063     fi
6065     for hash_style in $hash_styles; do
6066         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6067         hash_style_ldflags_save=$LDFLAGS
6068         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6070         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6071             [
6072 #include <stdio.h>
6073             ],[
6074 printf ("");
6075             ])],
6076             [
6077                   HAVE_LD_HASH_STYLE=TRUE
6078                   WITH_LINKER_HASH_STYLE=$hash_style
6079             ],
6080             [HAVE_LD_HASH_STYLE=FALSE],
6081             [HAVE_LD_HASH_STYLE=FALSE])
6082         LDFLAGS=$hash_style_ldflags_save
6083     done
6085     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6086         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6087     else
6088         AC_MSG_RESULT( no )
6089     fi
6090     LDFLAGS=$hash_style_ldflags_save
6091 else
6092     AC_MSG_RESULT( no )
6094 AC_SUBST(HAVE_LD_HASH_STYLE)
6095 AC_SUBST(WITH_LINKER_HASH_STYLE)
6097 dnl ===================================================================
6098 dnl Check whether there's a Perl version available.
6099 dnl ===================================================================
6100 if test -z "$with_perl_home"; then
6101     AC_PATH_PROG(PERL, perl)
6102 else
6103     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6104     _perl_path="$with_perl_home/bin/perl"
6105     if test -x "$_perl_path"; then
6106         PERL=$_perl_path
6107     else
6108         AC_MSG_ERROR([$_perl_path not found])
6109     fi
6112 dnl ===================================================================
6113 dnl Testing for Perl version 5 or greater.
6114 dnl $] is the Perl version variable, it is returned as an integer
6115 dnl ===================================================================
6116 if test "$PERL"; then
6117     AC_MSG_CHECKING([the Perl version])
6118     ${PERL} -e "exit($]);"
6119     _perl_version=$?
6120     if test "$_perl_version" -lt 5; then
6121         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6122     fi
6123     AC_MSG_RESULT([Perl $_perl_version])
6124 else
6125     AC_MSG_ERROR([Perl not found, install Perl 5])
6128 dnl ===================================================================
6129 dnl Testing for required Perl modules
6130 dnl ===================================================================
6132 AC_MSG_CHECKING([for required Perl modules])
6133 perl_use_string="use Cwd ; use Digest::MD5"
6134 if test "$_os" = "WINNT"; then
6135     if test -n "$PKGFORMAT"; then
6136         for i in $PKGFORMAT; do
6137             case "$i" in
6138             msi)
6139                 # for getting fonts versions to use in MSI
6140                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6141                 ;;
6142             esac
6143         done
6144     fi
6146 if test "$with_system_hsqldb" = "yes"; then
6147     perl_use_string="$perl_use_string ; use Archive::Zip"
6149 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6150     # OpenSSL needs that to build
6151     perl_use_string="$perl_use_string ; use FindBin"
6153 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6154     AC_MSG_RESULT([all modules found])
6155 else
6156     AC_MSG_RESULT([failed to find some modules])
6157     # Find out which modules are missing.
6158     for i in $perl_use_string; do
6159         if test "$i" != "use" -a "$i" != ";"; then
6160             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6161                 missing_perl_modules="$missing_perl_modules $i"
6162             fi
6163         fi
6164     done
6165     AC_MSG_ERROR([
6166     The missing Perl modules are: $missing_perl_modules
6167     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6170 dnl ===================================================================
6171 dnl Check for pkg-config
6172 dnl ===================================================================
6173 if test "$_os" != "WINNT"; then
6174     PKG_PROG_PKG_CONFIG
6177 if test "$_os" != "WINNT"; then
6179     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6180     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6181     # explicitly. Or put /path/to/compiler in PATH yourself.
6183     # Use wrappers for LTO
6184     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6185         AC_CHECK_TOOL(AR,gcc-ar)
6186         AC_CHECK_TOOL(NM,gcc-nm)
6187         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6188     else
6189         AC_CHECK_TOOL(AR,ar)
6190         AC_CHECK_TOOL(NM,nm)
6191         AC_CHECK_TOOL(RANLIB,ranlib)
6192     fi
6193     AC_CHECK_TOOL(OBJDUMP,objdump)
6194     AC_CHECK_TOOL(READELF,readelf)
6195     AC_CHECK_TOOL(STRIP,strip)
6196     if test "$_os" = "WINNT"; then
6197         AC_CHECK_TOOL(DLLTOOL,dlltool)
6198         AC_CHECK_TOOL(WINDRES,windres)
6199     fi
6201 AC_SUBST(AR)
6202 AC_SUBST(DLLTOOL)
6203 AC_SUBST(LD)
6204 AC_SUBST(NM)
6205 AC_SUBST(OBJDUMP)
6206 AC_SUBST(PKG_CONFIG)
6207 AC_SUBST(PKG_CONFIG_PATH)
6208 AC_SUBST(PKG_CONFIG_LIBDIR)
6209 AC_SUBST(RANLIB)
6210 AC_SUBST(READELF)
6211 AC_SUBST(STRIP)
6212 AC_SUBST(WINDRES)
6214 dnl ===================================================================
6215 dnl pkg-config checks on macOS
6216 dnl ===================================================================
6218 if test $_os = Darwin; then
6219     AC_MSG_CHECKING([for bogus pkg-config])
6220     if test -n "$PKG_CONFIG"; then
6221         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6222             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6223         else
6224             if test "$enable_bogus_pkg_config" = "yes"; then
6225                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6226             else
6227                 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.])
6228             fi
6229         fi
6230     else
6231         AC_MSG_RESULT([no, good])
6232     fi
6235 find_csc()
6237     # Return value: $csctest
6239     unset csctest
6241     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6242     if test -n "$regvalue"; then
6243         csctest=$regvalue
6244         return
6245     fi
6248 find_al()
6250     # Return value: $altest
6252     unset altest
6254     # We need this check to detect 4.6.1 or above.
6255     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6256         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6257         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6258             altest=$regvalue
6259             return
6260         fi
6261     done
6263     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6264         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6265         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6266             altest=$regvalue
6267             return
6268         fi
6269     done
6272 find_dotnetsdk46()
6274     unset frametest
6276     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6277         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6278         if test -n "$regvalue"; then
6279             frametest=$regvalue
6280             return
6281         fi
6282     done
6285 find_winsdk_version()
6287     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6288     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6290     unset winsdktest winsdkbinsubdir winsdklibsubdir
6292     case "$1" in
6293     8.0|8.0A)
6294         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6295         if test -n "$regvalue"; then
6296             winsdktest=$regvalue
6297             winsdklibsubdir=win8
6298             return
6299         fi
6300         ;;
6301     8.1|8.1A)
6302         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6303         if test -n "$regvalue"; then
6304             winsdktest=$regvalue
6305             winsdklibsubdir=winv6.3
6306             return
6307         fi
6308         ;;
6309     10.0)
6310         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6311         if test -n "$regvalue"; then
6312             winsdktest=$regvalue
6313             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6314             if test -n "$regvalue"; then
6315                 winsdkbinsubdir="$regvalue".0
6316                 winsdklibsubdir=$winsdkbinsubdir
6317                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6318                 local tmppath_unix=$(cygpath -u "$tmppath")
6319                 # test exist the SDK path
6320                 if test -d "$tmppath_unix"; then
6321                    # when path is convertible to a short path then path is okay
6322                    cygpath -d "$tmppath" >/dev/null 2>&1
6323                    if test $? -ne 0; then
6324                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6325                    fi
6326                 else
6327                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6328                 fi
6329             fi
6330             return
6331         fi
6332         ;;
6333     esac
6336 find_winsdk()
6338     # Return value: From find_winsdk_version
6340     unset winsdktest
6342     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6343         find_winsdk_version $ver
6344         if test -n "$winsdktest"; then
6345             return
6346         fi
6347     done
6350 find_msms()
6352     # Return value: $msmdir
6354     AC_MSG_CHECKING([for MSVC merge modules directory])
6355     local my_msm_files=Microsoft_VC${VCVER}_CRT_x86.msm
6356     local my_msm_dir
6358     case "$VCVER" in
6359         160)
6360         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6361         ;;
6362     esac
6363     for f in $my_msm_files; do
6364         echo "$as_me:$LINENO: searching for $f" >&5
6365     done
6367     msmdir=
6368     for ver in 14.0 15.0; do
6369         reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/MSMDir
6370         if test -n "$regvalue"; then
6371             for f in ${my_msm_files}; do
6372                 if test -e "$regvalue/${f}"; then
6373                     msmdir=$regvalue
6374                     break
6375                 fi
6376             done
6377         fi
6378     done
6379     dnl Is the following fallback really necessary, or was it added in response
6380     dnl to never having started Visual Studio on a given machine, so the
6381     dnl registry keys checked above had presumably not yet been created?
6382     dnl Anyway, if it really is necessary, it might be worthwhile to extend it
6383     dnl to also check %CommonProgramFiles(X86)% (typically expanding to
6384     dnl "C:\Program Files (X86)\Common Files" compared to %CommonProgramFiles%
6385     dnl expanding to "C:\Program Files\Common Files"), which would need
6386     dnl something like $(perl -e 'print $ENV{"CommonProgramFiles(x86)"}') to
6387     dnl obtain its value from cygwin:
6388     if test -z "$msmdir"; then
6389         my_msm_dir="${COMMONPROGRAMFILES}/Merge Modules/"
6390         for f in ${my_msm_files}; do
6391             if test -e "$my_msm_dir/${f}"; then
6392                 msmdir=$my_msm_dir
6393             fi
6394         done
6395     fi
6397     dnl Starting from MSVC 15.0, merge modules are located in different directory
6398     case "$VCVER" in
6399     160)
6400         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6401             echo "$as_me:$LINENO: looking in $VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules])" >&5
6402             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6403             for f in ${my_msm_files}; do
6404                 if test -e "$my_msm_dir/${f}"; then
6405                     msmdir=$my_msm_dir
6406                     break
6407                 fi
6408             done
6409         done
6410         ;;
6411     esac
6413     if test -n "$msmdir"; then
6414         msmdir=`cygpath -m "$msmdir"`
6415         AC_MSG_RESULT([$msmdir])
6416     else
6417         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6418             AC_MSG_FAILURE([not found])
6419         else
6420             AC_MSG_WARN([not found (check config.log)])
6421             add_warning "MSM none of ${my_msm_files} found"
6422         fi
6423     fi
6426 find_msvc_x64_dlls()
6428     # Return value: $msvcdllpath, $msvcdlls
6430     AC_MSG_CHECKING([for MSVC x64 DLL path])
6431     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6432     case "$VCVER" in
6433     160)
6434         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6435             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT" >&5
6436             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"; then
6437                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"
6438                 break
6439             fi
6440             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT" >&5
6441             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"; then
6442                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"
6443                 break
6444             fi
6445         done
6446         ;;
6447     esac
6448     AC_MSG_RESULT([$msvcdllpath])
6449     AC_MSG_CHECKING([for MSVC x64 DLLs])
6450     msvcdlls="msvcp140.dll vcruntime140.dll"
6451     for dll in $msvcdlls; do
6452         if ! test -f "$msvcdllpath/$dll"; then
6453             AC_MSG_FAILURE([missing $dll])
6454         fi
6455     done
6456     AC_MSG_RESULT([found all ($msvcdlls)])
6459 dnl =========================================
6460 dnl Check for the Windows  SDK.
6461 dnl =========================================
6462 if test "$_os" = "WINNT"; then
6463     AC_MSG_CHECKING([for Windows SDK])
6464     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6465         find_winsdk
6466         WINDOWS_SDK_HOME=$winsdktest
6468         # normalize if found
6469         if test -n "$WINDOWS_SDK_HOME"; then
6470             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6471             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6472         fi
6474         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6475     fi
6477     if test -n "$WINDOWS_SDK_HOME"; then
6478         # Remove a possible trailing backslash
6479         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6481         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6482              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6483              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6484             have_windows_sdk_headers=yes
6485         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6486              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6487              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6488             have_windows_sdk_headers=yes
6489         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6490              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6491              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6492             have_windows_sdk_headers=yes
6493         else
6494             have_windows_sdk_headers=no
6495         fi
6497         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6498             have_windows_sdk_libs=yes
6499         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6500             have_windows_sdk_libs=yes
6501         else
6502             have_windows_sdk_libs=no
6503         fi
6505         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6506             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6507 the  Windows SDK are installed.])
6508         fi
6509     fi
6511     if test -z "$WINDOWS_SDK_HOME"; then
6512         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6513     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6514         WINDOWS_SDK_VERSION=80
6515         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6516     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6517         WINDOWS_SDK_VERSION=81
6518         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6519     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6520         WINDOWS_SDK_VERSION=10
6521         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6522     else
6523         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6524     fi
6525     PathFormat "$WINDOWS_SDK_HOME"
6526     WINDOWS_SDK_HOME="$formatted_path"
6527     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6528     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6529         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6530         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6531             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6532         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6533             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6534         fi
6535     fi
6537     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6538     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6539     dnl but not in v8.0), so allow this to be overridden with a
6540     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6541     dnl and configuration error if no WiLangId.vbs is found would arguably be
6542     dnl better, but I do not know under which conditions exactly it is needed by
6543     dnl msiglobal.pm:
6544     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6545         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6546         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6547         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6548             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6549             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6550         fi
6551         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6552             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6553             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6554         fi
6555         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6556             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6557             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6558         fi
6559     fi
6560     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6561         if test -n "$with_package_format" -a "$with_package_format" != no; then
6562             for i in "$with_package_format"; do
6563                 if test "$i" = "msi"; then
6564                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6565                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6566                     fi
6567                 fi
6568             done
6569         fi
6570     fi
6572 AC_SUBST(WINDOWS_SDK_HOME)
6573 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6574 AC_SUBST(WINDOWS_SDK_VERSION)
6575 AC_SUBST(WINDOWS_SDK_WILANGID)
6577 if test "$build_os" = "cygwin"; then
6578     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6579     dnl dir, it also determines that dir's path w/o an arch segment if any,
6580     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6581     AC_MSG_CHECKING([for midl.exe])
6583     find_winsdk
6584     if test -n "$winsdkbinsubdir" \
6585         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6586     then
6587         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6588         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6589     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6590         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6591         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6592     elif test -f "$winsdktest/Bin/midl.exe"; then
6593         MIDL_PATH=$winsdktest/Bin
6594         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6595     fi
6596     if test ! -f "$MIDL_PATH/midl.exe"; then
6597         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6598     else
6599         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6600     fi
6602     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6603     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6605     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6606          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6607          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6608          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6609     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6610          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6611          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6612          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6613     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6614          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6615          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6616          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6617     else
6618         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6619     fi
6621     dnl Check csc.exe
6622     AC_MSG_CHECKING([for csc.exe])
6623     find_csc
6624     if test -f "$csctest/csc.exe"; then
6625         CSC_PATH="$csctest"
6626     fi
6627     if test ! -f "$CSC_PATH/csc.exe"; then
6628         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6629     else
6630         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6631     fi
6633     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6635     dnl Check al.exe
6636     AC_MSG_CHECKING([for al.exe])
6637     find_winsdk
6638     if test -n "$winsdkbinsubdir" \
6639         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6640     then
6641         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6642     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6643         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6644     elif test -f "$winsdktest/Bin/al.exe"; then
6645         AL_PATH="$winsdktest/Bin"
6646     fi
6648     if test -z "$AL_PATH"; then
6649         find_al
6650         if test -f "$altest/bin/al.exe"; then
6651             AL_PATH="$altest/bin"
6652         elif test -f "$altest/al.exe"; then
6653             AL_PATH="$altest"
6654         fi
6655     fi
6656     if test ! -f "$AL_PATH/al.exe"; then
6657         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6658     else
6659         AC_MSG_RESULT([$AL_PATH/al.exe])
6660     fi
6662     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6664     dnl Check mscoree.lib / .NET Framework dir
6665     AC_MSG_CHECKING(.NET Framework)
6666     find_dotnetsdk46
6667     PathFormat "$frametest"
6668     frametest="$formatted_path"
6669     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6670         DOTNET_FRAMEWORK_HOME="$frametest"
6671     else
6672         find_winsdk
6673         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6674             DOTNET_FRAMEWORK_HOME="$winsdktest"
6675         fi
6676     fi
6677     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
6678         AC_MSG_ERROR([mscoree.lib not found])
6679     fi
6680     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6682     PathFormat "$MIDL_PATH"
6683     MIDL_PATH="$formatted_path"
6685     PathFormat "$AL_PATH"
6686     AL_PATH="$formatted_path"
6688     PathFormat "$DOTNET_FRAMEWORK_HOME"
6689     DOTNET_FRAMEWORK_HOME="$formatted_path"
6691     PathFormat "$CSC_PATH"
6692     CSC_PATH="$formatted_path"
6695 dnl ===================================================================
6696 dnl Testing for C++ compiler and version...
6697 dnl ===================================================================
6699 if test "$_os" != "WINNT"; then
6700     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6701     save_CXXFLAGS=$CXXFLAGS
6702     AC_PROG_CXX
6703     CXXFLAGS=$save_CXXFLAGS
6704     if test -z "$CXX_BASE"; then
6705         CXX_BASE=`first_arg_basename "$CXX"`
6706     fi
6709 dnl check for GNU C++ compiler version
6710 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6711     AC_MSG_CHECKING([the GNU C++ compiler version])
6713     _gpp_version=`$CXX -dumpversion`
6714     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6716     if test "$_gpp_majmin" -lt "700"; then
6717         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6718     else
6719         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6720     fi
6722     dnl see https://code.google.com/p/android/issues/detail?id=41770
6723         glibcxx_threads=no
6724         AC_LANG_PUSH([C++])
6725         AC_REQUIRE_CPP
6726         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6727         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6728             #include <bits/c++config.h>]],[[
6729             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6730             && !defined(_GLIBCXX__PTHREADS) \
6731             && !defined(_GLIBCXX_HAS_GTHREADS)
6732             choke me
6733             #endif
6734         ]])],[AC_MSG_RESULT([yes])
6735         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6736         AC_LANG_POP([C++])
6737         if test $glibcxx_threads = yes; then
6738             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6739         fi
6741 AC_SUBST(BOOST_CXXFLAGS)
6744 # prefx CXX with ccache if needed
6746 UNCACHED_CXX="$CXX"
6747 if test "$CCACHE" != ""; then
6748     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6749     AC_LANG_PUSH([C++])
6750     save_CXXFLAGS=$CXXFLAGS
6751     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6752     dnl an empty program will do, we're checking the compiler flags
6753     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6754                       [use_ccache=yes], [use_ccache=no])
6755     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6756         AC_MSG_RESULT([yes])
6757     else
6758         CXX="$CCACHE $CXX"
6759         CXX_BASE="ccache $CXX_BASE"
6760         AC_MSG_RESULT([no])
6761     fi
6762     CXXFLAGS=$save_CXXFLAGS
6763     AC_LANG_POP([C++])
6766 dnl ===================================================================
6767 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6768 dnl ===================================================================
6770 if test "$_os" != "WINNT"; then
6771     AC_PROG_CXXCPP
6773     dnl Check whether there's a C pre-processor.
6774     AC_PROG_CPP
6778 dnl ===================================================================
6779 dnl Find integral type sizes and alignments
6780 dnl ===================================================================
6782 if test "$_os" != "WINNT"; then
6784     AC_CHECK_SIZEOF(long)
6785     AC_CHECK_SIZEOF(short)
6786     AC_CHECK_SIZEOF(int)
6787     AC_CHECK_SIZEOF(long long)
6788     AC_CHECK_SIZEOF(double)
6789     AC_CHECK_SIZEOF(void*)
6791     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6792     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6793     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6794     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6795     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6797     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6798     m4_pattern_allow([AC_CHECK_ALIGNOF])
6799     m4_ifdef([AC_CHECK_ALIGNOF],
6800         [
6801             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6802             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6803             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6804             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6805         ],
6806         [
6807             case "$_os-$host_cpu" in
6808             Linux-i686)
6809                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6810                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6811                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6812                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6813                 ;;
6814             Linux-x86_64)
6815                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6816                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6817                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6818                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6819                 ;;
6820             *)
6821                 if test -z "$ac_cv_alignof_short" -o \
6822                         -z "$ac_cv_alignof_int" -o \
6823                         -z "$ac_cv_alignof_long" -o \
6824                         -z "$ac_cv_alignof_double"; then
6825                    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.])
6826                 fi
6827                 ;;
6828             esac
6829         ])
6831     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6832     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6833     if test $ac_cv_sizeof_long -eq 8; then
6834         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6835     elif test $ac_cv_sizeof_double -eq 8; then
6836         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6837     else
6838         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6839     fi
6841     dnl Check for large file support
6842     AC_SYS_LARGEFILE
6843     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6844         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6845     fi
6846     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6847         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6848     fi
6849 else
6850     # Hardcode for MSVC
6851     SAL_TYPES_SIZEOFSHORT=2
6852     SAL_TYPES_SIZEOFINT=4
6853     SAL_TYPES_SIZEOFLONG=4
6854     SAL_TYPES_SIZEOFLONGLONG=8
6855     if test $WIN_HOST_BITS -eq 32; then
6856         SAL_TYPES_SIZEOFPOINTER=4
6857     else
6858         SAL_TYPES_SIZEOFPOINTER=8
6859     fi
6860     SAL_TYPES_ALIGNMENT2=2
6861     SAL_TYPES_ALIGNMENT4=4
6862     SAL_TYPES_ALIGNMENT8=8
6863     LFS_CFLAGS=''
6865 AC_SUBST(LFS_CFLAGS)
6867 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6868 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6869 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6870 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6871 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6872 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6873 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6874 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6876 dnl ===================================================================
6877 dnl Check whether to enable runtime optimizations
6878 dnl ===================================================================
6879 ENABLE_RUNTIME_OPTIMIZATIONS=
6880 AC_MSG_CHECKING([whether to enable runtime optimizations])
6881 if test -z "$enable_runtime_optimizations"; then
6882     for i in $CC; do
6883         case $i in
6884         -fsanitize=*)
6885             enable_runtime_optimizations=no
6886             break
6887             ;;
6888         esac
6889     done
6891 if test "$enable_runtime_optimizations" != no; then
6892     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6893     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6894     AC_MSG_RESULT([yes])
6895 else
6896     AC_MSG_RESULT([no])
6898 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6900 dnl ===================================================================
6901 dnl Check if valgrind headers are available
6902 dnl ===================================================================
6903 ENABLE_VALGRIND=
6904 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6905     prev_cppflags=$CPPFLAGS
6906     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6907     # or where does it come from?
6908     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6909     AC_CHECK_HEADER([valgrind/valgrind.h],
6910         [ENABLE_VALGRIND=TRUE])
6911     CPPFLAGS=$prev_cppflags
6913 AC_SUBST([ENABLE_VALGRIND])
6914 if test -z "$ENABLE_VALGRIND"; then
6915     if test "$with_valgrind" = yes; then
6916         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6917     fi
6918     VALGRIND_CFLAGS=
6920 AC_SUBST([VALGRIND_CFLAGS])
6923 dnl ===================================================================
6924 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6925 dnl ===================================================================
6927 # We need at least the sys/sdt.h include header.
6928 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6929 if test "$SDT_H_FOUND" = "TRUE"; then
6930     # Found sys/sdt.h header, now make sure the c++ compiler works.
6931     # Old g++ versions had problems with probes in constructors/destructors.
6932     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6933     AC_LANG_PUSH([C++])
6934     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6935     #include <sys/sdt.h>
6936     class ProbeClass
6937     {
6938     private:
6939       int& ref;
6940       const char *name;
6942     public:
6943       ProbeClass(int& v, const char *n) : ref(v), name(n)
6944       {
6945         DTRACE_PROBE2(_test_, cons, name, ref);
6946       }
6948       void method(int min)
6949       {
6950         DTRACE_PROBE3(_test_, meth, name, ref, min);
6951         ref -= min;
6952       }
6954       ~ProbeClass()
6955       {
6956         DTRACE_PROBE2(_test_, dest, name, ref);
6957       }
6958     };
6959     ]],[[
6960     int i = 64;
6961     DTRACE_PROBE1(_test_, call, i);
6962     ProbeClass inst = ProbeClass(i, "call");
6963     inst.method(24);
6964     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
6965           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
6966     AC_LANG_POP([C++])
6968 AC_CONFIG_HEADERS([config_host/config_probes.h])
6970 dnl ===================================================================
6971 dnl GCC features
6972 dnl ===================================================================
6973 HAVE_GCC_STACK_CLASH_PROTECTION=
6974 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
6975     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
6976     save_CFLAGS=$CFLAGS
6977     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
6978     AC_LINK_IFELSE(
6979         [AC_LANG_PROGRAM(, [[return 0;]])],
6980         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
6981         [AC_MSG_RESULT([no])])
6982     CFLAGS=$save_CFLAGS
6984     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
6985     save_CFLAGS=$CFLAGS
6986     CFLAGS="$CFLAGS -Werror -mno-avx"
6987     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
6988     CFLAGS=$save_CFLAGS
6989     if test "$HAVE_GCC_AVX" = "TRUE"; then
6990         AC_MSG_RESULT([yes])
6991     else
6992         AC_MSG_RESULT([no])
6993     fi
6995     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
6996     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
6997     int v = 0;
6998     if (__sync_add_and_fetch(&v, 1) != 1 ||
6999         __sync_sub_and_fetch(&v, 1) != 0)
7000         return 1;
7001     __sync_synchronize();
7002     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7003         v != 1)
7004         return 1;
7005     return 0;
7006 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7007     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7008         AC_MSG_RESULT([yes])
7009         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7010     else
7011         AC_MSG_RESULT([no])
7012     fi
7014     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7015     AC_LANG_PUSH([C++])
7016     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7017             #include <cstddef>
7018             #include <cxxabi.h>
7019             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7020         ])], [
7021             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7022             AC_MSG_RESULT([yes])
7023         ], [AC_MSG_RESULT([no])])
7024     AC_LANG_POP([C++])
7026     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7027     AC_LANG_PUSH([C++])
7028     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7029             #include <cstddef>
7030             #include <cxxabi.h>
7031             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7032         ])], [
7033             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7034             AC_MSG_RESULT([yes])
7035         ], [AC_MSG_RESULT([no])])
7036     AC_LANG_POP([C++])
7038     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7039     AC_LANG_PUSH([C++])
7040     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7041             #include <cxxabi.h>
7042             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7043         ])], [
7044             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7045             AC_MSG_RESULT([yes])
7046         ], [AC_MSG_RESULT([no])])
7047     AC_LANG_POP([C++])
7049     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7050     AC_LANG_PUSH([C++])
7051     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7052             #include <cstddef>
7053             #include <cxxabi.h>
7054             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7055         ])], [
7056             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7057             AC_MSG_RESULT([yes])
7058         ], [AC_MSG_RESULT([no])])
7059     AC_LANG_POP([C++])
7061     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7062     AC_LANG_PUSH([C++])
7063     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7064             #include <cstddef>
7065             #include <cxxabi.h>
7066             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7067         ])], [
7068             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7069             AC_MSG_RESULT([yes])
7070         ], [AC_MSG_RESULT([no])])
7071     AC_LANG_POP([C++])
7073     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7074     AC_LANG_PUSH([C++])
7075     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7076             #include <cxxabi.h>
7077             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7078         ])], [
7079             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7080             AC_MSG_RESULT([yes])
7081         ], [AC_MSG_RESULT([no])])
7082     AC_LANG_POP([C++])
7084     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7085     AC_LANG_PUSH([C++])
7086     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7087             #include <cxxabi.h>
7088             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7089         ])], [
7090             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7091             AC_MSG_RESULT([yes])
7092         ], [AC_MSG_RESULT([no])])
7093     AC_LANG_POP([C++])
7095     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7096     AC_LANG_PUSH([C++])
7097     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7098             #include <cxxabi.h>
7099             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7100         ])], [
7101             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7102             AC_MSG_RESULT([yes])
7103         ], [AC_MSG_RESULT([no])])
7104     AC_LANG_POP([C++])
7106     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7107     AC_LANG_PUSH([C++])
7108     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7109             #include <cstddef>
7110             #include <cxxabi.h>
7111             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7112         ])], [
7113             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7114             AC_MSG_RESULT([yes])
7115         ], [AC_MSG_RESULT([no])])
7116     AC_LANG_POP([C++])
7118     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7119     AC_LANG_PUSH([C++])
7120     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7121             #include <cstddef>
7122             #include <cxxabi.h>
7123             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7124         ])], [
7125             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7126             AC_MSG_RESULT([yes])
7127         ], [AC_MSG_RESULT([no])])
7128     AC_LANG_POP([C++])
7131 AC_SUBST(HAVE_GCC_AVX)
7132 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7133 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7135 dnl ===================================================================
7136 dnl Identify the C++ library
7137 dnl ===================================================================
7139 AC_MSG_CHECKING([what the C++ library is])
7140 AC_LANG_PUSH([C++])
7141 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7142 #include <utility>
7143 #ifndef __GLIBCXX__
7144 foo bar
7145 #endif
7146 ]])],
7147     [CPP_LIBRARY=GLIBCXX
7148      cpp_library_name="GNU libstdc++"
7149     ],
7150     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7151 #include <utility>
7152 #ifndef _LIBCPP_VERSION
7153 foo bar
7154 #endif
7155 ]])],
7156     [CPP_LIBRARY=LIBCPP
7157      cpp_library_name="LLVM libc++"
7158      AC_DEFINE([HAVE_LIBCXX])
7159     ],
7160     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7161 #include <utility>
7162 #ifndef _MSC_VER
7163 foo bar
7164 #endif
7165 ]])],
7166     [CPP_LIBRARY=MSVCRT
7167      cpp_library_name="Microsoft"
7168     ],
7169     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7170 AC_MSG_RESULT([$cpp_library_name])
7171 AC_LANG_POP([C++])
7173 dnl ===================================================================
7174 dnl Check for gperf
7175 dnl ===================================================================
7176 AC_PATH_PROG(GPERF, gperf)
7177 if test -z "$GPERF"; then
7178     AC_MSG_ERROR([gperf not found but needed. Install it.])
7180 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7181     GPERF=`cygpath -m $GPERF`
7183 AC_MSG_CHECKING([whether gperf is new enough])
7184 my_gperf_ver1=$($GPERF --version | head -n 1)
7185 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7186 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7187 if test "$my_gperf_ver3" -ge 301; then
7188     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7189 else
7190     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7192 AC_SUBST(GPERF)
7194 dnl ===================================================================
7195 dnl Check for system libcmis
7196 dnl ===================================================================
7197 # libcmis requires curl and we can't build curl for iOS
7198 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7199     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7200     ENABLE_LIBCMIS=TRUE
7201 else
7202     ENABLE_LIBCMIS=
7204 AC_SUBST(ENABLE_LIBCMIS)
7206 dnl ===================================================================
7207 dnl C++11
7208 dnl ===================================================================
7210 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7211 CXXFLAGS_CXX11=
7212 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7213     if test "$with_latest_c__" = yes; then
7214         CXXFLAGS_CXX11=-std:c++latest
7215     else
7216         CXXFLAGS_CXX11=-std:c++17
7217     fi
7218     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7219 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7220     my_flags='-std=c++17 -std=c++1z'
7221     if test "$with_latest_c__" = yes; then
7222         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7223     fi
7224     for flag in $my_flags; do
7225         if test "$COM" = MSC; then
7226             flag="-Xclang $flag"
7227         fi
7228         save_CXXFLAGS=$CXXFLAGS
7229         CXXFLAGS="$CXXFLAGS $flag -Werror"
7230         if test "$SYSTEM_LIBCMIS" = TRUE; then
7231             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7232         fi
7233         AC_LANG_PUSH([C++])
7234         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7235             #include <algorithm>
7236             #include <functional>
7237             #include <vector>
7239             #if defined SYSTEM_LIBCMIS
7240             // See ucb/source/ucp/cmis/auth_provider.hxx:
7241             #if !defined __clang__
7242             #pragma GCC diagnostic push
7243             #pragma GCC diagnostic ignored "-Wdeprecated"
7244             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7245             #endif
7246             #include <libcmis/libcmis.hxx>
7247             #if !defined __clang__
7248             #pragma GCC diagnostic pop
7249             #endif
7250             #endif
7252             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7253                 std::sort(v.begin(), v.end(), fn);
7254             }
7255             ]])],[CXXFLAGS_CXX11=$flag])
7256         AC_LANG_POP([C++])
7257         CXXFLAGS=$save_CXXFLAGS
7258         if test -n "$CXXFLAGS_CXX11"; then
7259             break
7260         fi
7261     done
7263 if test -n "$CXXFLAGS_CXX11"; then
7264     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7265 else
7266     AC_MSG_ERROR(no)
7268 AC_SUBST(CXXFLAGS_CXX11)
7270 if test "$GCC" = "yes"; then
7271     save_CXXFLAGS=$CXXFLAGS
7272     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7273     CHECK_L_ATOMIC
7274     CXXFLAGS=$save_CXXFLAGS
7275     AC_SUBST(ATOMIC_LIB)
7278 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7279 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7280 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7281 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7282 dnl again towards 4.7.2:
7283 if test $CPP_LIBRARY = GLIBCXX; then
7284     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7285     AC_LANG_PUSH([C++])
7286     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7287 #include <list>
7288 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7289     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7290     //   GCC 4.7.0: 20120322
7291     //   GCC 4.7.1: 20120614
7292     // and using a range check is not possible as the mapping between
7293     // __GLIBCXX__ values and GCC versions is not monotonic
7294 /* ok */
7295 #else
7296 abi broken
7297 #endif
7298         ]])], [AC_MSG_RESULT(no, ok)],
7299         [AC_MSG_ERROR(yes)])
7300     AC_LANG_POP([C++])
7303 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7304 save_CXXFLAGS=$CXXFLAGS
7305 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7306 AC_LANG_PUSH([C++])
7308 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7309 #include <stddef.h>
7311 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7313 namespace
7315         struct b
7316         {
7317                 int i;
7318                 int j;
7319         };
7321 ]], [[
7322 struct a
7324         int i;
7325         int j;
7327 a thinga[]={{0,0}, {1,1}};
7328 b thingb[]={{0,0}, {1,1}};
7329 size_t i = sizeof(sal_n_array_size(thinga));
7330 size_t j = sizeof(sal_n_array_size(thingb));
7331 return !(i != 0 && j != 0);
7333     ], [ AC_MSG_RESULT(yes) ],
7334     [ AC_MSG_ERROR(no)])
7335 AC_LANG_POP([C++])
7336 CXXFLAGS=$save_CXXFLAGS
7338 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7339 if test "$GCC" = yes; then
7340     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7341     AC_LANG_PUSH([C++])
7342     save_CXXFLAGS=$CXXFLAGS
7343     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7344     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7345     CXXFLAGS=$save_CXXFLAGS
7346     AC_LANG_POP([C++])
7347     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7348         AC_MSG_RESULT([yes])
7349     else
7350         AC_MSG_RESULT([no])
7351     fi
7353 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7355 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
7356 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
7357 dnl from consteval constructor initializing const variable",
7358 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
7359 dnl expression' with consteval constructor", or <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
7360 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
7361 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'":
7362 AC_LANG_PUSH([C++])
7363 save_CXXFLAGS=$CXXFLAGS
7364 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7365 AC_RUN_IFELSE([AC_LANG_PROGRAM([
7366         struct S {
7367             consteval S() { i = 1; }
7368             int i = 0;
7369         };
7370         S const s;
7372         struct S1 { consteval S1(int) {} };
7373         struct S2 {
7374             S1 x;
7375             S2(): x(0) {}
7376         };
7378         struct S3 {
7379             consteval S3() {}
7380             union {
7381                 int a;
7382                 unsigned b = 0;
7383             };
7384         };
7385         void f() { S3(); }
7386     ], [
7387         return (s.i == 1) ? 0 : 1;
7388     ])], [
7389         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
7390         AC_MSG_RESULT([yes])
7391     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
7392 CXXFLAGS=$save_CXXFLAGS
7393 AC_LANG_POP([C++])
7395 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7396 AC_LANG_PUSH([C++])
7397 save_CXXFLAGS=$CXXFLAGS
7398 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7399 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7400         #include <algorithm>
7401         #include <initializer_list>
7402         #include <vector>
7403         template<typename T> class S {
7404         private:
7405             std::vector<T> v_;
7406         public:
7407             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7408         };
7409         constinit S<int> s{3, 2, 1};
7410     ])], [
7411         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7412         AC_MSG_RESULT([yes])
7413     ], [AC_MSG_RESULT([no])])
7414 CXXFLAGS=$save_CXXFLAGS
7415 AC_LANG_POP([C++])
7417 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7418 AC_LANG_PUSH([C++])
7419 save_CXXFLAGS=$CXXFLAGS
7420 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7421 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7422         #include <span>
7423         #include <type_traits>
7424         // Don't check size_type directly, as it was called index_type before P1872R0:
7425         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7426     ])], [
7427         AC_DEFINE([HAVE_CPP_SPAN],[1])
7428         AC_MSG_RESULT([yes])
7429     ], [AC_MSG_RESULT([no])])
7430 CXXFLAGS=$save_CXXFLAGS
7431 AC_LANG_POP([C++])
7433 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7434 AC_LANG_PUSH([C++])
7435 save_CXXFLAGS=$CXXFLAGS
7436 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7437 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7438         struct S1 { S1(S1 &&); };
7439         struct S2: S1 {};
7440         S1 f(S2 s) { return s; }
7441     ])], [
7442         AC_DEFINE([HAVE_P1155R3],[1])
7443         AC_MSG_RESULT([yes])
7444     ], [AC_MSG_RESULT([no])])
7445 CXXFLAGS=$save_CXXFLAGS
7446 AC_LANG_POP([C++])
7448 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7449 dnl which is included in -Wextra anyway):
7450 HAVE_WDEPRECATED_COPY_DTOR=
7451 if test "$GCC" = yes; then
7452     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7453     AC_LANG_PUSH([C++])
7454     save_CXXFLAGS=$CXXFLAGS
7455     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7456     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7457             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7458             AC_MSG_RESULT([yes])
7459         ], [AC_MSG_RESULT([no])])
7460     CXXFLAGS=$save_CXXFLAGS
7461     AC_LANG_POP([C++])
7463 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7465 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7466 dnl uninitialized warning for code like
7468 dnl   OString f();
7469 dnl   boost::optional<OString> * g(bool b) {
7470 dnl       boost::optional<OString> o;
7471 dnl       if (b) o = f();
7472 dnl       return new boost::optional<OString>(o);
7473 dnl   }
7475 dnl (as is e.g. present, in a slightly more elaborate form, in
7476 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7477 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7478 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7479 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7480     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7481     AC_LANG_PUSH([C++])
7482     save_CXXFLAGS=$CXXFLAGS
7483     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7484     if test "$ENABLE_OPTIMIZED" = TRUE; then
7485         CXXFLAGS="$CXXFLAGS -O2"
7486     else
7487         CXXFLAGS="$CXXFLAGS -O0"
7488     fi
7489     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7490             #include <new>
7491             void f1(int);
7492             struct S1 {
7493                 ~S1() { f1(n); }
7494                 int n = 0;
7495             };
7496             struct S2 {
7497                 S2() {}
7498                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7499                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7500                 void set(S1 s) {
7501                     new (stg) S1(s);
7502                     init = true;
7503                 }
7504                 bool init = false;
7505                 char stg[sizeof (S1)];
7506             } ;
7507             S1 f2();
7508             S2 * f3(bool b) {
7509                 S2 o;
7510                 if (b) o.set(f2());
7511                 return new S2(o);
7512             }
7513         ]])], [AC_MSG_RESULT([no])], [
7514             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7515             AC_MSG_RESULT([yes])
7516         ])
7517     CXXFLAGS=$save_CXXFLAGS
7518     AC_LANG_POP([C++])
7520 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7522 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7523 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7524 dnl hits us e.g. with GCC 10 and --enable-optimized at
7526 dnl   In file included from include/rtl/string.hxx:49,
7527 dnl                    from include/rtl/ustring.hxx:43,
7528 dnl                    from include/osl/file.hxx:35,
7529 dnl                    from include/codemaker/global.hxx:28,
7530 dnl                    from include/codemaker/options.hxx:23,
7531 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7532 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7533 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,
7534 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,
7535 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,
7536 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7537 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7538 dnl      78 |         memcpy( buffer, data, length );
7539 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7540 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7541 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7542     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7543     AC_LANG_PUSH([C++])
7544     save_CXXFLAGS=$CXXFLAGS
7545     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7546     if test "$ENABLE_OPTIMIZED" = TRUE; then
7547         CXXFLAGS="$CXXFLAGS -O2"
7548     else
7549         CXXFLAGS="$CXXFLAGS -O0"
7550     fi
7551     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7552     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7553             void fill(char const * begin, char const * end, char c);
7554             struct q {
7555                 char ids[4];
7556                 char username[6];
7557             };
7558             void test(q & c) {
7559                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7560                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7561             }
7562         ]])], [AC_MSG_RESULT([no])], [
7563             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7564             AC_MSG_RESULT([yes])
7565         ])
7566     CXXFLAGS=$save_CXXFLAGS
7567     AC_LANG_POP([C++])
7569 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7571 dnl ===================================================================
7572 dnl CPU Intrinsics support - SSE, AVX
7573 dnl ===================================================================
7575 CXXFLAGS_INTRINSICS_SSE2=
7576 CXXFLAGS_INTRINSICS_SSSE3=
7577 CXXFLAGS_INTRINSICS_SSE41=
7578 CXXFLAGS_INTRINSICS_SSE42=
7579 CXXFLAGS_INTRINSICS_AVX=
7580 CXXFLAGS_INTRINSICS_AVX2=
7581 CXXFLAGS_INTRINSICS_AVX512=
7582 CXXFLAGS_INTRINSICS_F16C=
7583 CXXFLAGS_INTRINSICS_FMA=
7585 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7586     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7587     flag_sse2=-msse2
7588     flag_ssse3=-mssse3
7589     flag_sse41=-msse4.1
7590     flag_sse42=-msse4.2
7591     flag_avx=-mavx
7592     flag_avx2=-mavx2
7593     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7594     flag_f16c=-mf16c
7595     flag_fma=-mfma
7596 else
7597     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7598     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7599     # SSE2 seems to be SSE2+.
7600     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7601     # is not empty (and can be tested in gbuild).
7602     flag_sse2=-arch:SSE2
7603     flag_ssse3=-arch:SSE2
7604     flag_sse41=-arch:SSE2
7605     flag_sse42=-arch:SSE2
7606     flag_avx=-arch:AVX
7607     flag_avx2=-arch:AVX2
7608     flag_avx512=-arch:AVX512
7609     # These are part of -arch:AVX2
7610     flag_f16c=-arch:AVX2
7611     flag_fma=-arch:AVX2
7614 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7615 AC_LANG_PUSH([C++])
7616 save_CXXFLAGS=$CXXFLAGS
7617 CXXFLAGS="$CXXFLAGS $flag_sse2"
7618 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7619     #include <emmintrin.h>
7620     int main () {
7621         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7622         c = _mm_xor_si128 (a, b);
7623         return 0;
7624     }
7625     ])],
7626     [can_compile_sse2=yes],
7627     [can_compile_sse2=no])
7628 AC_LANG_POP([C++])
7629 CXXFLAGS=$save_CXXFLAGS
7630 AC_MSG_RESULT([${can_compile_sse2}])
7631 if test "${can_compile_sse2}" = "yes" ; then
7632     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7635 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7636 AC_LANG_PUSH([C++])
7637 save_CXXFLAGS=$CXXFLAGS
7638 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7639 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7640     #include <tmmintrin.h>
7641     int main () {
7642         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7643         c = _mm_maddubs_epi16 (a, b);
7644         return 0;
7645     }
7646     ])],
7647     [can_compile_ssse3=yes],
7648     [can_compile_ssse3=no])
7649 AC_LANG_POP([C++])
7650 CXXFLAGS=$save_CXXFLAGS
7651 AC_MSG_RESULT([${can_compile_ssse3}])
7652 if test "${can_compile_ssse3}" = "yes" ; then
7653     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7656 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7657 AC_LANG_PUSH([C++])
7658 save_CXXFLAGS=$CXXFLAGS
7659 CXXFLAGS="$CXXFLAGS $flag_sse41"
7660 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7661     #include <smmintrin.h>
7662     int main () {
7663         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7664         c = _mm_cmpeq_epi64 (a, b);
7665         return 0;
7666     }
7667     ])],
7668     [can_compile_sse41=yes],
7669     [can_compile_sse41=no])
7670 AC_LANG_POP([C++])
7671 CXXFLAGS=$save_CXXFLAGS
7672 AC_MSG_RESULT([${can_compile_sse41}])
7673 if test "${can_compile_sse41}" = "yes" ; then
7674     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7677 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7678 AC_LANG_PUSH([C++])
7679 save_CXXFLAGS=$CXXFLAGS
7680 CXXFLAGS="$CXXFLAGS $flag_sse42"
7681 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7682     #include <nmmintrin.h>
7683     int main () {
7684         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7685         c = _mm_cmpgt_epi64 (a, b);
7686         return 0;
7687     }
7688     ])],
7689     [can_compile_sse42=yes],
7690     [can_compile_sse42=no])
7691 AC_LANG_POP([C++])
7692 CXXFLAGS=$save_CXXFLAGS
7693 AC_MSG_RESULT([${can_compile_sse42}])
7694 if test "${can_compile_sse42}" = "yes" ; then
7695     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7698 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7699 AC_LANG_PUSH([C++])
7700 save_CXXFLAGS=$CXXFLAGS
7701 CXXFLAGS="$CXXFLAGS $flag_avx"
7702 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7703     #include <immintrin.h>
7704     int main () {
7705         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7706         c = _mm256_xor_ps(a, b);
7707         return 0;
7708     }
7709     ])],
7710     [can_compile_avx=yes],
7711     [can_compile_avx=no])
7712 AC_LANG_POP([C++])
7713 CXXFLAGS=$save_CXXFLAGS
7714 AC_MSG_RESULT([${can_compile_avx}])
7715 if test "${can_compile_avx}" = "yes" ; then
7716     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7719 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7720 AC_LANG_PUSH([C++])
7721 save_CXXFLAGS=$CXXFLAGS
7722 CXXFLAGS="$CXXFLAGS $flag_avx2"
7723 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7724     #include <immintrin.h>
7725     int main () {
7726         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7727         c = _mm256_maddubs_epi16(a, b);
7728         return 0;
7729     }
7730     ])],
7731     [can_compile_avx2=yes],
7732     [can_compile_avx2=no])
7733 AC_LANG_POP([C++])
7734 CXXFLAGS=$save_CXXFLAGS
7735 AC_MSG_RESULT([${can_compile_avx2}])
7736 if test "${can_compile_avx2}" = "yes" ; then
7737     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7740 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7741 AC_LANG_PUSH([C++])
7742 save_CXXFLAGS=$CXXFLAGS
7743 CXXFLAGS="$CXXFLAGS $flag_avx512"
7744 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7745     #include <immintrin.h>
7746     int main () {
7747         __m512i a = _mm512_loadu_si512(0);
7748         return 0;
7749     }
7750     ])],
7751     [can_compile_avx512=yes],
7752     [can_compile_avx512=no])
7753 AC_LANG_POP([C++])
7754 CXXFLAGS=$save_CXXFLAGS
7755 AC_MSG_RESULT([${can_compile_avx512}])
7756 if test "${can_compile_avx512}" = "yes" ; then
7757     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7760 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7761 AC_LANG_PUSH([C++])
7762 save_CXXFLAGS=$CXXFLAGS
7763 CXXFLAGS="$CXXFLAGS $flag_f16c"
7764 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7765     #include <immintrin.h>
7766     int main () {
7767         __m128i a = _mm_set1_epi32 (0);
7768         __m128 c;
7769         c = _mm_cvtph_ps(a);
7770         return 0;
7771     }
7772     ])],
7773     [can_compile_f16c=yes],
7774     [can_compile_f16c=no])
7775 AC_LANG_POP([C++])
7776 CXXFLAGS=$save_CXXFLAGS
7777 AC_MSG_RESULT([${can_compile_f16c}])
7778 if test "${can_compile_f16c}" = "yes" ; then
7779     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7782 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7783 AC_LANG_PUSH([C++])
7784 save_CXXFLAGS=$CXXFLAGS
7785 CXXFLAGS="$CXXFLAGS $flag_fma"
7786 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7787     #include <immintrin.h>
7788     int main () {
7789         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7790         d = _mm256_fmadd_ps(a, b, c);
7791         return 0;
7792     }
7793     ])],
7794     [can_compile_fma=yes],
7795     [can_compile_fma=no])
7796 AC_LANG_POP([C++])
7797 CXXFLAGS=$save_CXXFLAGS
7798 AC_MSG_RESULT([${can_compile_fma}])
7799 if test "${can_compile_fma}" = "yes" ; then
7800     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7803 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7804 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7805 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7806 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7807 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7808 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7809 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7810 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7811 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7813 dnl ===================================================================
7814 dnl system stl sanity tests
7815 dnl ===================================================================
7816 if test "$_os" != "WINNT"; then
7818     AC_LANG_PUSH([C++])
7820     save_CPPFLAGS="$CPPFLAGS"
7821     if test -n "$MACOSX_SDK_PATH"; then
7822         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7823     fi
7825     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7826     # only.
7827     if test "$CPP_LIBRARY" = GLIBCXX; then
7828         dnl gcc#19664, gcc#22482, rhbz#162935
7829         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7830         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7831         AC_MSG_RESULT([$stlvisok])
7832         if test "$stlvisok" = "no"; then
7833             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7834         fi
7835     fi
7837     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7838     # when we don't make any dynamic libraries?
7839     if test "$DISABLE_DYNLOADING" = ""; then
7840         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7841         cat > conftestlib1.cc <<_ACEOF
7842 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7843 struct S2: S1<int> { virtual ~S2(); };
7844 S2::~S2() {}
7845 _ACEOF
7846         cat > conftestlib2.cc <<_ACEOF
7847 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7848 struct S2: S1<int> { virtual ~S2(); };
7849 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7850 _ACEOF
7851         gccvisinlineshiddenok=yes
7852         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7853             gccvisinlineshiddenok=no
7854         else
7855             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7856             dnl known to not work with -z defs (unsetting which makes the test
7857             dnl moot, though):
7858             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7859             if test "$COM_IS_CLANG" = TRUE; then
7860                 for i in $CXX $CXXFLAGS; do
7861                     case $i in
7862                     -fsanitize=*)
7863                         my_linkflagsnoundefs=
7864                         break
7865                         ;;
7866                     esac
7867                 done
7868             fi
7869             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7870                 gccvisinlineshiddenok=no
7871             fi
7872         fi
7874         rm -fr libconftest*
7875         AC_MSG_RESULT([$gccvisinlineshiddenok])
7876         if test "$gccvisinlineshiddenok" = "no"; then
7877             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7878         fi
7879     fi
7881    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7882     cat >visibility.cxx <<_ACEOF
7883 #pragma GCC visibility push(hidden)
7884 struct __attribute__ ((visibility ("default"))) TestStruct {
7885   static void Init();
7887 __attribute__ ((visibility ("default"))) void TestFunc() {
7888   TestStruct::Init();
7890 _ACEOF
7891     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7892         gccvisbroken=yes
7893     else
7894         case "$host_cpu" in
7895         i?86|x86_64)
7896             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7897                 gccvisbroken=no
7898             else
7899                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7900                     gccvisbroken=no
7901                 else
7902                     gccvisbroken=yes
7903                 fi
7904             fi
7905             ;;
7906         *)
7907             gccvisbroken=no
7908             ;;
7909         esac
7910     fi
7911     rm -f visibility.s visibility.cxx
7913     AC_MSG_RESULT([$gccvisbroken])
7914     if test "$gccvisbroken" = "yes"; then
7915         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7916     fi
7918     CPPFLAGS="$save_CPPFLAGS"
7920     AC_LANG_POP([C++])
7923 dnl ===================================================================
7924 dnl  Clang++ tests
7925 dnl ===================================================================
7927 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
7928 if test "$GCC" = "yes"; then
7929     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
7930     AC_LANG_PUSH([C++])
7931     save_CXXFLAGS=$CXXFLAGS
7932     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
7933     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
7934     CXXFLAGS=$save_CXXFLAGS
7935     AC_LANG_POP([C++])
7936     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
7937         AC_MSG_RESULT([yes])
7938     else
7939         AC_MSG_RESULT([no])
7940     fi
7942 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
7944 dnl ===================================================================
7945 dnl Compiler plugins
7946 dnl ===================================================================
7948 COMPILER_PLUGINS=
7949 # currently only Clang
7951 if test "$COM_IS_CLANG" != "TRUE"; then
7952     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
7953         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
7954         enable_compiler_plugins=no
7955     fi
7958 COMPILER_PLUGINS_COM_IS_CLANG=
7959 if test "$COM_IS_CLANG" = "TRUE"; then
7960     if test -n "$enable_compiler_plugins"; then
7961         compiler_plugins="$enable_compiler_plugins"
7962     elif test -n "$ENABLE_DBGUTIL"; then
7963         compiler_plugins=test
7964     else
7965         compiler_plugins=no
7966     fi
7967     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
7968         if test "$CLANGVER" -lt 50002; then
7969             if test "$compiler_plugins" = yes; then
7970                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
7971             else
7972                 compiler_plugins=no
7973             fi
7974         fi
7975     fi
7976     if test "$compiler_plugins" != "no"; then
7977         dnl The prefix where Clang resides, override to where Clang resides if
7978         dnl using a source build:
7979         if test -z "$CLANGDIR"; then
7980             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
7981         fi
7982         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
7983         if test -z "$COMPILER_PLUGINS_CXX"; then
7984             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
7985         fi
7986         clangbindir=$CLANGDIR/bin
7987         if test "$build_os" = "cygwin"; then
7988             clangbindir=$(cygpath -u "$clangbindir")
7989         fi
7990         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
7991         if test -n "$LLVM_CONFIG"; then
7992             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
7993             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
7994             if test -z "$CLANGLIBDIR"; then
7995                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
7996             fi
7997             # Try if clang is built from source (in which case its includes are not together with llvm includes).
7998             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
7999             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8000             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8001                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8002             fi
8003             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8004             clangobjdir=$($LLVM_CONFIG --obj-root)
8005             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8006                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8007             fi
8008         fi
8009         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8010         AC_LANG_PUSH([C++])
8011         save_CXX=$CXX
8012         save_CXXCPP=$CXXCPP
8013         save_CPPFLAGS=$CPPFLAGS
8014         save_CXXFLAGS=$CXXFLAGS
8015         save_LDFLAGS=$LDFLAGS
8016         save_LIBS=$LIBS
8017         CXX=$COMPILER_PLUGINS_CXX
8018         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8019         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8020         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8021         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8022             [COMPILER_PLUGINS=TRUE],
8023             [
8024             if test "$compiler_plugins" = "yes"; then
8025                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8026             else
8027                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8028                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8029             fi
8030             ])
8031         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8032         dnl comment in compilerplugins/Makefile-clang.mk:
8033         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8034             LDFLAGS=""
8035             AC_MSG_CHECKING([for clang libraries to use])
8036             if test -z "$CLANGTOOLLIBS"; then
8037                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8038  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8039                 AC_LINK_IFELSE([
8040                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8041                         [[ clang::FullSourceLoc().dump(); ]])
8042                 ],[CLANGTOOLLIBS="$LIBS"],[])
8043             fi
8044             if test -z "$CLANGTOOLLIBS"; then
8045                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8046                 AC_LINK_IFELSE([
8047                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8048                         [[ clang::FullSourceLoc().dump(); ]])
8049                 ],[CLANGTOOLLIBS="$LIBS"],[])
8050             fi
8051             AC_MSG_RESULT([$CLANGTOOLLIBS])
8052             if test -z "$CLANGTOOLLIBS"; then
8053                 if test "$compiler_plugins" = "yes"; then
8054                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8055                 else
8056                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8057                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8058                 fi
8059                 COMPILER_PLUGINS=
8060             fi
8061             if test -n "$COMPILER_PLUGINS"; then
8062                 if test -z "$CLANGSYSINCLUDE"; then
8063                     if test -n "$LLVM_CONFIG"; then
8064                         # Path to the clang system headers (no idea if there's a better way to get it).
8065                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8066                     fi
8067                 fi
8068             fi
8069         fi
8070         CXX=$save_CXX
8071         CXXCPP=$save_CXXCPP
8072         CPPFLAGS=$save_CPPFLAGS
8073         CXXFLAGS=$save_CXXFLAGS
8074         LDFLAGS=$save_LDFLAGS
8075         LIBS="$save_LIBS"
8076         AC_LANG_POP([C++])
8078         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8079         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8080             #ifndef __clang__
8081             you lose
8082             #endif
8083             int foo=42;
8084             ]])],
8085             [AC_MSG_RESULT([yes])
8086              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8087             [AC_MSG_RESULT([no])])
8088         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8089     fi
8090 else
8091     if test "$enable_compiler_plugins" = "yes"; then
8092         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8093     fi
8095 COMPILER_PLUGINS_ANALYZER_PCH=
8096 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8097     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8099 AC_SUBST(COMPILER_PLUGINS)
8100 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8101 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8102 AC_SUBST(COMPILER_PLUGINS_CXX)
8103 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8104 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8105 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8106 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8107 AC_SUBST(CLANGDIR)
8108 AC_SUBST(CLANGLIBDIR)
8109 AC_SUBST(CLANGTOOLLIBS)
8110 AC_SUBST(CLANGSYSINCLUDE)
8112 # Plugin to help linker.
8113 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8114 # This makes --enable-lto build with clang work.
8115 AC_SUBST(LD_PLUGIN)
8117 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8118 AC_SUBST(HAVE_POSIX_FALLOCATE)
8120 JITC_PROCESSOR_TYPE=""
8121 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8122     # IBMs JDK needs this...
8123     JITC_PROCESSOR_TYPE=6
8124     export JITC_PROCESSOR_TYPE
8126 AC_SUBST([JITC_PROCESSOR_TYPE])
8128 # Misc Windows Stuff
8129 AC_ARG_WITH(ucrt-dir,
8130     AS_HELP_STRING([--with-ucrt-dir],
8131         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8132         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8133         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8134             Windows6.1-KB2999226-x64.msu
8135             Windows6.1-KB2999226-x86.msu
8136             Windows8.1-KB2999226-x64.msu
8137             Windows8.1-KB2999226-x86.msu
8138             Windows8-RT-KB2999226-x64.msu
8139             Windows8-RT-KB2999226-x86.msu
8140         A zip archive including those files is available from Microsoft site:
8141         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8144 UCRT_REDISTDIR="$with_ucrt_dir"
8145 if test $_os = "WINNT"; then
8146     find_msvc_x64_dlls
8147     for i in $PKGFORMAT; do
8148         if test "$i" = msi; then
8149             find_msms
8150             break
8151         fi
8152     done
8153     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8154     MSVC_DLLS="$msvcdlls"
8155     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8156     # MSVC 15.3 changed it to VC141
8157     if echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8158         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8159     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8160         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8161     else
8162         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8163     fi
8165     if test "$UCRT_REDISTDIR" = "no"; then
8166         dnl explicitly disabled
8167         UCRT_REDISTDIR=""
8168     else
8169         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8170                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8171                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8172                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8173                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8174                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8175             UCRT_REDISTDIR=""
8176             if test -n "$PKGFORMAT"; then
8177                for i in $PKGFORMAT; do
8178                    case "$i" in
8179                    msi)
8180                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8181                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8182                        ;;
8183                    esac
8184                done
8185             fi
8186         fi
8187     fi
8190 AC_SUBST(UCRT_REDISTDIR)
8191 AC_SUBST(MSVC_DLL_PATH)
8192 AC_SUBST(MSVC_DLLS)
8193 AC_SUBST(MSM_PATH)
8196 dnl ===================================================================
8197 dnl Checks for Java
8198 dnl ===================================================================
8199 if test "$ENABLE_JAVA" != ""; then
8201     # Windows-specific tests
8202     if test "$build_os" = "cygwin"; then
8203         if test -z "$with_jdk_home"; then
8204             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8205             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8206             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8207             if test -n "$regvalue"; then
8208                 ver=$regvalue
8209                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8210                 with_jdk_home=$regvalue
8211             fi
8212             howfound="found automatically"
8213         else
8214             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8215             howfound="you passed"
8216         fi
8218         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8219             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])
8220         fi
8221     fi
8223     # 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.
8224     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8225     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8226         with_jdk_home=`/usr/libexec/java_home`
8227     fi
8229     JAVA_HOME=; export JAVA_HOME
8230     if test -z "$with_jdk_home"; then
8231         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8232     else
8233         _java_path="$with_jdk_home/bin/$with_java"
8234         dnl Check if there is a Java interpreter at all.
8235         if test -x "$_java_path"; then
8236             JAVAINTERPRETER=$_java_path
8237         else
8238             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8239         fi
8240     fi
8242     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8243     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8244     dnl loaded by java to run JunitTests:
8245     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8246         shortjdkhome=`cygpath -d "$with_jdk_home"`
8247         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
8248             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8249             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8250         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
8251             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8252             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8253         fi
8255         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8256             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8257         fi
8258         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8259     elif test "$cross_compiling" != "yes"; then
8260         case $CPUNAME in
8261             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8262                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8263                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8264                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8265                 fi
8266                 ;;
8267             *) # assumption: everything else 32-bit
8268                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8269                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8270                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8271                 fi
8272                 ;;
8273         esac
8274     fi
8277 dnl ===================================================================
8278 dnl Checks for JDK.
8279 dnl ===================================================================
8281 # Whether all the complexity here actually is needed any more or not, no idea.
8283 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8284     _gij_longver=0
8285     AC_MSG_CHECKING([the installed JDK])
8286     if test -n "$JAVAINTERPRETER"; then
8287         dnl java -version sends output to stderr!
8288         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8289             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8290         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8291             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8292         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8293             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8294         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8295             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8296         else
8297             JDK=sun
8299             dnl Sun JDK specific tests
8300             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8301             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8303             if test "$_jdk_ver" -lt 10900; then
8304                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8305             fi
8306             if test "$_jdk_ver" -gt 10900; then
8307                 JAVA_CLASSPATH_NOT_SET=TRUE
8308             fi
8310             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8311             if test "$_os" = "WINNT"; then
8312                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8313             fi
8314             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8316             # set to limit VM usage for JunitTests
8317             JAVAIFLAGS=-Xmx64M
8318             # set to limit VM usage for javac
8319             JAVACFLAGS=-J-Xmx128M
8320         fi
8321     else
8322         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8323     fi
8324 else
8325     if test -z "$ENABLE_JAVA"; then
8326         dnl Java disabled
8327         JAVA_HOME=
8328         export JAVA_HOME
8329     elif test "$cross_compiling" = "yes"; then
8330         # Just assume compatibility of build and host JDK
8331         JDK=$JDK_FOR_BUILD
8332         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8333     fi
8336 dnl ===================================================================
8337 dnl Checks for javac
8338 dnl ===================================================================
8339 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8340     javacompiler="javac"
8341     : ${JAVA_SOURCE_VER=8}
8342     : ${JAVA_TARGET_VER=8}
8343     if test -z "$with_jdk_home"; then
8344         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8345     else
8346         _javac_path="$with_jdk_home/bin/$javacompiler"
8347         dnl Check if there is a Java compiler at all.
8348         if test -x "$_javac_path"; then
8349             JAVACOMPILER=$_javac_path
8350         fi
8351     fi
8352     if test -z "$JAVACOMPILER"; then
8353         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8354     fi
8355     if test "$build_os" = "cygwin"; then
8356         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8357             JAVACOMPILER="${JAVACOMPILER}.exe"
8358         fi
8359         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8360     fi
8363 dnl ===================================================================
8364 dnl Checks for javadoc
8365 dnl ===================================================================
8366 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8367     if test -z "$with_jdk_home"; then
8368         AC_PATH_PROG(JAVADOC, javadoc)
8369     else
8370         _javadoc_path="$with_jdk_home/bin/javadoc"
8371         dnl Check if there is a javadoc at all.
8372         if test -x "$_javadoc_path"; then
8373             JAVADOC=$_javadoc_path
8374         else
8375             AC_PATH_PROG(JAVADOC, javadoc)
8376         fi
8377     fi
8378     if test -z "$JAVADOC"; then
8379         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8380     fi
8381     if test "$build_os" = "cygwin"; then
8382         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8383             JAVADOC="${JAVADOC}.exe"
8384         fi
8385         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8386     fi
8388     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8389     JAVADOCISGJDOC="yes"
8390     fi
8392 AC_SUBST(JAVADOC)
8393 AC_SUBST(JAVADOCISGJDOC)
8395 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8396     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8397     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8398         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8399            # try to recover first by looking whether we have an alternative
8400            # system as in Debian or newer SuSEs where following /usr/bin/javac
8401            # over /etc/alternatives/javac leads to the right bindir where we
8402            # just need to strip a bit away to get a valid JAVA_HOME
8403            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8404         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8405             # maybe only one level of symlink (e.g. on Mac)
8406             JAVA_HOME=$(readlink $JAVACOMPILER)
8407             if test "$(dirname $JAVA_HOME)" = "."; then
8408                 # we've got no path to trim back
8409                 JAVA_HOME=""
8410             fi
8411         else
8412             # else warn
8413             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8414             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8415             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8416             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8417         fi
8418         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8419         if test "$JAVA_HOME" != "/usr"; then
8420             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8421                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8422                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8423                 dnl Tiger already returns a JDK path...
8424                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8425             else
8426                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8427                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8428                 dnl that checks which version to run
8429                 if test -f "$JAVA_HOME"; then
8430                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8431                 fi
8432             fi
8433         fi
8434     fi
8435     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8437     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8438     if test -z "$JAVA_HOME"; then
8439         if test "x$with_jdk_home" = "x"; then
8440             cat > findhome.java <<_ACEOF
8441 [import java.io.File;
8443 class findhome
8445     public static void main(String args[])
8446     {
8447         String jrelocation = System.getProperty("java.home");
8448         File jre = new File(jrelocation);
8449         System.out.println(jre.getParent());
8450     }
8452 _ACEOF
8453             AC_MSG_CHECKING([if javac works])
8454             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8455             AC_TRY_EVAL(javac_cmd)
8456             if test $? = 0 -a -f ./findhome.class; then
8457                 AC_MSG_RESULT([javac works])
8458             else
8459                 echo "configure: javac test failed" >&5
8460                 cat findhome.java >&5
8461                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8462             fi
8463             AC_MSG_CHECKING([if gij knows its java.home])
8464             JAVA_HOME=`$JAVAINTERPRETER findhome`
8465             if test $? = 0 -a "$JAVA_HOME" != ""; then
8466                 AC_MSG_RESULT([$JAVA_HOME])
8467             else
8468                 echo "configure: java test failed" >&5
8469                 cat findhome.java >&5
8470                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8471             fi
8472             # clean-up after ourselves
8473             rm -f ./findhome.java ./findhome.class
8474         else
8475             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8476         fi
8477     fi
8479     # now check if $JAVA_HOME is really valid
8480     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8481         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8482             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8483             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8484             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8485             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8486             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8487             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8488         fi
8489     fi
8490     PathFormat "$JAVA_HOME"
8491     JAVA_HOME="$formatted_path"
8494 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8495     "$_os" != Darwin
8496 then
8497     AC_MSG_CHECKING([for JAWT lib])
8498     if test "$_os" = WINNT; then
8499         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8500         JAWTLIB=jawt.lib
8501     else
8502         case "$host_cpu" in
8503         arm*)
8504             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8505             JAVA_ARCH=$my_java_arch
8506             ;;
8507         i*86)
8508             my_java_arch=i386
8509             ;;
8510         m68k)
8511             my_java_arch=m68k
8512             ;;
8513         powerpc)
8514             my_java_arch=ppc
8515             ;;
8516         powerpc64)
8517             my_java_arch=ppc64
8518             ;;
8519         powerpc64le)
8520             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8521             JAVA_ARCH=$my_java_arch
8522             ;;
8523         sparc64)
8524             my_java_arch=sparcv9
8525             ;;
8526         x86_64)
8527             my_java_arch=amd64
8528             ;;
8529         *)
8530             my_java_arch=$host_cpu
8531             ;;
8532         esac
8533         # This is where JDK9 puts the library
8534         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8535             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8536         else
8537             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8538         fi
8539         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8540     fi
8541     AC_MSG_RESULT([$JAWTLIB])
8543 AC_SUBST(JAWTLIB)
8545 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8546     case "$host_os" in
8548     aix*)
8549         JAVAINC="-I$JAVA_HOME/include"
8550         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8551         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8552         ;;
8554     cygwin*|wsl*)
8555         JAVAINC="-I$JAVA_HOME/include/win32"
8556         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8557         ;;
8559     darwin*|macos*)
8560         if test -d "$JAVA_HOME/include/darwin"; then
8561             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8562         else
8563             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8564         fi
8565         ;;
8567     dragonfly*)
8568         JAVAINC="-I$JAVA_HOME/include"
8569         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8570         ;;
8572     freebsd*)
8573         JAVAINC="-I$JAVA_HOME/include"
8574         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8575         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8576         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8577         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8578         ;;
8580     k*bsd*-gnu*)
8581         JAVAINC="-I$JAVA_HOME/include"
8582         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8583         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8584         ;;
8586     linux-gnu*)
8587         JAVAINC="-I$JAVA_HOME/include"
8588         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8589         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8590         ;;
8592     *netbsd*)
8593         JAVAINC="-I$JAVA_HOME/include"
8594         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8595         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8596        ;;
8598     openbsd*)
8599         JAVAINC="-I$JAVA_HOME/include"
8600         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8601         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8602         ;;
8604     solaris*)
8605         JAVAINC="-I$JAVA_HOME/include"
8606         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8607         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8608         ;;
8609     esac
8611 SOLARINC="$SOLARINC $JAVAINC"
8613 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8614     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8615     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8616     JDK_FOR_BUILD=$JDK
8619 AC_SUBST(JAVACFLAGS)
8620 AC_SUBST(JAVACOMPILER)
8621 AC_SUBST(JAVAINTERPRETER)
8622 AC_SUBST(JAVAIFLAGS)
8623 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8624 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8625 AC_SUBST(JAVA_HOME)
8626 AC_SUBST(JAVA_HOME_FOR_BUILD)
8627 AC_SUBST(JDK)
8628 AC_SUBST(JDK_FOR_BUILD)
8629 AC_SUBST(JAVA_SOURCE_VER)
8630 AC_SUBST(JAVA_TARGET_VER)
8633 dnl ===================================================================
8634 dnl Export file validation
8635 dnl ===================================================================
8636 AC_MSG_CHECKING([whether to enable export file validation])
8637 if test "$with_export_validation" != "no"; then
8638     if test -z "$ENABLE_JAVA"; then
8639         if test "$with_export_validation" = "yes"; then
8640             AC_MSG_ERROR([requested, but Java is disabled])
8641         else
8642             AC_MSG_RESULT([no, as Java is disabled])
8643         fi
8644     elif ! test -d "${SRC_ROOT}/schema"; then
8645         if test "$with_export_validation" = "yes"; then
8646             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8647         else
8648             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8649         fi
8650     else
8651         AC_MSG_RESULT([yes])
8652         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8654         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8655         if test -z "$ODFVALIDATOR"; then
8656             # remember to download the ODF toolkit with validator later
8657             AC_MSG_NOTICE([no odfvalidator found, will download it])
8658             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8659             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8661             # and fetch name of odfvalidator jar name from download.lst
8662             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8663             AC_SUBST(ODFVALIDATOR_JAR)
8665             if test -z "$ODFVALIDATOR_JAR"; then
8666                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8667             fi
8668         fi
8669         if test "$build_os" = "cygwin"; then
8670             # In case of Cygwin it will be executed from Windows,
8671             # so we need to run bash and absolute path to validator
8672             # so instead of "odfvalidator" it will be
8673             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8674             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8675         else
8676             ODFVALIDATOR="sh $ODFVALIDATOR"
8677         fi
8678         AC_SUBST(ODFVALIDATOR)
8681         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8682         if test -z "$OFFICEOTRON"; then
8683             # remember to download the officeotron with validator later
8684             AC_MSG_NOTICE([no officeotron found, will download it])
8685             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8686             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8688             # and fetch name of officeotron jar name from download.lst
8689             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8690             AC_SUBST(OFFICEOTRON_JAR)
8692             if test -z "$OFFICEOTRON_JAR"; then
8693                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8694             fi
8695         else
8696             # check version of existing officeotron
8697             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8698             if test 0"$OFFICEOTRON_VER" -lt 704; then
8699                 AC_MSG_ERROR([officeotron too old])
8700             fi
8701         fi
8702         if test "$build_os" = "cygwin"; then
8703             # In case of Cygwin it will be executed from Windows,
8704             # so we need to run bash and absolute path to validator
8705             # so instead of "odfvalidator" it will be
8706             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8707             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8708         else
8709             OFFICEOTRON="sh $OFFICEOTRON"
8710         fi
8711     fi
8712     AC_SUBST(OFFICEOTRON)
8713 else
8714     AC_MSG_RESULT([no])
8717 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8718 if test "$with_bffvalidator" != "no"; then
8719     AC_DEFINE(HAVE_BFFVALIDATOR)
8721     if test "$with_export_validation" = "no"; then
8722         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8723     fi
8725     if test "$with_bffvalidator" = "yes"; then
8726         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8727     else
8728         BFFVALIDATOR="$with_bffvalidator"
8729     fi
8731     if test "$build_os" = "cygwin"; then
8732         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8733             AC_MSG_RESULT($BFFVALIDATOR)
8734         else
8735             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8736         fi
8737     elif test -n "$BFFVALIDATOR"; then
8738         # We are not in Cygwin but need to run Windows binary with wine
8739         AC_PATH_PROGS(WINE, wine)
8741         # so swap in a shell wrapper that converts paths transparently
8742         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8743         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8744         AC_SUBST(BFFVALIDATOR_EXE)
8745         AC_MSG_RESULT($BFFVALIDATOR)
8746     else
8747         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8748     fi
8749     AC_SUBST(BFFVALIDATOR)
8750 else
8751     AC_MSG_RESULT([no])
8754 dnl ===================================================================
8755 dnl Check for C preprocessor to use
8756 dnl ===================================================================
8757 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8758 if test -n "$with_idlc_cpp"; then
8759     AC_MSG_RESULT([$with_idlc_cpp])
8760     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8761 else
8762     AC_MSG_RESULT([ucpp])
8763     AC_MSG_CHECKING([which ucpp tp use])
8764     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8765         AC_MSG_RESULT([external])
8766         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8767     else
8768         AC_MSG_RESULT([internal])
8769         BUILD_TYPE="$BUILD_TYPE UCPP"
8770     fi
8772 AC_SUBST(SYSTEM_UCPP)
8774 dnl ===================================================================
8775 dnl Check for epm (not needed for Windows)
8776 dnl ===================================================================
8777 AC_MSG_CHECKING([whether to enable EPM for packing])
8778 if test "$enable_epm" = "yes"; then
8779     AC_MSG_RESULT([yes])
8780     if test "$_os" != "WINNT"; then
8781         if test $_os = Darwin; then
8782             EPM=internal
8783         elif test -n "$with_epm"; then
8784             EPM=$with_epm
8785         else
8786             AC_PATH_PROG(EPM, epm, no)
8787         fi
8788         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8789             AC_MSG_NOTICE([EPM will be built.])
8790             BUILD_TYPE="$BUILD_TYPE EPM"
8791             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8792         else
8793             # Gentoo has some epm which is something different...
8794             AC_MSG_CHECKING([whether the found epm is the right epm])
8795             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8796                 AC_MSG_RESULT([yes])
8797             else
8798                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8799             fi
8800             AC_MSG_CHECKING([epm version])
8801             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8802             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8803                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8804                 AC_MSG_RESULT([OK, >= 3.7])
8805             else
8806                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8807                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8808             fi
8809         fi
8810     fi
8812     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8813         AC_MSG_CHECKING([for rpm])
8814         for a in "$RPM" rpmbuild rpm; do
8815             $a --usage >/dev/null 2> /dev/null
8816             if test $? -eq 0; then
8817                 RPM=$a
8818                 break
8819             else
8820                 $a --version >/dev/null 2> /dev/null
8821                 if test $? -eq 0; then
8822                     RPM=$a
8823                     break
8824                 fi
8825             fi
8826         done
8827         if test -z "$RPM"; then
8828             AC_MSG_ERROR([not found])
8829         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8830             RPM_PATH=`which $RPM`
8831             AC_MSG_RESULT([$RPM_PATH])
8832             SCPDEFS="$SCPDEFS -DWITH_RPM"
8833         else
8834             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8835         fi
8836     fi
8837     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8838         AC_PATH_PROG(DPKG, dpkg, no)
8839         if test "$DPKG" = "no"; then
8840             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8841         fi
8842     fi
8843     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8844        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8845         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8846             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8847                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8848                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8849                     AC_MSG_RESULT([yes])
8850                 else
8851                     AC_MSG_RESULT([no])
8852                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8853                         _pt="rpm"
8854                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8855                         add_warning "the rpms will need to be installed with --nodeps"
8856                     else
8857                         _pt="pkg"
8858                     fi
8859                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8860                     add_warning "the ${_pt}s will not be relocatable"
8861                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8862                                  relocation will work, you need to patch your epm with the
8863                                  patch in epm/epm-3.7.patch or build with
8864                                  --with-epm=internal which will build a suitable epm])
8865                 fi
8866             fi
8867         fi
8868     fi
8869     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8870         AC_PATH_PROG(PKGMK, pkgmk, no)
8871         if test "$PKGMK" = "no"; then
8872             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8873         fi
8874     fi
8875     AC_SUBST(RPM)
8876     AC_SUBST(DPKG)
8877     AC_SUBST(PKGMK)
8878 else
8879     for i in $PKGFORMAT; do
8880         case "$i" in
8881         aix | bsd | deb | pkg | rpm | native | portable)
8882             AC_MSG_ERROR(
8883                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8884             ;;
8885         esac
8886     done
8887     AC_MSG_RESULT([no])
8888     EPM=NO
8890 AC_SUBST(EPM)
8892 ENABLE_LWP=
8893 if test "$enable_lotuswordpro" = "yes"; then
8894     ENABLE_LWP="TRUE"
8896 AC_SUBST(ENABLE_LWP)
8898 dnl ===================================================================
8899 dnl Check for building ODK
8900 dnl ===================================================================
8901 if test "$enable_odk" != yes; then
8902     unset DOXYGEN
8903 else
8904     if test "$with_doxygen" = no; then
8905         AC_MSG_CHECKING([for doxygen])
8906         unset DOXYGEN
8907         AC_MSG_RESULT([no])
8908     else
8909         if test "$with_doxygen" = yes; then
8910             AC_PATH_PROG([DOXYGEN], [doxygen])
8911             if test -z "$DOXYGEN"; then
8912                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
8913             fi
8914             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
8915                 if ! dot -V 2>/dev/null; then
8916                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
8917                 fi
8918             fi
8919         else
8920             AC_MSG_CHECKING([for doxygen])
8921             DOXYGEN=$with_doxygen
8922             AC_MSG_RESULT([$DOXYGEN])
8923         fi
8924         if test -n "$DOXYGEN"; then
8925             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
8926             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
8927             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
8928                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
8929             fi
8930         fi
8931     fi
8933 AC_SUBST([DOXYGEN])
8935 AC_MSG_CHECKING([whether to build the ODK])
8936 if test "$enable_odk" = yes; then
8937     AC_MSG_RESULT([yes])
8938     BUILD_TYPE="$BUILD_TYPE ODK"
8939 else
8940     AC_MSG_RESULT([no])
8943 dnl ===================================================================
8944 dnl Check for system zlib
8945 dnl ===================================================================
8946 if test "$with_system_zlib" = "auto"; then
8947     case "$_os" in
8948     WINNT)
8949         with_system_zlib="$with_system_libs"
8950         ;;
8951     *)
8952         if test "$enable_fuzzers" != "yes"; then
8953             with_system_zlib=yes
8954         else
8955             with_system_zlib=no
8956         fi
8957         ;;
8958     esac
8961 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
8962 dnl and has no pkg-config for it at least on some tinderboxes,
8963 dnl so leaving that out for now
8964 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
8965 AC_MSG_CHECKING([which zlib to use])
8966 if test "$with_system_zlib" = "yes"; then
8967     AC_MSG_RESULT([external])
8968     SYSTEM_ZLIB=TRUE
8969     AC_CHECK_HEADER(zlib.h, [],
8970         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
8971     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
8972         [AC_MSG_ERROR(zlib not found or functional)], [])
8973 else
8974     AC_MSG_RESULT([internal])
8975     SYSTEM_ZLIB=
8976     BUILD_TYPE="$BUILD_TYPE ZLIB"
8977     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
8978     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
8980 AC_SUBST(ZLIB_CFLAGS)
8981 AC_SUBST(ZLIB_LIBS)
8982 AC_SUBST(SYSTEM_ZLIB)
8984 dnl ===================================================================
8985 dnl Check for system jpeg
8986 dnl ===================================================================
8987 AC_MSG_CHECKING([which libjpeg to use])
8988 if test "$with_system_jpeg" = "yes"; then
8989     AC_MSG_RESULT([external])
8990     SYSTEM_LIBJPEG=TRUE
8991     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
8992         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
8993     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
8994         [AC_MSG_ERROR(jpeg library not found or functional)], [])
8995 else
8996     SYSTEM_LIBJPEG=
8997     AC_MSG_RESULT([internal, libjpeg-turbo])
8998     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
8999     LIBJPEG_CFLAGS="-I${WORKDIR}/UnpackedTarball/libjpeg-turbo"
9000     if test "$COM" = "MSC"; then
9001         LIBJPEG_LIBS="${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs/libjpeg.lib"
9002     else
9003         LIBJPEG_LIBS="-L${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs -ljpeg"
9004     fi
9006     case "$host_cpu" in
9007     x86_64 | amd64 | i*86 | x86 | ia32)
9008         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9009         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9010             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9011                 NASM="$LODE_HOME/opt/bin/nasm"
9012             elif test -x "/opt/lo/bin/nasm"; then
9013                 NASM="/opt/lo/bin/nasm"
9014             fi
9015         fi
9017         if test -n "$NASM"; then
9018             AC_MSG_CHECKING([for object file format of host system])
9019             case "$host_os" in
9020               cygwin* | mingw* | pw32* | wsl*)
9021                 case "$host_cpu" in
9022                   x86_64)
9023                     objfmt='Win64-COFF'
9024                     ;;
9025                   *)
9026                     objfmt='Win32-COFF'
9027                     ;;
9028                 esac
9029               ;;
9030               msdosdjgpp* | go32*)
9031                 objfmt='COFF'
9032               ;;
9033               os2-emx*) # not tested
9034                 objfmt='MSOMF' # obj
9035               ;;
9036               linux*coff* | linux*oldld*)
9037                 objfmt='COFF' # ???
9038               ;;
9039               linux*aout*)
9040                 objfmt='a.out'
9041               ;;
9042               linux*)
9043                 case "$host_cpu" in
9044                   x86_64)
9045                     objfmt='ELF64'
9046                     ;;
9047                   *)
9048                     objfmt='ELF'
9049                     ;;
9050                 esac
9051               ;;
9052               kfreebsd* | freebsd* | netbsd* | openbsd*)
9053                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9054                   objfmt='BSD-a.out'
9055                 else
9056                   case "$host_cpu" in
9057                     x86_64 | amd64)
9058                       objfmt='ELF64'
9059                       ;;
9060                     *)
9061                       objfmt='ELF'
9062                       ;;
9063                   esac
9064                 fi
9065               ;;
9066               solaris* | sunos* | sysv* | sco*)
9067                 case "$host_cpu" in
9068                   x86_64)
9069                     objfmt='ELF64'
9070                     ;;
9071                   *)
9072                     objfmt='ELF'
9073                     ;;
9074                 esac
9075               ;;
9076               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9077                 case "$host_cpu" in
9078                   x86_64)
9079                     objfmt='Mach-O64'
9080                     ;;
9081                   *)
9082                     objfmt='Mach-O'
9083                     ;;
9084                 esac
9085               ;;
9086               *)
9087                 objfmt='ELF ?'
9088               ;;
9089             esac
9091             AC_MSG_RESULT([$objfmt])
9092             if test "$objfmt" = 'ELF ?'; then
9093               objfmt='ELF'
9094               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9095             fi
9097             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9098             case "$objfmt" in
9099               MSOMF)      NAFLAGS='-fobj -DOBJ32';;
9100               Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
9101               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
9102               COFF)       NAFLAGS='-fcoff -DCOFF';;
9103               a.out)      NAFLAGS='-faout -DAOUT';;
9104               BSD-a.out)  NAFLAGS='-faoutb -DAOUT';;
9105               ELF)        NAFLAGS='-felf -DELF';;
9106               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__';;
9107               RDF)        NAFLAGS='-frdf -DRDF';;
9108               Mach-O)     NAFLAGS='-fmacho -DMACHO';;
9109               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
9110             esac
9111             AC_MSG_RESULT([$NAFLAGS])
9113             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9114             cat > conftest.asm << EOF
9115             [%line __oline__ "configure"
9116                     section .text
9117                     global  _main,main
9118             _main:
9119             main:   xor     eax,eax
9120                     ret
9121             ]
9123             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9124             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9125               AC_MSG_RESULT(yes)
9126             else
9127               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9128               cat conftest.asm >&AS_MESSAGE_LOG_FD
9129               rm -rf conftest*
9130               AC_MSG_RESULT(no)
9131               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9132               NASM=""
9133             fi
9135         fi
9137         if test -z "$NASM"; then
9138 cat << _EOS
9139 ****************************************************************************
9140 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9141 To get one please:
9143 _EOS
9144             if test "$build_os" = "cygwin"; then
9145 cat << _EOS
9146 install a pre-compiled binary for Win32
9148 mkdir -p /opt/lo/bin
9149 cd /opt/lo/bin
9150 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9151 chmod +x nasm
9153 or get and install one from http://www.nasm.us/
9155 Then re-run autogen.sh
9157 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9158 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9160 _EOS
9161             else
9162 cat << _EOS
9163 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9165 _EOS
9166             fi
9167             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9168             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9169         fi
9170       ;;
9171     esac
9174 AC_SUBST(NASM)
9175 AC_SUBST(LIBJPEG_CFLAGS)
9176 AC_SUBST(LIBJPEG_LIBS)
9177 AC_SUBST(SYSTEM_LIBJPEG)
9179 dnl ===================================================================
9180 dnl Check for system clucene
9181 dnl ===================================================================
9182 dnl we should rather be using
9183 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9184 dnl but the contribs-lib check seems tricky
9185 AC_MSG_CHECKING([which clucene to use])
9186 if test "$with_system_clucene" = "yes"; then
9187     AC_MSG_RESULT([external])
9188     SYSTEM_CLUCENE=TRUE
9189     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9190     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9191     FilterLibs "${CLUCENE_LIBS}"
9192     CLUCENE_LIBS="${filteredlibs}"
9193     AC_LANG_PUSH([C++])
9194     save_CXXFLAGS=$CXXFLAGS
9195     save_CPPFLAGS=$CPPFLAGS
9196     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9197     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9198     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9199     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9200     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9201                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9202     CXXFLAGS=$save_CXXFLAGS
9203     CPPFLAGS=$save_CPPFLAGS
9204     AC_LANG_POP([C++])
9206     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9207 else
9208     AC_MSG_RESULT([internal])
9209     SYSTEM_CLUCENE=
9210     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9212 AC_SUBST(SYSTEM_CLUCENE)
9213 AC_SUBST(CLUCENE_CFLAGS)
9214 AC_SUBST(CLUCENE_LIBS)
9216 dnl ===================================================================
9217 dnl Check for system expat
9218 dnl ===================================================================
9219 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9221 dnl ===================================================================
9222 dnl Check for system xmlsec
9223 dnl ===================================================================
9224 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9226 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9227 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9228     ENABLE_EOT="TRUE"
9229     AC_DEFINE([ENABLE_EOT])
9230     AC_MSG_RESULT([yes])
9232     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9233 else
9234     ENABLE_EOT=
9235     AC_MSG_RESULT([no])
9237 AC_SUBST([ENABLE_EOT])
9239 dnl ===================================================================
9240 dnl Check for DLP libs
9241 dnl ===================================================================
9242 AS_IF([test "$COM" = "MSC"],
9243       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9244       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9246 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9248 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9250 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9252 AS_IF([test "$COM" = "MSC"],
9253       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9254       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9256 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9258 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9260 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9261 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9263 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9265 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9267 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9269 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9270 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.19])
9272 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9273 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9275 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9277 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9278 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9280 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9282 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9284 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9286 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9288 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9289 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9291 dnl ===================================================================
9292 dnl Check for system lcms2
9293 dnl ===================================================================
9294 if test "$with_system_lcms2" != "yes"; then
9295     SYSTEM_LCMS2=
9297 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9298 if test "$GCC" = "yes"; then
9299     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9301 if test "$COM" = "MSC"; then # override the above
9302     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9305 dnl ===================================================================
9306 dnl Check for system cppunit
9307 dnl ===================================================================
9308 if test "$_os" != "Android" ; then
9309     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9312 dnl ===================================================================
9313 dnl Check whether freetype is available
9314 dnl ===================================================================
9315 if test "$using_freetype_fontconfig" = yes; then
9316     AC_MSG_CHECKING([which freetype to use])
9318 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9319     AC_MSG_RESULT([external])
9320     # FreeType has 3 different kinds of versions
9321     # * release, like 2.4.10
9322     # * libtool, like 13.0.7 (this what pkg-config returns)
9323     # * soname
9324     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9325     #
9326     # 9.9.3 is 2.2.0
9327     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9328     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9329     FilterLibs "${FREETYPE_LIBS}"
9330     FREETYPE_LIBS="${filteredlibs}"
9331     SYSTEM_FREETYPE=TRUE
9332 elif test "$using_freetype_fontconfig" = yes; then
9333     AC_MSG_RESULT([internal])
9334     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9335     if test "x$ac_config_site_64bit_host" = xYES; then
9336         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9337     else
9338         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9339     fi
9340     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9342 AC_SUBST(FREETYPE_CFLAGS)
9343 AC_SUBST(FREETYPE_LIBS)
9344 AC_SUBST([SYSTEM_FREETYPE])
9346 # ===================================================================
9347 # Check for system libxslt
9348 # to prevent incompatibilities between internal libxml2 and external libxslt,
9349 # or vice versa, use with_system_libxml here
9350 # ===================================================================
9351 if test "$with_system_libxml" = "auto"; then
9352     case "$_os" in
9353     WINNT|iOS|Android)
9354         with_system_libxml="$with_system_libs"
9355         ;;
9356     Emscripten)
9357         with_system_libxml=no
9358         ;;
9359     *)
9360         if test "$enable_fuzzers" != "yes"; then
9361             with_system_libxml=yes
9362         else
9363             with_system_libxml=no
9364         fi
9365         ;;
9366     esac
9369 AC_MSG_CHECKING([which libxslt to use])
9370 if test "$with_system_libxml" = "yes"; then
9371     AC_MSG_RESULT([external])
9372     SYSTEM_LIBXSLT=TRUE
9373     if test "$_os" = "Darwin"; then
9374         dnl make sure to use SDK path
9375         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9376         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9377         dnl omit -L/usr/lib
9378         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9379         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9380     else
9381         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9382         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9383         FilterLibs "${LIBXSLT_LIBS}"
9384         LIBXSLT_LIBS="${filteredlibs}"
9385         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9386         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9387         FilterLibs "${LIBEXSLT_LIBS}"
9388         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9389     fi
9391     dnl Check for xsltproc
9392     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9393     if test "$XSLTPROC" = "no"; then
9394         AC_MSG_ERROR([xsltproc is required])
9395     fi
9396 else
9397     AC_MSG_RESULT([internal])
9398     SYSTEM_LIBXSLT=
9399     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9401 AC_SUBST(SYSTEM_LIBXSLT)
9402 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9403     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9405 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9407 AC_SUBST(LIBEXSLT_CFLAGS)
9408 AC_SUBST(LIBEXSLT_LIBS)
9409 AC_SUBST(LIBXSLT_CFLAGS)
9410 AC_SUBST(LIBXSLT_LIBS)
9411 AC_SUBST(XSLTPROC)
9413 # ===================================================================
9414 # Check for system libxml
9415 # ===================================================================
9416 AC_MSG_CHECKING([which libxml to use])
9417 if test "$with_system_libxml" = "yes"; then
9418     AC_MSG_RESULT([external])
9419     SYSTEM_LIBXML=TRUE
9420     if test "$_os" = "Darwin"; then
9421         dnl make sure to use SDK path
9422         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9423         dnl omit -L/usr/lib
9424         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9425     elif test $_os = iOS; then
9426         dnl make sure to use SDK path
9427         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9428         LIBXML_CFLAGS="-I$usr/include/libxml2"
9429         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9430     else
9431         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9432         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9433         FilterLibs "${LIBXML_LIBS}"
9434         LIBXML_LIBS="${filteredlibs}"
9435     fi
9437     dnl Check for xmllint
9438     AC_PATH_PROG(XMLLINT, xmllint, no)
9439     if test "$XMLLINT" = "no"; then
9440         AC_MSG_ERROR([xmllint is required])
9441     fi
9442 else
9443     AC_MSG_RESULT([internal])
9444     SYSTEM_LIBXML=
9445     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9446     if test "$COM" = "MSC"; then
9447         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9448     fi
9449     if test "$COM" = "MSC"; then
9450         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9451     else
9452         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9453         if test "$_os" = Android; then
9454             LIBXML_LIBS="$LIBXML_LIBS -lm"
9455         fi
9456     fi
9457     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9459 AC_SUBST(SYSTEM_LIBXML)
9460 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9461     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9463 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9464 AC_SUBST(LIBXML_CFLAGS)
9465 AC_SUBST(LIBXML_LIBS)
9466 AC_SUBST(XMLLINT)
9468 # =====================================================================
9469 # Checking for a Python interpreter with version >= 3.3.
9470 # Optionally user can pass an option to configure, i. e.
9471 # ./configure PYTHON=/usr/bin/python
9472 # =====================================================================
9473 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9474     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9475     # unless PYTHON is defined as above which allows 'system'
9476     enable_python=internal
9478 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9479     if test -n "$PYTHON"; then
9480         PYTHON_FOR_BUILD=$PYTHON
9481     else
9482         # This allows a lack of system python with no error, we use internal one in that case.
9483         AM_PATH_PYTHON([3.3],, [:])
9484         # Clean PYTHON_VERSION checked below if cross-compiling
9485         PYTHON_VERSION=""
9486         if test "$PYTHON" != ":"; then
9487             PYTHON_FOR_BUILD=$PYTHON
9488         fi
9489     fi
9491 AC_SUBST(PYTHON_FOR_BUILD)
9493 # Checks for Python to use for Pyuno
9494 AC_MSG_CHECKING([which Python to use for Pyuno])
9495 case "$enable_python" in
9496 no|disable)
9497     if test -z $PYTHON_FOR_BUILD; then
9498         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9499         # requirement from the choice whether to include Python stuff in the installer, but why
9500         # bother?
9501         if test "$cross_compiling" = yes; then
9502             enable_python=system
9503         else
9504             AC_MSG_ERROR([Python is required at build time.])
9505         fi
9506     fi
9507     enable_python=no
9508     AC_MSG_RESULT([none])
9509     ;;
9510 ""|yes|auto)
9511     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9512         AC_MSG_RESULT([no, overridden by --disable-scripting])
9513         enable_python=no
9514     elif test $build_os = cygwin; then
9515         dnl When building on Windows we don't attempt to use any installed
9516         dnl "system"  Python.
9517         AC_MSG_RESULT([fully internal])
9518         enable_python=internal
9519     elif test "$cross_compiling" = yes; then
9520         AC_MSG_RESULT([system])
9521         enable_python=system
9522     else
9523         # Unset variables set by the above AM_PATH_PYTHON so that
9524         # we actually do check anew.
9525         AC_MSG_RESULT([])
9526         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
9527         AM_PATH_PYTHON([3.3],, [:])
9528         AC_MSG_CHECKING([which Python to use for Pyuno])
9529         if test "$PYTHON" = ":"; then
9530             if test -z "$PYTHON_FOR_BUILD"; then
9531                 AC_MSG_RESULT([fully internal])
9532             else
9533                 AC_MSG_RESULT([internal])
9534             fi
9535             enable_python=internal
9536         else
9537             AC_MSG_RESULT([system])
9538             enable_python=system
9539         fi
9540     fi
9541     ;;
9542 internal)
9543     AC_MSG_RESULT([internal])
9544     ;;
9545 fully-internal)
9546     AC_MSG_RESULT([fully internal])
9547     enable_python=internal
9548     ;;
9549 system)
9550     AC_MSG_RESULT([system])
9551     if test "$_os" = Darwin -a -z "$PYTHON"; then
9552         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9553     fi
9554     ;;
9556     AC_MSG_ERROR([Incorrect --enable-python option])
9557     ;;
9558 esac
9560 if test $enable_python != no; then
9561     BUILD_TYPE="$BUILD_TYPE PYUNO"
9564 if test $enable_python = system; then
9565     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9566         # Fallback: Accept these in the environment, or as set above
9567         # for MacOSX.
9568         :
9569     elif test "$cross_compiling" != yes; then
9570         # Unset variables set by the above AM_PATH_PYTHON so that
9571         # we actually do check anew.
9572         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
9573         # This causes an error if no python command is found
9574         AM_PATH_PYTHON([3.3])
9575         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9576         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9577         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9578         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9579         if test -z "$PKG_CONFIG"; then
9580             PYTHON_CFLAGS="-I$python_include"
9581             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9582         elif $PKG_CONFIG --exists python-$python_version-embed; then
9583             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9584             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9585         elif $PKG_CONFIG --exists python-$python_version; then
9586             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9587             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9588         else
9589             PYTHON_CFLAGS="-I$python_include"
9590             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9591         fi
9592         FilterLibs "${PYTHON_LIBS}"
9593         PYTHON_LIBS="${filteredlibs}"
9594     else
9595         dnl How to find out the cross-compilation Python installation path?
9596         AC_MSG_CHECKING([for python version])
9597         AS_IF([test -n "$PYTHON_VERSION"],
9598               [AC_MSG_RESULT([$PYTHON_VERSION])],
9599               [AC_MSG_RESULT([not found])
9600                AC_MSG_ERROR([no usable python found])])
9601         test -n "$PYTHON_CFLAGS" && break
9602     fi
9604     dnl Check if the headers really work
9605     save_CPPFLAGS="$CPPFLAGS"
9606     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9607     AC_CHECK_HEADER(Python.h)
9608     CPPFLAGS="$save_CPPFLAGS"
9610     # let the PYTHON_FOR_BUILD match the same python installation that
9611     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9612     # better for PythonTests.
9613     PYTHON_FOR_BUILD=$PYTHON
9616 if test "$with_lxml" != no; then
9617     if test -z "$PYTHON_FOR_BUILD"; then
9618         case $build_os in
9619             cygwin)
9620                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9621                 ;;
9622             *)
9623                 if test "$cross_compiling" != yes ; then
9624                     BUILD_TYPE="$BUILD_TYPE LXML"
9625                 fi
9626                 ;;
9627         esac
9628     else
9629         AC_MSG_CHECKING([for python lxml])
9630         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9631             AC_MSG_RESULT([yes])
9632         else
9633             case $build_os in
9634                 cygwin)
9635                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9636                     ;;
9637                 *)
9638                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9639                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9640                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9641                         else
9642                             BUILD_TYPE="$BUILD_TYPE LXML"
9643                             AC_MSG_RESULT([no, using internal lxml])
9644                         fi
9645                     else
9646                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9647                     fi
9648                     ;;
9649             esac
9650         fi
9651     fi
9654 dnl By now enable_python should be "system", "internal" or "no"
9655 case $enable_python in
9656 system)
9657     SYSTEM_PYTHON=TRUE
9659     if test "x$ac_cv_header_Python_h" != "xyes"; then
9660        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9661     fi
9663     AC_LANG_PUSH(C)
9664     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9665     AC_MSG_CHECKING([for correct python library version])
9666        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9667 #include <Python.h>
9669 int main(int argc, char **argv) {
9670    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9671    else return 1;
9673        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9674     AC_LANG_POP(C)
9676     dnl FIXME Check if the Python library can be linked with, too?
9677     ;;
9679 internal)
9680     SYSTEM_PYTHON=
9681     PYTHON_VERSION_MAJOR=3
9682     PYTHON_VERSION_MINOR=8
9683     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.8
9684     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9685         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9686     fi
9687     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9688     BUILD_TYPE="$BUILD_TYPE PYTHON"
9689     if test "$OS" = LINUX -o "$OS" = WNT ; then
9690         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9691     fi
9692     # Embedded Python dies without Home set
9693     if test "$HOME" = ""; then
9694         export HOME=""
9695     fi
9696     ;;
9698     DISABLE_PYTHON=TRUE
9699     SYSTEM_PYTHON=
9700     ;;
9702     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9703     ;;
9704 esac
9706 AC_SUBST(DISABLE_PYTHON)
9707 AC_SUBST(SYSTEM_PYTHON)
9708 AC_SUBST(PYTHON_CFLAGS)
9709 AC_SUBST(PYTHON_LIBS)
9710 AC_SUBST(PYTHON_VERSION)
9711 AC_SUBST(PYTHON_VERSION_MAJOR)
9712 AC_SUBST(PYTHON_VERSION_MINOR)
9714 AC_MSG_CHECKING([whether to build LibreLogo])
9715 case "$enable_python" in
9716 no|disable)
9717     AC_MSG_RESULT([no; Python disabled])
9718     ;;
9720     if test "${enable_librelogo}" = "no"; then
9721         AC_MSG_RESULT([no])
9722     else
9723         AC_MSG_RESULT([yes])
9724         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9725         AC_DEFINE([ENABLE_LIBRELOGO],1)
9726     fi
9727     ;;
9728 esac
9729 AC_SUBST(ENABLE_LIBRELOGO)
9731 ENABLE_MARIADBC=
9732 MARIADBC_MAJOR=1
9733 MARIADBC_MINOR=0
9734 MARIADBC_MICRO=2
9735 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9736 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9737     ENABLE_MARIADBC=TRUE
9738     AC_MSG_RESULT([yes])
9739     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9740 else
9741     AC_MSG_RESULT([no])
9743 AC_SUBST(ENABLE_MARIADBC)
9744 AC_SUBST(MARIADBC_MAJOR)
9745 AC_SUBST(MARIADBC_MINOR)
9746 AC_SUBST(MARIADBC_MICRO)
9748 if test "$ENABLE_MARIADBC" = "TRUE"; then
9749     dnl ===================================================================
9750     dnl Check for system MariaDB
9751     dnl ===================================================================
9752     AC_MSG_CHECKING([which MariaDB to use])
9753     if test "$with_system_mariadb" = "yes"; then
9754         AC_MSG_RESULT([external])
9755         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9756         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9757         if test -z "$MARIADBCONFIG"; then
9758             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9759             if test -z "$MARIADBCONFIG"; then
9760                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9761                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9762             fi
9763         fi
9764         AC_MSG_CHECKING([MariaDB version])
9765         MARIADB_VERSION=`$MARIADBCONFIG --version`
9766         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9767         if test "$MARIADB_MAJOR" -ge "5"; then
9768             AC_MSG_RESULT([OK])
9769         else
9770             AC_MSG_ERROR([too old, use 5.0.x or later])
9771         fi
9772         AC_MSG_CHECKING([for MariaDB Client library])
9773         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9774         if test "$COM_IS_CLANG" = TRUE; then
9775             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9776         fi
9777         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9778         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9779         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9780         dnl linux32:
9781         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9782             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9783             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9784                 | sed -e 's|/lib64/|/lib/|')
9785         fi
9786         FilterLibs "${MARIADB_LIBS}"
9787         MARIADB_LIBS="${filteredlibs}"
9788         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9789         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9790         if test "$enable_bundle_mariadb" = "yes"; then
9791             AC_MSG_RESULT([yes])
9792             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9793             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9795 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9797 /g' | grep -E '(mysqlclient|mariadb)')
9798             if test "$_os" = "Darwin"; then
9799                 LIBMARIADB=${LIBMARIADB}.dylib
9800             elif test "$_os" = "WINNT"; then
9801                 LIBMARIADB=${LIBMARIADB}.dll
9802             else
9803                 LIBMARIADB=${LIBMARIADB}.so
9804             fi
9805             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9806             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9807             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9808                 AC_MSG_RESULT([found.])
9809                 PathFormat "$LIBMARIADB_PATH"
9810                 LIBMARIADB_PATH="$formatted_path"
9811             else
9812                 AC_MSG_ERROR([not found.])
9813             fi
9814         else
9815             AC_MSG_RESULT([no])
9816             BUNDLE_MARIADB_CONNECTOR_C=
9817         fi
9818     else
9819         AC_MSG_RESULT([internal])
9820         SYSTEM_MARIADB_CONNECTOR_C=
9821         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9822         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9823         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9824     fi
9826     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9827     AC_SUBST(MARIADB_CFLAGS)
9828     AC_SUBST(MARIADB_LIBS)
9829     AC_SUBST(LIBMARIADB)
9830     AC_SUBST(LIBMARIADB_PATH)
9831     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9834 dnl ===================================================================
9835 dnl Check for system hsqldb
9836 dnl ===================================================================
9837 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9838     HSQLDB_USE_JDBC_4_1=
9839     AC_MSG_CHECKING([which hsqldb to use])
9840     if test "$with_system_hsqldb" = "yes"; then
9841         AC_MSG_RESULT([external])
9842         SYSTEM_HSQLDB=TRUE
9843         if test -z $HSQLDB_JAR; then
9844             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9845         fi
9846         if ! test -f $HSQLDB_JAR; then
9847                AC_MSG_ERROR(hsqldb.jar not found.)
9848         fi
9849         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9850         export HSQLDB_JAR
9851         if $PERL -e \
9852            'use Archive::Zip;
9853             my $file = "$ENV{'HSQLDB_JAR'}";
9854             my $zip = Archive::Zip->new( $file );
9855             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9856             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9857             {
9858                 push @l, split(/\n/, $mf);
9859                 foreach my $line (@l)
9860                 {
9861                     if ($line =~ m/Specification-Version:/)
9862                     {
9863                         ($t, $version) = split (/:/,$line);
9864                         $version =~ s/^\s//;
9865                         ($a, $b, $c, $d) = split (/\./,$version);
9866                         if ($c == "0" && $d > "8")
9867                         {
9868                             exit 0;
9869                         }
9870                         else
9871                         {
9872                             exit 1;
9873                         }
9874                     }
9875                 }
9876             }
9877             else
9878             {
9879                 exit 1;
9880             }'; then
9881             AC_MSG_RESULT([yes])
9882         else
9883             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9884         fi
9885     else
9886         AC_MSG_RESULT([internal])
9887         SYSTEM_HSQLDB=
9888         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9889         NEED_ANT=TRUE
9890         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9891         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9892         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9893             AC_MSG_RESULT([yes])
9894             HSQLDB_USE_JDBC_4_1=TRUE
9895         else
9896             AC_MSG_RESULT([no])
9897         fi
9898     fi
9899 else
9900     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9901         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9902     fi
9904 AC_SUBST(SYSTEM_HSQLDB)
9905 AC_SUBST(HSQLDB_JAR)
9906 AC_SUBST([HSQLDB_USE_JDBC_4_1])
9908 dnl ===================================================================
9909 dnl Check for PostgreSQL stuff
9910 dnl ===================================================================
9911 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
9912 if test "x$enable_postgresql_sdbc" != "xno"; then
9913     AC_MSG_RESULT([yes])
9914     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
9916     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
9917         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
9918     fi
9919     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
9920         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
9921     fi
9923     postgres_interface=""
9924     if test "$with_system_postgresql" = "yes"; then
9925         postgres_interface="external PostgreSQL"
9926         SYSTEM_POSTGRESQL=TRUE
9927         if test "$_os" = Darwin; then
9928             supp_path=''
9929             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
9930                 pg_supp_path="$P_SEP$d$pg_supp_path"
9931             done
9932         fi
9933         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
9934         if test -n "$PGCONFIG"; then
9935             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
9936             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
9937         else
9938             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
9939               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
9940               POSTGRESQL_LIB=$POSTGRESQL_LIBS
9941             ],[
9942               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
9943             ])
9944         fi
9945         FilterLibs "${POSTGRESQL_LIB}"
9946         POSTGRESQL_LIB="${filteredlibs}"
9947     else
9948         # if/when anything else than PostgreSQL uses Kerberos,
9949         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
9950         WITH_KRB5=
9951         WITH_GSSAPI=
9952         case "$_os" in
9953         Darwin)
9954             # macOS has system MIT Kerberos 5 since 10.4
9955             if test "$with_krb5" != "no"; then
9956                 WITH_KRB5=TRUE
9957                 save_LIBS=$LIBS
9958                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
9959                 # that the libraries where these functions are located on macOS will change, is it?
9960                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9961                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
9962                 KRB5_LIBS=$LIBS
9963                 LIBS=$save_LIBS
9964                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9965                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
9966                 KRB5_LIBS="$KRB5_LIBS $LIBS"
9967                 LIBS=$save_LIBS
9968             fi
9969             if test "$with_gssapi" != "no"; then
9970                 WITH_GSSAPI=TRUE
9971                 save_LIBS=$LIBS
9972                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
9973                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
9974                 GSSAPI_LIBS=$LIBS
9975                 LIBS=$save_LIBS
9976             fi
9977             ;;
9978         WINNT)
9979             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
9980                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
9981             fi
9982             ;;
9983         Linux|GNU|*BSD|DragonFly)
9984             if test "$with_krb5" != "no"; then
9985                 WITH_KRB5=TRUE
9986                 save_LIBS=$LIBS
9987                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9988                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
9989                 KRB5_LIBS=$LIBS
9990                 LIBS=$save_LIBS
9991                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
9992                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
9993                 KRB5_LIBS="$KRB5_LIBS $LIBS"
9994                 LIBS=$save_LIBS
9995             fi
9996             if test "$with_gssapi" != "no"; then
9997                 WITH_GSSAPI=TRUE
9998                 save_LIBS=$LIBS
9999                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10000                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10001                 GSSAPI_LIBS=$LIBS
10002                 LIBS=$save_LIBS
10003             fi
10004             ;;
10005         *)
10006             if test "$with_krb5" = "yes"; then
10007                 WITH_KRB5=TRUE
10008                 save_LIBS=$LIBS
10009                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10010                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10011                 KRB5_LIBS=$LIBS
10012                 LIBS=$save_LIBS
10013                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10014                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10015                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10016                 LIBS=$save_LIBS
10017             fi
10018             if test "$with_gssapi" = "yes"; then
10019                 WITH_GSSAPI=TRUE
10020                 save_LIBS=$LIBS
10021                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10022                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10023                 LIBS=$save_LIBS
10024                 GSSAPI_LIBS=$LIBS
10025             fi
10026         esac
10028         if test -n "$with_libpq_path"; then
10029             SYSTEM_POSTGRESQL=TRUE
10030             postgres_interface="external libpq"
10031             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10032             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10033         else
10034             SYSTEM_POSTGRESQL=
10035             postgres_interface="internal"
10036             POSTGRESQL_LIB=""
10037             POSTGRESQL_INC="%OVERRIDE_ME%"
10038             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10039         fi
10040     fi
10042     AC_MSG_CHECKING([PostgreSQL C interface])
10043     AC_MSG_RESULT([$postgres_interface])
10045     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10046         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10047         save_CFLAGS=$CFLAGS
10048         save_CPPFLAGS=$CPPFLAGS
10049         save_LIBS=$LIBS
10050         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10051         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10052         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10053         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10054             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10055         CFLAGS=$save_CFLAGS
10056         CPPFLAGS=$save_CPPFLAGS
10057         LIBS=$save_LIBS
10058     fi
10059     BUILD_POSTGRESQL_SDBC=TRUE
10060 else
10061     AC_MSG_RESULT([no])
10063 AC_SUBST(WITH_KRB5)
10064 AC_SUBST(WITH_GSSAPI)
10065 AC_SUBST(GSSAPI_LIBS)
10066 AC_SUBST(KRB5_LIBS)
10067 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10068 AC_SUBST(SYSTEM_POSTGRESQL)
10069 AC_SUBST(POSTGRESQL_INC)
10070 AC_SUBST(POSTGRESQL_LIB)
10072 dnl ===================================================================
10073 dnl Check for Firebird stuff
10074 dnl ===================================================================
10075 ENABLE_FIREBIRD_SDBC=
10076 if test "$enable_firebird_sdbc" = "yes" ; then
10077     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10079     dnl ===================================================================
10080     dnl Check for system Firebird
10081     dnl ===================================================================
10082     AC_MSG_CHECKING([which Firebird to use])
10083     if test "$with_system_firebird" = "yes"; then
10084         AC_MSG_RESULT([external])
10085         SYSTEM_FIREBIRD=TRUE
10086         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10087         if test -z "$FIREBIRDCONFIG"; then
10088             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10089             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10090                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10091             ])
10092             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10093         else
10094             AC_MSG_NOTICE([fb_config found])
10095             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10096             AC_MSG_CHECKING([for Firebird Client library])
10097             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10098             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10099             FilterLibs "${FIREBIRD_LIBS}"
10100             FIREBIRD_LIBS="${filteredlibs}"
10101         fi
10102         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10103         AC_MSG_CHECKING([Firebird version])
10104         if test -n "${FIREBIRD_VERSION}"; then
10105             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10106             if test "$FIREBIRD_MAJOR" -ge "3"; then
10107                 AC_MSG_RESULT([OK])
10108             else
10109                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10110             fi
10111         else
10112             save_CFLAGS="${CFLAGS}"
10113             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10114             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10115 #if defined(FB_API_VER) && FB_API_VER == 30
10116 int fb_api_is_30(void) { return 0; }
10117 #else
10118 #error "Wrong Firebird API version"
10119 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10120             CFLAGS="$save_CFLAGS"
10121         fi
10122         ENABLE_FIREBIRD_SDBC=TRUE
10123         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10124     elif test "$enable_database_connectivity" = no; then
10125         AC_MSG_RESULT([none])
10126     elif test "$cross_compiling" = "yes"; then
10127         AC_MSG_RESULT([none])
10128     else
10129         dnl Embedded Firebird has version 3.0
10130         dnl We need libatomic_ops for any non X86/X64 system
10131         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10132             dnl ===================================================================
10133             dnl Check for system libatomic_ops
10134             dnl ===================================================================
10135             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10136             if test "$with_system_libatomic_ops" = "yes"; then
10137                 SYSTEM_LIBATOMIC_OPS=TRUE
10138                 AC_CHECK_HEADERS(atomic_ops.h, [],
10139                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10140             else
10141                 SYSTEM_LIBATOMIC_OPS=
10142                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10143                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10144                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10145             fi
10146         fi
10148         AC_MSG_RESULT([internal])
10149         SYSTEM_FIREBIRD=
10150         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10151         FIREBIRD_LIBS="-lfbclient"
10153         if test "$with_system_libtommath" = "yes"; then
10154             SYSTEM_LIBTOMMATH=TRUE
10155             dnl check for tommath presence
10156             save_LIBS=$LIBS
10157             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10158             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10159             LIBS=$save_LIBS
10160         else
10161             SYSTEM_LIBTOMMATH=
10162             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10163             LIBTOMMATH_LIBS="-ltommath"
10164             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10165         fi
10167         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10168         ENABLE_FIREBIRD_SDBC=TRUE
10169         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10170     fi
10172 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10173 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10174 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10175 AC_SUBST(LIBATOMIC_OPS_LIBS)
10176 AC_SUBST(SYSTEM_FIREBIRD)
10177 AC_SUBST(FIREBIRD_CFLAGS)
10178 AC_SUBST(FIREBIRD_LIBS)
10179 AC_SUBST(SYSTEM_LIBTOMMATH)
10180 AC_SUBST(LIBTOMMATH_CFLAGS)
10181 AC_SUBST(LIBTOMMATH_LIBS)
10183 dnl ===================================================================
10184 dnl Check for system curl
10185 dnl ===================================================================
10186 AC_MSG_CHECKING([which libcurl to use])
10187 if test "$with_system_curl" = "auto"; then
10188     with_system_curl="$with_system_libs"
10191 if test "$test_curl" = "yes" -a "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10192     AC_MSG_RESULT([external])
10193     SYSTEM_CURL=TRUE
10195     # First try PKGCONFIG and then fall back
10196     PKG_CHECK_MODULES(CURL, libcurl >= 7.19.4,, [:])
10198     if test -n "$CURL_PKG_ERRORS"; then
10199         AC_PATH_PROG(CURLCONFIG, curl-config)
10200         if test -z "$CURLCONFIG"; then
10201             AC_MSG_ERROR([curl development files not found])
10202         fi
10203         CURL_LIBS=`$CURLCONFIG --libs`
10204         FilterLibs "${CURL_LIBS}"
10205         CURL_LIBS="${filteredlibs}"
10206         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10207         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10209         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10210         case $curl_version in
10211         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10212         dnl so they need to be doubled to end up in the configure script
10213         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10214             AC_MSG_RESULT([yes])
10215             ;;
10216         *)
10217             AC_MSG_ERROR([no, you have $curl_version])
10218             ;;
10219         esac
10220     fi
10222     ENABLE_CURL=TRUE
10223 elif test "$test_curl" = "no"; then
10224     AC_MSG_RESULT([none])
10225 else
10226     AC_MSG_RESULT([internal])
10227     SYSTEM_CURL=
10228     BUILD_TYPE="$BUILD_TYPE CURL"
10229     ENABLE_CURL=TRUE
10231 AC_SUBST(SYSTEM_CURL)
10232 AC_SUBST(CURL_CFLAGS)
10233 AC_SUBST(CURL_LIBS)
10234 AC_SUBST(ENABLE_CURL)
10236 dnl ===================================================================
10237 dnl Check for system boost
10238 dnl ===================================================================
10239 AC_MSG_CHECKING([which boost to use])
10240 if test "$with_system_boost" = "yes"; then
10241     AC_MSG_RESULT([external])
10242     SYSTEM_BOOST=TRUE
10243     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10244     AX_BOOST_DATE_TIME
10245     AX_BOOST_FILESYSTEM
10246     AX_BOOST_IOSTREAMS
10247     AX_BOOST_LOCALE
10248     AC_LANG_PUSH([C++])
10249     save_CXXFLAGS=$CXXFLAGS
10250     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10251     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10252        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10253     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10254        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10255     CXXFLAGS=$save_CXXFLAGS
10256     AC_LANG_POP([C++])
10257     # this is in m4/ax_boost_base.m4
10258     FilterLibs "${BOOST_LDFLAGS}"
10259     BOOST_LDFLAGS="${filteredlibs}"
10260 else
10261     AC_MSG_RESULT([internal])
10262     BUILD_TYPE="$BUILD_TYPE BOOST"
10263     SYSTEM_BOOST=
10264     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10265         # use warning-suppressing wrapper headers
10266         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10267     else
10268         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10269     fi
10271 AC_SUBST(SYSTEM_BOOST)
10273 dnl ===================================================================
10274 dnl Check for system mdds
10275 dnl ===================================================================
10276 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10278 dnl ===================================================================
10279 dnl Check for system glm
10280 dnl ===================================================================
10281 AC_MSG_CHECKING([which glm to use])
10282 if test "$with_system_glm" = "yes"; then
10283     AC_MSG_RESULT([external])
10284     SYSTEM_GLM=TRUE
10285     AC_LANG_PUSH([C++])
10286     AC_CHECK_HEADER([glm/glm.hpp], [],
10287        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10288     AC_LANG_POP([C++])
10289 else
10290     AC_MSG_RESULT([internal])
10291     BUILD_TYPE="$BUILD_TYPE GLM"
10292     SYSTEM_GLM=
10293     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10295 AC_SUBST([GLM_CFLAGS])
10296 AC_SUBST([SYSTEM_GLM])
10298 dnl ===================================================================
10299 dnl Check for system odbc
10300 dnl ===================================================================
10301 AC_MSG_CHECKING([which odbc headers to use])
10302 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
10303     AC_MSG_RESULT([external])
10304     SYSTEM_ODBC_HEADERS=TRUE
10306     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10307         save_CPPFLAGS=$CPPFLAGS
10308         find_winsdk
10309         PathFormat "$winsdktest"
10310         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"
10311         AC_CHECK_HEADER(sqlext.h, [],
10312             [AC_MSG_ERROR(odbc not found. install odbc)],
10313             [#include <windows.h>])
10314         CPPFLAGS=$save_CPPFLAGS
10315     else
10316         AC_CHECK_HEADER(sqlext.h, [],
10317             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10318     fi
10319 elif test "$enable_database_connectivity" = no; then
10320     AC_MSG_RESULT([none])
10321 else
10322     AC_MSG_RESULT([internal])
10323     SYSTEM_ODBC_HEADERS=
10325 AC_SUBST(SYSTEM_ODBC_HEADERS)
10327 dnl ===================================================================
10328 dnl Check for system NSS
10329 dnl ===================================================================
10330 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10331     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10332     AC_DEFINE(HAVE_FEATURE_NSS)
10333     ENABLE_NSS=TRUE
10334 elif test $_os != iOS ; then
10335     with_tls=openssl
10337 AC_SUBST(ENABLE_NSS)
10339 dnl ===================================================================
10340 dnl Enable LDAP support
10341 dnl ===================================================================
10343 if test "$test_openldap" = yes; then
10344     AC_MSG_CHECKING([whether to enable LDAP support])
10345     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10346         AC_MSG_RESULT([yes])
10347         ENABLE_LDAP=TRUE
10348     else
10349         if test "$enable_ldap" != "yes"; then
10350             AC_MSG_RESULT([no])
10351         else
10352             AC_MSG_RESULT([no (needs NSS or system openldap)])
10353         fi
10354     fi
10356 dnl ===================================================================
10357 dnl Check for system openldap
10358 dnl ===================================================================
10360     if test "$ENABLE_LDAP" = TRUE; then
10361         AC_MSG_CHECKING([which openldap library to use])
10362         if test "$with_system_openldap" = yes; then
10363             AC_MSG_RESULT([external])
10364             SYSTEM_OPENLDAP=TRUE
10365             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10366             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10367             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10368         else
10369             AC_MSG_RESULT([internal])
10370             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10371         fi
10372     fi
10375 AC_SUBST(ENABLE_LDAP)
10376 AC_SUBST(SYSTEM_OPENLDAP)
10378 dnl ===================================================================
10379 dnl Check for TLS/SSL and cryptographic implementation to use
10380 dnl ===================================================================
10381 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10382 if test -n "$with_tls"; then
10383     case $with_tls in
10384     openssl)
10385         AC_DEFINE(USE_TLS_OPENSSL)
10386         TLS=OPENSSL
10387         AC_MSG_RESULT([$TLS])
10389         if test "$enable_openssl" != "yes"; then
10390             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10391         fi
10393         # warn that OpenSSL has been selected but not all TLS code has this option
10394         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10395         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10396         ;;
10397     nss)
10398         AC_DEFINE(USE_TLS_NSS)
10399         TLS=NSS
10400         AC_MSG_RESULT([$TLS])
10401         ;;
10402     no)
10403         AC_MSG_RESULT([none])
10404         AC_MSG_WARN([Skipping TLS/SSL])
10405         ;;
10406     *)
10407         AC_MSG_RESULT([])
10408         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10409 openssl - OpenSSL
10410 nss - Mozilla's Network Security Services (NSS)
10411     ])
10412         ;;
10413     esac
10414 else
10415     # default to using NSS, it results in smaller oox lib
10416     AC_DEFINE(USE_TLS_NSS)
10417     TLS=NSS
10418     AC_MSG_RESULT([$TLS])
10420 AC_SUBST(TLS)
10422 dnl ===================================================================
10423 dnl Check for system sane
10424 dnl ===================================================================
10425 AC_MSG_CHECKING([which sane header to use])
10426 if test "$with_system_sane" = "yes"; then
10427     AC_MSG_RESULT([external])
10428     AC_CHECK_HEADER(sane/sane.h, [],
10429       [AC_MSG_ERROR(sane not found. install sane)], [])
10430 else
10431     AC_MSG_RESULT([internal])
10432     BUILD_TYPE="$BUILD_TYPE SANE"
10435 dnl ===================================================================
10436 dnl Check for system icu
10437 dnl ===================================================================
10438 SYSTEM_GENBRK=
10439 SYSTEM_GENCCODE=
10440 SYSTEM_GENCMN=
10442 ICU_MAJOR=69
10443 ICU_MINOR=1
10444 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10445 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10446 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10447 AC_MSG_CHECKING([which icu to use])
10448 if test "$with_system_icu" = "yes"; then
10449     AC_MSG_RESULT([external])
10450     SYSTEM_ICU=TRUE
10451     AC_LANG_PUSH([C++])
10452     AC_MSG_CHECKING([for unicode/rbbi.h])
10453     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10454     AC_LANG_POP([C++])
10456     if test "$cross_compiling" != "yes"; then
10457         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10458         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10459         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10460         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10461     fi
10463     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10464         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10465         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10466         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10467         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10468         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10469             AC_MSG_RESULT([yes])
10470         else
10471             AC_MSG_RESULT([no])
10472             if test "$with_system_icu_for_build" != "force"; then
10473                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10474 You can use --with-system-icu-for-build=force to use it anyway.])
10475             fi
10476         fi
10477     fi
10479     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10480         # using the system icu tools can lead to version confusion, use the
10481         # ones from the build environment when cross-compiling
10482         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10483         if test -z "$SYSTEM_GENBRK"; then
10484             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10485         fi
10486         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10487         if test -z "$SYSTEM_GENCCODE"; then
10488             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10489         fi
10490         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10491         if test -z "$SYSTEM_GENCMN"; then
10492             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10493         fi
10494         if test "$ICU_MAJOR" -ge "49"; then
10495             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10496             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10497             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10498         else
10499             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10500             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10501             ICU_RECLASSIFIED_HEBREW_LETTER=
10502         fi
10503     fi
10505     if test "$cross_compiling" = "yes"; then
10506         if test "$ICU_MAJOR" -ge "50"; then
10507             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10508             ICU_MINOR=""
10509         fi
10510     fi
10511 else
10512     AC_MSG_RESULT([internal])
10513     SYSTEM_ICU=
10514     BUILD_TYPE="$BUILD_TYPE ICU"
10515     # surprisingly set these only for "internal" (to be used by various other
10516     # external libs): the system icu-config is quite unhelpful and spits out
10517     # dozens of weird flags and also default path -I/usr/include
10518     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10519     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10521 if test "$ICU_MAJOR" -ge "59"; then
10522     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10523     # with -std=c++11 but not all external libraries can be built with that,
10524     # for those use a bit-compatible typedef uint16_t UChar; see
10525     # icu/source/common/unicode/umachine.h
10526     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10527 else
10528     ICU_UCHAR_TYPE=""
10530 AC_SUBST(SYSTEM_ICU)
10531 AC_SUBST(SYSTEM_GENBRK)
10532 AC_SUBST(SYSTEM_GENCCODE)
10533 AC_SUBST(SYSTEM_GENCMN)
10534 AC_SUBST(ICU_MAJOR)
10535 AC_SUBST(ICU_MINOR)
10536 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10537 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10538 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10539 AC_SUBST(ICU_CFLAGS)
10540 AC_SUBST(ICU_LIBS)
10541 AC_SUBST(ICU_UCHAR_TYPE)
10543 dnl ==================================================================
10544 dnl Breakpad
10545 dnl ==================================================================
10546 DEFAULT_CRASHDUMP_VALUE="true"
10547 AC_MSG_CHECKING([whether to enable breakpad])
10548 if test "$enable_breakpad" != yes; then
10549     AC_MSG_RESULT([no])
10550 else
10551     AC_MSG_RESULT([yes])
10552     ENABLE_BREAKPAD="TRUE"
10553     AC_DEFINE(ENABLE_BREAKPAD)
10554     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10555     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10557     AC_MSG_CHECKING([for disable crash dump])
10558     if test "$enable_crashdump" = no; then
10559         DEFAULT_CRASHDUMP_VALUE="false"
10560         AC_MSG_RESULT([yes])
10561     else
10562        AC_MSG_RESULT([no])
10563     fi
10565     AC_MSG_CHECKING([for crashreport config])
10566     if test "$with_symbol_config" = "no"; then
10567         BREAKPAD_SYMBOL_CONFIG="invalid"
10568         AC_MSG_RESULT([no])
10569     else
10570         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10571         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10572         AC_MSG_RESULT([yes])
10573     fi
10574     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10576 AC_SUBST(ENABLE_BREAKPAD)
10577 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10579 dnl ==================================================================
10580 dnl libfuzzer
10581 dnl ==================================================================
10582 AC_MSG_CHECKING([whether to enable fuzzers])
10583 if test "$enable_fuzzers" != yes; then
10584     AC_MSG_RESULT([no])
10585 else
10586     if test $LIB_FUZZING_ENGINE == ""; then
10587       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10588     fi
10589     AC_MSG_RESULT([yes])
10590     ENABLE_FUZZERS="TRUE"
10591     AC_DEFINE([ENABLE_FUZZERS],1)
10592     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10594 AC_SUBST(LIB_FUZZING_ENGINE)
10595 AC_SUBST(ENABLE_FUZZERS)
10597 dnl ===================================================================
10598 dnl Orcus
10599 dnl ===================================================================
10600 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
10601 if test "$with_system_orcus" != "yes"; then
10602     if test "$SYSTEM_BOOST" = "TRUE"; then
10603         # ===========================================================
10604         # Determine if we are going to need to link with Boost.System
10605         # ===========================================================
10606         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10607         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10608         dnl in documentation has no effect.
10609         AC_MSG_CHECKING([if we need to link with Boost.System])
10610         AC_LANG_PUSH([C++])
10611         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10612                 @%:@include <boost/version.hpp>
10613             ]],[[
10614                 #if BOOST_VERSION >= 105000
10615                 #   error yes, we need to link with Boost.System
10616                 #endif
10617             ]])],[
10618                 AC_MSG_RESULT([no])
10619             ],[
10620                 AC_MSG_RESULT([yes])
10621                 AX_BOOST_SYSTEM
10622         ])
10623         AC_LANG_POP([C++])
10624     fi
10626 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10627 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10628 AC_SUBST([BOOST_SYSTEM_LIB])
10629 AC_SUBST(SYSTEM_LIBORCUS)
10631 dnl ===================================================================
10632 dnl HarfBuzz
10633 dnl ===================================================================
10634 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10635                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10636                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10638 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10639                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10640                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10642 if test "$COM" = "MSC"; then # override the above
10643     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10644     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10647 if test "$with_system_harfbuzz" = "yes"; then
10648     if test "$with_system_graphite" = "no"; then
10649         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10650     fi
10651     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10652     save_LIBS="$LIBS"
10653     save_CFLAGS="$CFLAGS"
10654     LIBS="$LIBS $HARFBUZZ_LIBS"
10655     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10656     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10657     LIBS="$save_LIBS"
10658     CFLAGS="$save_CFLAGS"
10659 else
10660     if test "$with_system_graphite" = "yes"; then
10661         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10662     fi
10665 if test "$USING_X11" = TRUE; then
10666     AC_PATH_X
10667     AC_PATH_XTRA
10668     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10670     if test -z "$x_includes"; then
10671         x_includes="default_x_includes"
10672     fi
10673     if test -z "$x_libraries"; then
10674         x_libraries="default_x_libraries"
10675     fi
10676     CFLAGS="$CFLAGS $X_CFLAGS"
10677     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10678     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10679 else
10680     x_includes="no_x_includes"
10681     x_libraries="no_x_libraries"
10684 if test "$USING_X11" = TRUE; then
10685     dnl ===================================================================
10686     dnl Check for extension headers
10687     dnl ===================================================================
10688     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10689      [#include <X11/extensions/shape.h>])
10691     # vcl needs ICE and SM
10692     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10693     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10694         [AC_MSG_ERROR(ICE library not found)])
10695     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10696     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10697         [AC_MSG_ERROR(SM library not found)])
10700 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10701     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10702     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10705 dnl ===================================================================
10706 dnl Check for system Xrender
10707 dnl ===================================================================
10708 AC_MSG_CHECKING([whether to use Xrender])
10709 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10710     AC_MSG_RESULT([yes])
10711     PKG_CHECK_MODULES(XRENDER, xrender)
10712     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10713     FilterLibs "${XRENDER_LIBS}"
10714     XRENDER_LIBS="${filteredlibs}"
10715     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10716       [AC_MSG_ERROR(libXrender not found or functional)], [])
10717     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10718       [AC_MSG_ERROR(Xrender not found. install X)], [])
10719 else
10720     AC_MSG_RESULT([no])
10722 AC_SUBST(XRENDER_CFLAGS)
10723 AC_SUBST(XRENDER_LIBS)
10725 dnl ===================================================================
10726 dnl Check for XRandr
10727 dnl ===================================================================
10728 AC_MSG_CHECKING([whether to enable RandR support])
10729 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10730     AC_MSG_RESULT([yes])
10731     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10732     if test "$ENABLE_RANDR" != "TRUE"; then
10733         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10734                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10735         XRANDR_CFLAGS=" "
10736         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10737           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10738         XRANDR_LIBS="-lXrandr "
10739         ENABLE_RANDR="TRUE"
10740     fi
10741     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10742     FilterLibs "${XRANDR_LIBS}"
10743     XRANDR_LIBS="${filteredlibs}"
10744 else
10745     ENABLE_RANDR=""
10746     AC_MSG_RESULT([no])
10748 AC_SUBST(XRANDR_CFLAGS)
10749 AC_SUBST(XRANDR_LIBS)
10750 AC_SUBST(ENABLE_RANDR)
10752 if test "$test_webdav" = yes; then
10753     if test -z "$with_webdav"; then
10754         WITH_WEBDAV=neon
10755         if test "$enable_mpl_subset" = yes; then
10756             WITH_WEBDAV=serf
10757         fi
10758     else
10759         WITH_WEBDAV="$with_webdav"
10760     fi
10763 AC_MSG_CHECKING([for webdav library])
10764 case "$WITH_WEBDAV" in
10765 serf)
10766     AC_MSG_RESULT([serf])
10767     # Check for system apr-util
10768     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10769                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10770                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10771     if test "$COM" = "MSC"; then
10772         APR_LIB_DIR="LibR"
10773         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10774         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10775     fi
10777     # Check for system serf
10778     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10779     ;;
10780 neon)
10781     AC_MSG_RESULT([neon])
10782     # Check for system neon
10783     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10784     if test "$with_system_neon" = "yes"; then
10785         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10786     else
10787         NEON_VERSION=0312
10788     fi
10789     AC_SUBST(NEON_VERSION)
10790     ;;
10792     AC_MSG_RESULT([none, disabled])
10793     WITH_WEBDAV=""
10794     ;;
10795 esac
10796 AC_SUBST(WITH_WEBDAV)
10798 dnl ===================================================================
10799 dnl Check for disabling cve_tests
10800 dnl ===================================================================
10801 AC_MSG_CHECKING([whether to execute CVE tests])
10802 # If not explicitly enabled or disabled, default
10803 if test -z "$enable_cve_tests"; then
10804     case "$OS" in
10805     WNT)
10806         # Default cves off for Windows with its wild and wonderful
10807         # variety of AV software kicking in and panicking
10808         enable_cve_tests=no
10809         ;;
10810     *)
10811         # otherwise yes
10812         enable_cve_tests=yes
10813         ;;
10814     esac
10816 if test "$enable_cve_tests" = "no"; then
10817     AC_MSG_RESULT([no])
10818     DISABLE_CVE_TESTS=TRUE
10819     AC_SUBST(DISABLE_CVE_TESTS)
10820 else
10821     AC_MSG_RESULT([yes])
10824 dnl ===================================================================
10825 dnl Check for enabling chart XShape tests
10826 dnl ===================================================================
10827 AC_MSG_CHECKING([whether to execute chart XShape tests])
10828 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10829     AC_MSG_RESULT([yes])
10830     ENABLE_CHART_TESTS=TRUE
10831     AC_SUBST(ENABLE_CHART_TESTS)
10832 else
10833     AC_MSG_RESULT([no])
10836 dnl ===================================================================
10837 dnl Check for system openssl
10838 dnl ===================================================================
10839 ENABLE_OPENSSL=
10840 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10841 if test "$enable_openssl" = "yes"; then
10842     AC_MSG_RESULT([no])
10843     ENABLE_OPENSSL=TRUE
10844     if test "$_os" = Darwin ; then
10845         # OpenSSL is deprecated when building for 10.7 or later.
10846         #
10847         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10848         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10850         with_system_openssl=no
10851         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10852     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10853             && test "$with_system_openssl" != "no"; then
10854         with_system_openssl=yes
10855         SYSTEM_OPENSSL=TRUE
10856         OPENSSL_CFLAGS=
10857         OPENSSL_LIBS="-lssl -lcrypto"
10858     else
10859         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10860     fi
10861     if test "$with_system_openssl" = "yes"; then
10862         AC_MSG_CHECKING([whether openssl supports SHA512])
10863         AC_LANG_PUSH([C])
10864         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10865             SHA512_CTX context;
10866 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10867         AC_LANG_POP(C)
10868     fi
10869 else
10870     AC_MSG_RESULT([yes])
10872     # warn that although OpenSSL is disabled, system libraries may depend on it
10873     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10874     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10877 AC_SUBST([ENABLE_OPENSSL])
10879 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10880     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10881         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10882         enable_cipher_openssl_backend=no
10883     else
10884         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10885     fi
10887 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10888 ENABLE_CIPHER_OPENSSL_BACKEND=
10889 if test "$enable_cipher_openssl_backend" = yes; then
10890     AC_MSG_RESULT([yes])
10891     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10892 else
10893     AC_MSG_RESULT([no])
10895 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
10897 dnl ===================================================================
10898 dnl Select the crypto backends used by LO
10899 dnl ===================================================================
10901 if test "$build_crypto" = yes; then
10902     if test "$OS" = WNT; then
10903         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
10904         AC_DEFINE([USE_CRYPTO_MSCAPI])
10905     elif test "$ENABLE_NSS" = TRUE; then
10906         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
10907         AC_DEFINE([USE_CRYPTO_NSS])
10908     fi
10911 dnl ===================================================================
10912 dnl Check for building gnutls
10913 dnl ===================================================================
10914 AC_MSG_CHECKING([whether to use gnutls])
10915 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
10916     AC_MSG_RESULT([yes])
10917     AM_PATH_LIBGCRYPT()
10918     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
10919         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
10920                       available in the system to use as replacement.]]))
10921     FilterLibs "${LIBGCRYPT_LIBS}"
10922     LIBGCRYPT_LIBS="${filteredlibs}"
10923 else
10924     AC_MSG_RESULT([no])
10927 AC_SUBST([LIBGCRYPT_CFLAGS])
10928 AC_SUBST([LIBGCRYPT_LIBS])
10930 dnl ===================================================================
10931 dnl Check for system redland
10932 dnl ===================================================================
10933 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
10934 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
10935 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
10936 if test "$with_system_redland" = "yes"; then
10937     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
10938             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
10939 else
10940     RAPTOR_MAJOR="0"
10941     RASQAL_MAJOR="3"
10942     REDLAND_MAJOR="0"
10944 AC_SUBST(RAPTOR_MAJOR)
10945 AC_SUBST(RASQAL_MAJOR)
10946 AC_SUBST(REDLAND_MAJOR)
10948 dnl ===================================================================
10949 dnl Check for system hunspell
10950 dnl ===================================================================
10951 AC_MSG_CHECKING([which libhunspell to use])
10952 if test "$with_system_hunspell" = "yes"; then
10953     AC_MSG_RESULT([external])
10954     SYSTEM_HUNSPELL=TRUE
10955     AC_LANG_PUSH([C++])
10956     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
10957     if test "$HUNSPELL_PC" != "TRUE"; then
10958         AC_CHECK_HEADER(hunspell.hxx, [],
10959             [
10960             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
10961             [AC_MSG_ERROR(hunspell headers not found.)], [])
10962             ], [])
10963         AC_CHECK_LIB([hunspell], [main], [:],
10964            [ AC_MSG_ERROR(hunspell library not found.) ], [])
10965         HUNSPELL_LIBS=-lhunspell
10966     fi
10967     AC_LANG_POP([C++])
10968     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10969     FilterLibs "${HUNSPELL_LIBS}"
10970     HUNSPELL_LIBS="${filteredlibs}"
10971 else
10972     AC_MSG_RESULT([internal])
10973     SYSTEM_HUNSPELL=
10974     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
10975     if test "$COM" = "MSC"; then
10976         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
10977     else
10978         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
10979     fi
10980     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
10982 AC_SUBST(SYSTEM_HUNSPELL)
10983 AC_SUBST(HUNSPELL_CFLAGS)
10984 AC_SUBST(HUNSPELL_LIBS)
10986 dnl ===================================================================
10987 dnl Check for system zxing
10988 dnl ===================================================================
10989 AC_MSG_CHECKING([whether to use zxing])
10990 if test "$enable_zxing" = "no"; then
10991     AC_MSG_RESULT([no])
10992     ENABLE_ZXING=
10993     SYSTEM_ZXING=
10994 else
10995     AC_MSG_RESULT([yes])
10996     ENABLE_ZXING=TRUE
10997     AC_MSG_CHECKING([which libzxing to use])
10998     if test "$with_system_zxing" = "yes"; then
10999         AC_MSG_RESULT([external])
11000         SYSTEM_ZXING=TRUE
11001         AC_LANG_PUSH([C++])
11002         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11003             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11004         ZXING_CFLAGS=-I/usr/include/ZXing
11005         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11006             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11007             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11008         AC_LANG_POP([C++])
11009         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11010         FilterLibs "${ZXING_LIBS}"
11011         ZXING_LIBS="${filteredlibs}"
11012     else
11013         AC_MSG_RESULT([internal])
11014         SYSTEM_ZXING=
11015         BUILD_TYPE="$BUILD_TYPE ZXING"
11016     fi
11017     if test "$ENABLE_ZXING" = TRUE; then
11018         AC_DEFINE(ENABLE_ZXING)
11019     fi
11021 AC_SUBST(SYSTEM_ZXING)
11022 AC_SUBST(ENABLE_ZXING)
11023 AC_SUBST(ZXING_CFLAGS)
11024 AC_SUBST(ZXING_LIBS)
11026 dnl ===================================================================
11027 dnl Check for system box2d
11028 dnl ===================================================================
11029 AC_MSG_CHECKING([which box2d to use])
11030 if test "$with_system_box2d" = "yes"; then
11031     AC_MSG_RESULT([external])
11032     SYSTEM_BOX2D=TRUE
11033     AC_LANG_PUSH([C++])
11034     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11035         [BOX2D_H_FOUND='FALSE'])
11036     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11037         _BOX2D_LIB=box2d
11038         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11039     else
11040         # fail this. there's no other alternative to check when we are here.
11041         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11042             [AC_MSG_ERROR(box2d headers not found.)])
11043         _BOX2D_LIB=Box2D
11044         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11045     fi
11046     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11047         [ AC_MSG_ERROR(box2d library not found.) ], [])
11048     BOX2D_LIBS=-l$_BOX2D_LIB
11049     AC_LANG_POP([C++])
11050     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11051     FilterLibs "${BOX2D_LIBS}"
11052     BOX2D_LIBS="${filteredlibs}"
11053 else
11054     AC_MSG_RESULT([internal])
11055     SYSTEM_BOX2D=
11056     BUILD_TYPE="$BUILD_TYPE BOX2D"
11058 AC_SUBST(SYSTEM_BOX2D)
11059 AC_SUBST(BOX2D_CFLAGS)
11060 AC_SUBST(BOX2D_LIBS)
11062 dnl ===================================================================
11063 dnl Checking for altlinuxhyph
11064 dnl ===================================================================
11065 AC_MSG_CHECKING([which altlinuxhyph to use])
11066 if test "$with_system_altlinuxhyph" = "yes"; then
11067     AC_MSG_RESULT([external])
11068     SYSTEM_HYPH=TRUE
11069     AC_CHECK_HEADER(hyphen.h, [],
11070        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11071     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11072        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11073        [#include <hyphen.h>])
11074     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11075         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11076     if test -z "$HYPHEN_LIB"; then
11077         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11078            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11079     fi
11080     if test -z "$HYPHEN_LIB"; then
11081         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11082            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11083     fi
11084 else
11085     AC_MSG_RESULT([internal])
11086     SYSTEM_HYPH=
11087     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11088     if test "$COM" = "MSC"; then
11089         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11090     else
11091         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11092     fi
11094 AC_SUBST(SYSTEM_HYPH)
11095 AC_SUBST(HYPHEN_LIB)
11097 dnl ===================================================================
11098 dnl Checking for mythes
11099 dnl ===================================================================
11100 AC_MSG_CHECKING([which mythes to use])
11101 if test "$with_system_mythes" = "yes"; then
11102     AC_MSG_RESULT([external])
11103     SYSTEM_MYTHES=TRUE
11104     AC_LANG_PUSH([C++])
11105     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11106     if test "$MYTHES_PKGCONFIG" = "no"; then
11107         AC_CHECK_HEADER(mythes.hxx, [],
11108             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11109         AC_CHECK_LIB([mythes-1.2], [main], [:],
11110             [ MYTHES_FOUND=no], [])
11111     if test "$MYTHES_FOUND" = "no"; then
11112         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11113                 [ MYTHES_FOUND=no], [])
11114     fi
11115     if test "$MYTHES_FOUND" = "no"; then
11116         AC_MSG_ERROR([mythes library not found!.])
11117     fi
11118     fi
11119     AC_LANG_POP([C++])
11120     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11121     FilterLibs "${MYTHES_LIBS}"
11122     MYTHES_LIBS="${filteredlibs}"
11123 else
11124     AC_MSG_RESULT([internal])
11125     SYSTEM_MYTHES=
11126     BUILD_TYPE="$BUILD_TYPE MYTHES"
11127     if test "$COM" = "MSC"; then
11128         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11129     else
11130         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11131     fi
11133 AC_SUBST(SYSTEM_MYTHES)
11134 AC_SUBST(MYTHES_CFLAGS)
11135 AC_SUBST(MYTHES_LIBS)
11137 dnl ===================================================================
11138 dnl How should we build the linear programming solver ?
11139 dnl ===================================================================
11141 ENABLE_COINMP=
11142 AC_MSG_CHECKING([whether to build with CoinMP])
11143 if test "$enable_coinmp" != "no"; then
11144     ENABLE_COINMP=TRUE
11145     AC_MSG_RESULT([yes])
11146     if test "$with_system_coinmp" = "yes"; then
11147         SYSTEM_COINMP=TRUE
11148         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11149         FilterLibs "${COINMP_LIBS}"
11150         COINMP_LIBS="${filteredlibs}"
11151     else
11152         BUILD_TYPE="$BUILD_TYPE COINMP"
11153     fi
11154 else
11155     AC_MSG_RESULT([no])
11157 AC_SUBST(ENABLE_COINMP)
11158 AC_SUBST(SYSTEM_COINMP)
11159 AC_SUBST(COINMP_CFLAGS)
11160 AC_SUBST(COINMP_LIBS)
11162 ENABLE_LPSOLVE=
11163 AC_MSG_CHECKING([whether to build with lpsolve])
11164 if test "$enable_lpsolve" != "no"; then
11165     ENABLE_LPSOLVE=TRUE
11166     AC_MSG_RESULT([yes])
11167 else
11168     AC_MSG_RESULT([no])
11170 AC_SUBST(ENABLE_LPSOLVE)
11172 if test "$ENABLE_LPSOLVE" = TRUE; then
11173     AC_MSG_CHECKING([which lpsolve to use])
11174     if test "$with_system_lpsolve" = "yes"; then
11175         AC_MSG_RESULT([external])
11176         SYSTEM_LPSOLVE=TRUE
11177         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11178            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11179         save_LIBS=$LIBS
11180         # some systems need this. Like Ubuntu...
11181         AC_CHECK_LIB(m, floor)
11182         AC_CHECK_LIB(dl, dlopen)
11183         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11184             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11185         LIBS=$save_LIBS
11186     else
11187         AC_MSG_RESULT([internal])
11188         SYSTEM_LPSOLVE=
11189         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11190     fi
11192 AC_SUBST(SYSTEM_LPSOLVE)
11194 dnl ===================================================================
11195 dnl Checking for libexttextcat
11196 dnl ===================================================================
11197 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11198 if test "$with_system_libexttextcat" = "yes"; then
11199     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11201 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11203 dnl ===================================================================
11204 dnl Checking for libnumbertext
11205 dnl ===================================================================
11206 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11207 if test "$with_system_libnumbertext" = "yes"; then
11208     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11209     SYSTEM_LIBNUMBERTEXT=YES
11210 else
11211     SYSTEM_LIBNUMBERTEXT=
11212     AC_LANG_PUSH([C++])
11213     save_CPPFLAGS=$CPPFLAGS
11214     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11215     AC_CHECK_HEADERS([codecvt regex])
11216     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11217             [ LIBNUMBERTEXT_CFLAGS=''
11218               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11219                            Enable libnumbertext fallback (missing number to number name conversion).])
11220             ])
11221     CPPFLAGS=$save_CPPFLAGS
11222     AC_LANG_POP([C++])
11224 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11225 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11226 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11228 dnl ***************************************
11229 dnl testing libc version for Linux...
11230 dnl ***************************************
11231 if test "$_os" = "Linux"; then
11232     AC_MSG_CHECKING([whether libc is >= 2.1.1])
11233     exec 6>/dev/null # no output
11234     AC_CHECK_LIB(c, gnu_get_libc_version, HAVE_LIBC=yes; export HAVE_LIBC)
11235     exec 6>&1 # output on again
11236     if test "$HAVE_LIBC"; then
11237         AC_MSG_RESULT([yes])
11238     else
11239         AC_MSG_ERROR([no, upgrade libc])
11240     fi
11243 dnl =========================================
11244 dnl Check for uuidgen
11245 dnl =========================================
11246 if test "$_os" = "WINNT"; then
11247     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11248     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11249     UUIDGEN=uuidgen.exe
11250     AC_SUBST(UUIDGEN)
11251 else
11252     AC_PATH_PROG([UUIDGEN], [uuidgen])
11253     if test -z "$UUIDGEN"; then
11254         AC_MSG_WARN([uuid is needed for building installation sets])
11255     fi
11258 dnl ***************************************
11259 dnl Checking for bison and flex
11260 dnl ***************************************
11261 AC_PATH_PROG(BISON, bison)
11262 if test -z "$BISON"; then
11263     AC_MSG_ERROR([no bison found in \$PATH, install it])
11264 else
11265     AC_MSG_CHECKING([the bison version])
11266     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11267     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11268     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11269     dnl cause
11270     dnl
11271     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]
11272     dnl   typedef union YYSTYPE
11273     dnl           ~~~~~~^~~~~~~
11274     dnl
11275     dnl while at least 3.4.1 is know to be good:
11276     if test "$COMPILER_PLUGINS" = TRUE; then
11277         if test "$_bison_longver" -lt 2004; then
11278             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11279         fi
11280     else
11281         if test "$_bison_longver" -lt 2000; then
11282             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11283         fi
11284     fi
11286 AC_SUBST([BISON])
11288 AC_PATH_PROG(FLEX, flex)
11289 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11290     FLEX=`cygpath -m $FLEX`
11292 if test -z "$FLEX"; then
11293     AC_MSG_ERROR([no flex found in \$PATH, install it])
11294 else
11295     AC_MSG_CHECKING([the flex version])
11296     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11297     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11298         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11299     fi
11301 AC_SUBST([FLEX])
11302 dnl ***************************************
11303 dnl Checking for patch
11304 dnl ***************************************
11305 AC_PATH_PROG(PATCH, patch)
11306 if test -z "$PATCH"; then
11307     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11310 dnl On Solaris or macOS, check if --with-gnu-patch was used
11311 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11312     if test -z "$with_gnu_patch"; then
11313         GNUPATCH=$PATCH
11314     else
11315         if test -x "$with_gnu_patch"; then
11316             GNUPATCH=$with_gnu_patch
11317         else
11318             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11319         fi
11320     fi
11322     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11323     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11324         AC_MSG_RESULT([yes])
11325     else
11326         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11327     fi
11328 else
11329     GNUPATCH=$PATCH
11332 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11333     GNUPATCH=`cygpath -m $GNUPATCH`
11336 dnl We also need to check for --with-gnu-cp
11338 if test -z "$with_gnu_cp"; then
11339     # check the place where the good stuff is hidden on Solaris...
11340     if test -x /usr/gnu/bin/cp; then
11341         GNUCP=/usr/gnu/bin/cp
11342     else
11343         AC_PATH_PROGS(GNUCP, gnucp cp)
11344     fi
11345     if test -z $GNUCP; then
11346         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11347     fi
11348 else
11349     if test -x "$with_gnu_cp"; then
11350         GNUCP=$with_gnu_cp
11351     else
11352         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11353     fi
11356 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11357     GNUCP=`cygpath -m $GNUCP`
11360 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11361 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11362     AC_MSG_RESULT([yes])
11363 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11364     AC_MSG_RESULT([yes])
11365 else
11366     case "$build_os" in
11367     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11368         x_GNUCP=[\#]
11369         GNUCP=''
11370         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11371         ;;
11372     *)
11373         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11374         ;;
11375     esac
11378 AC_SUBST(GNUPATCH)
11379 AC_SUBST(GNUCP)
11380 AC_SUBST(x_GNUCP)
11382 dnl ***************************************
11383 dnl testing assembler path
11384 dnl ***************************************
11385 ML_EXE=""
11386 if test "$_os" = "WINNT"; then
11387     case "$WIN_HOST_ARCH" in
11388     x86) assembler=ml.exe ;;
11389     x64) assembler=ml64.exe ;;
11390     arm64) assembler=armasm64.exe ;;
11391     esac
11393     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11394     if test -f "$MSVC_HOST_PATH/$assembler"; then
11395         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11396         AC_MSG_RESULT([$ML_EXE])
11397     else
11398         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11399     fi
11402 AC_SUBST(ML_EXE)
11404 dnl ===================================================================
11405 dnl We need zip and unzip
11406 dnl ===================================================================
11407 AC_PATH_PROG(ZIP, zip)
11408 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11409 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11410     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],,)
11413 AC_PATH_PROG(UNZIP, unzip)
11414 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11416 dnl ===================================================================
11417 dnl Zip must be a specific type for different build types.
11418 dnl ===================================================================
11419 if test $build_os = cygwin; then
11420     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11421         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11422     fi
11425 dnl ===================================================================
11426 dnl We need touch with -h option support.
11427 dnl ===================================================================
11428 AC_PATH_PROG(TOUCH, touch)
11429 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11430 touch "$WARNINGS_FILE"
11431 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11432     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],,)
11435 dnl ===================================================================
11436 dnl Check for system epoxy
11437 dnl ===================================================================
11438 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11440 dnl ===================================================================
11441 dnl Set vcl option: coordinate device in double or sal_Int32
11442 dnl ===================================================================
11444 dnl disabled for now, we don't want subtle differences between OSs
11445 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11446 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11447 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11448 dnl     AC_MSG_RESULT([double])
11449 dnl else
11450 dnl     AC_MSG_RESULT([sal_Int32])
11451 dnl fi
11453 dnl ===================================================================
11454 dnl Show which vclplugs will be built.
11455 dnl ===================================================================
11456 R=""
11457 if test "$USING_X11" != TRUE; then
11458     enable_gtk3=no
11461 ENABLE_GTK3=""
11462 if test "x$enable_gtk3" = "xyes"; then
11463     ENABLE_GTK3="TRUE"
11464     AC_DEFINE(ENABLE_GTK3)
11465     R="$R gtk3"
11467 AC_SUBST(ENABLE_GTK3)
11469 ENABLE_GTK3_KDE5=""
11470 if test "x$enable_gtk3_kde5" = "xyes"; then
11471     ENABLE_GTK3_KDE5="TRUE"
11472     AC_DEFINE(ENABLE_GTK3_KDE5)
11473     R="$R gtk3_kde5"
11475 AC_SUBST(ENABLE_GTK3_KDE5)
11477 ENABLE_GTK4=""
11478 if test "x$enable_gtk4" = "xyes"; then
11479     ENABLE_GTK4="TRUE"
11480     AC_DEFINE(ENABLE_GTK4)
11481     R="$R gtk4"
11483 AC_SUBST(ENABLE_GTK4)
11485 ENABLE_QT5=""
11486 if test "x$enable_qt5" = "xyes"; then
11487     ENABLE_QT5="TRUE"
11488     AC_DEFINE(ENABLE_QT5)
11489     R="$R qt5"
11491 AC_SUBST(ENABLE_QT5)
11493 ENABLE_KF5=""
11494 if test "x$enable_kf5" = "xyes"; then
11495     ENABLE_KF5="TRUE"
11496     AC_DEFINE(ENABLE_KF5)
11497     R="$R kf5"
11499 AC_SUBST(ENABLE_KF5)
11501 if test "x$USING_X11" = "xyes"; then
11502     R="$R gen"
11505 if test "$_os" = "WINNT"; then
11506     R="$R win"
11507 elif test "$_os" = "Darwin"; then
11508     R="$R osx"
11509 elif test "$_os" = "iOS"; then
11510     R="ios"
11511 elif test "$_os" = Android; then
11512     R="android"
11515 build_vcl_plugins="$R"
11516 if test -z "$build_vcl_plugins"; then
11517     build_vcl_plugins=" none"
11519 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11520 VCL_PLUGIN_INFO=$R
11521 AC_SUBST([VCL_PLUGIN_INFO])
11523 dnl ===================================================================
11524 dnl Check for GTK libraries
11525 dnl ===================================================================
11527 GTK3_CFLAGS=""
11528 GTK3_LIBS=""
11529 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11530     if test "$with_system_cairo" = no; then
11531         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11532     fi
11533     : ${with_system_cairo:=yes}
11534     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)
11535     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11536     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11537     FilterLibs "${GTK3_LIBS}"
11538     GTK3_LIBS="${filteredlibs}"
11540     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11541     if test "$with_system_epoxy" != "yes"; then
11542         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11543         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11544                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11545     fi
11547 AC_SUBST(GTK3_LIBS)
11548 AC_SUBST(GTK3_CFLAGS)
11550 GTK4_CFLAGS=""
11551 GTK4_LIBS=""
11552 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11553     if test "$with_system_cairo" = no; then
11554         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11555     fi
11556     : ${with_system_cairo:=yes}
11557     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11558     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11559     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11560     FilterLibs "${GTK4_LIBS}"
11561     GTK4_LIBS="${filteredlibs}"
11563     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11564     if test "$with_system_epoxy" != "yes"; then
11565         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11566         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11567                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11568     fi
11570 AC_SUBST(GTK4_LIBS)
11571 AC_SUBST(GTK4_CFLAGS)
11573 if test "$enable_introspection" = yes; then
11574     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11575         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11576     else
11577         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11578     fi
11581 dnl ===================================================================
11582 dnl check for dbus support
11583 dnl ===================================================================
11584 ENABLE_DBUS=""
11585 DBUS_CFLAGS=""
11586 DBUS_LIBS=""
11587 DBUS_GLIB_CFLAGS=""
11588 DBUS_GLIB_LIBS=""
11589 DBUS_HAVE_GLIB=""
11591 if test "$enable_dbus" = "no"; then
11592     test_dbus=no
11595 AC_MSG_CHECKING([whether to enable DBUS support])
11596 if test "$test_dbus" = "yes"; then
11597     ENABLE_DBUS="TRUE"
11598     AC_MSG_RESULT([yes])
11599     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11600     AC_DEFINE(ENABLE_DBUS)
11601     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11602     FilterLibs "${DBUS_LIBS}"
11603     DBUS_LIBS="${filteredlibs}"
11605     # Glib is needed for BluetoothServer
11606     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11607     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11608         [
11609             DBUS_HAVE_GLIB="TRUE"
11610             AC_DEFINE(DBUS_HAVE_GLIB,1)
11611         ],
11612         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11613     )
11614 else
11615     AC_MSG_RESULT([no])
11618 AC_SUBST(ENABLE_DBUS)
11619 AC_SUBST(DBUS_CFLAGS)
11620 AC_SUBST(DBUS_LIBS)
11621 AC_SUBST(DBUS_GLIB_CFLAGS)
11622 AC_SUBST(DBUS_GLIB_LIBS)
11623 AC_SUBST(DBUS_HAVE_GLIB)
11625 AC_MSG_CHECKING([whether to enable Impress remote control])
11626 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11627     AC_MSG_RESULT([yes])
11628     ENABLE_SDREMOTE=TRUE
11629     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11631     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11632         # The Bluetooth code doesn't compile with macOS SDK 10.15
11633         if test "$enable_sdremote_bluetooth" = yes; then
11634             AC_MSG_ERROR([macOS SDK $with_macosx_sdk does not currently support --enable-sdremote-bluetooth])
11635         fi
11636         enable_sdremote_bluetooth=no
11637     fi
11638     # If not explicitly enabled or disabled, default
11639     if test -z "$enable_sdremote_bluetooth"; then
11640         case "$OS" in
11641         LINUX|MACOSX|WNT)
11642             # Default to yes for these
11643             enable_sdremote_bluetooth=yes
11644             ;;
11645         *)
11646             # otherwise no
11647             enable_sdremote_bluetooth=no
11648             ;;
11649         esac
11650     fi
11651     # $enable_sdremote_bluetooth is guaranteed non-empty now
11653     if test "$enable_sdremote_bluetooth" != "no"; then
11654         if test "$OS" = "LINUX"; then
11655             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11656                 AC_MSG_RESULT([yes])
11657                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11658                 dnl ===================================================================
11659                 dnl Check for system bluez
11660                 dnl ===================================================================
11661                 AC_MSG_CHECKING([which Bluetooth header to use])
11662                 if test "$with_system_bluez" = "yes"; then
11663                     AC_MSG_RESULT([external])
11664                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11665                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11666                     SYSTEM_BLUEZ=TRUE
11667                 else
11668                     AC_MSG_RESULT([internal])
11669                     SYSTEM_BLUEZ=
11670                 fi
11671             else
11672                 AC_MSG_RESULT([no, dbus disabled])
11673                 ENABLE_SDREMOTE_BLUETOOTH=
11674                 SYSTEM_BLUEZ=
11675             fi
11676         else
11677             AC_MSG_RESULT([yes])
11678             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11679             SYSTEM_BLUEZ=
11680         fi
11681     else
11682         AC_MSG_RESULT([no])
11683         ENABLE_SDREMOTE_BLUETOOTH=
11684         SYSTEM_BLUEZ=
11685     fi
11686 else
11687     ENABLE_SDREMOTE=
11688     SYSTEM_BLUEZ=
11689     AC_MSG_RESULT([no])
11691 AC_SUBST(ENABLE_SDREMOTE)
11692 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11693 AC_SUBST(SYSTEM_BLUEZ)
11695 dnl ===================================================================
11696 dnl Check whether to enable GIO support
11697 dnl ===================================================================
11698 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11699     AC_MSG_CHECKING([whether to enable GIO support])
11700     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11701         dnl Need at least 2.26 for the dbus support.
11702         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11703                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11704         if test "$ENABLE_GIO" = "TRUE"; then
11705             AC_DEFINE(ENABLE_GIO)
11706             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11707             FilterLibs "${GIO_LIBS}"
11708             GIO_LIBS="${filteredlibs}"
11709         fi
11710     else
11711         AC_MSG_RESULT([no])
11712     fi
11714 AC_SUBST(ENABLE_GIO)
11715 AC_SUBST(GIO_CFLAGS)
11716 AC_SUBST(GIO_LIBS)
11719 dnl ===================================================================
11721 SPLIT_APP_MODULES=""
11722 if test "$enable_split_app_modules" = "yes"; then
11723     SPLIT_APP_MODULES="TRUE"
11725 AC_SUBST(SPLIT_APP_MODULES)
11727 SPLIT_OPT_FEATURES=""
11728 if test "$enable_split_opt_features" = "yes"; then
11729     SPLIT_OPT_FEATURES="TRUE"
11731 AC_SUBST(SPLIT_OPT_FEATURES)
11733 dnl ===================================================================
11734 dnl Check whether the GStreamer libraries are available.
11735 dnl ===================================================================
11737 ENABLE_GSTREAMER_1_0=""
11739 if test "$test_gstreamer_1_0" = yes; then
11741     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11742     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11743         ENABLE_GSTREAMER_1_0="TRUE"
11744         AC_MSG_RESULT([yes])
11745         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11746         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11747         FilterLibs "${GSTREAMER_1_0_LIBS}"
11748         GSTREAMER_1_0_LIBS="${filteredlibs}"
11749         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11750     else
11751         AC_MSG_RESULT([no])
11752     fi
11754 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11755 AC_SUBST(GSTREAMER_1_0_LIBS)
11756 AC_SUBST(ENABLE_GSTREAMER_1_0)
11758 ENABLE_OPENGL_TRANSITIONS=
11759 ENABLE_OPENGL_CANVAS=
11760 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11761    : # disable
11762 elif test "$_os" = "Darwin"; then
11763     # We use frameworks on macOS, no need for detail checks
11764     ENABLE_OPENGL_TRANSITIONS=TRUE
11765     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11766     ENABLE_OPENGL_CANVAS=TRUE
11767 elif test $_os = WINNT; then
11768     ENABLE_OPENGL_TRANSITIONS=TRUE
11769     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11770     ENABLE_OPENGL_CANVAS=TRUE
11771 else
11772     if test "$USING_X11" = TRUE; then
11773         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11774         ENABLE_OPENGL_TRANSITIONS=TRUE
11775         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11776         ENABLE_OPENGL_CANVAS=TRUE
11777     fi
11780 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11781 AC_SUBST(ENABLE_OPENGL_CANVAS)
11783 dnl =================================================
11784 dnl Check whether to build with OpenCL support.
11785 dnl =================================================
11787 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11788     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11789     # platform (optional at run-time, used through clew).
11790     BUILD_TYPE="$BUILD_TYPE OPENCL"
11791     AC_DEFINE(HAVE_FEATURE_OPENCL)
11794 dnl =================================================
11795 dnl Check whether to build with dconf support.
11796 dnl =================================================
11798 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11799     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11800         if test "$enable_dconf" = yes; then
11801             AC_MSG_ERROR([dconf not found])
11802         else
11803             enable_dconf=no
11804         fi])
11806 AC_MSG_CHECKING([whether to enable dconf])
11807 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11808     DCONF_CFLAGS=
11809     DCONF_LIBS=
11810     ENABLE_DCONF=
11811     AC_MSG_RESULT([no])
11812 else
11813     ENABLE_DCONF=TRUE
11814     AC_DEFINE(ENABLE_DCONF)
11815     AC_MSG_RESULT([yes])
11817 AC_SUBST([DCONF_CFLAGS])
11818 AC_SUBST([DCONF_LIBS])
11819 AC_SUBST([ENABLE_DCONF])
11821 # pdf import?
11822 AC_MSG_CHECKING([whether to build the PDF import feature])
11823 ENABLE_PDFIMPORT=
11824 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11825     AC_MSG_RESULT([yes])
11826     ENABLE_PDFIMPORT=TRUE
11827     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11828 else
11829     AC_MSG_RESULT([no])
11832 # Pdfium?
11833 AC_MSG_CHECKING([whether to build PDFium])
11834 ENABLE_PDFIUM=
11835 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11836     AC_MSG_RESULT([yes])
11837     ENABLE_PDFIUM=TRUE
11838     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11839 else
11840     AC_MSG_RESULT([no])
11842 AC_SUBST(ENABLE_PDFIUM)
11844 dnl ===================================================================
11845 dnl Check for poppler
11846 dnl ===================================================================
11847 ENABLE_POPPLER=
11848 AC_MSG_CHECKING([whether to build Poppler])
11849 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11850     AC_MSG_RESULT([yes])
11851     ENABLE_POPPLER=TRUE
11852     AC_DEFINE(HAVE_FEATURE_POPPLER)
11853 else
11854     AC_MSG_RESULT([no])
11856 AC_SUBST(ENABLE_POPPLER)
11858 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
11859     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
11862 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
11863     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
11866 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
11867     dnl ===================================================================
11868     dnl Check for system poppler
11869     dnl ===================================================================
11870     AC_MSG_CHECKING([which PDF import poppler to use])
11871     if test "$with_system_poppler" = "yes"; then
11872         AC_MSG_RESULT([external])
11873         SYSTEM_POPPLER=TRUE
11874         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
11875         AC_LANG_PUSH([C++])
11876         save_CXXFLAGS=$CXXFLAGS
11877         save_CPPFLAGS=$CPPFLAGS
11878         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
11879         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
11880         AC_CHECK_HEADER([cpp/poppler-version.h],
11881             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
11882             [])
11883         CXXFLAGS=$save_CXXFLAGS
11884         CPPFLAGS=$save_CPPFLAGS
11885         AC_LANG_POP([C++])
11886         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11888         FilterLibs "${POPPLER_LIBS}"
11889         POPPLER_LIBS="${filteredlibs}"
11890     else
11891         AC_MSG_RESULT([internal])
11892         SYSTEM_POPPLER=
11893         BUILD_TYPE="$BUILD_TYPE POPPLER"
11894         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
11895     fi
11896     AC_DEFINE([ENABLE_PDFIMPORT],1)
11898 AC_SUBST(ENABLE_PDFIMPORT)
11899 AC_SUBST(SYSTEM_POPPLER)
11900 AC_SUBST(POPPLER_CFLAGS)
11901 AC_SUBST(POPPLER_LIBS)
11903 # Skia?
11904 AC_MSG_CHECKING([whether to build Skia])
11905 ENABLE_SKIA=
11906 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
11907     if test "$enable_skia" = "debug"; then
11908         AC_MSG_RESULT([yes (debug)])
11909         ENABLE_SKIA_DEBUG=TRUE
11910     else
11911         AC_MSG_RESULT([yes])
11912         ENABLE_SKIA_DEBUG=
11913     fi
11914     ENABLE_SKIA=TRUE
11915     AC_DEFINE(HAVE_FEATURE_SKIA)
11916     BUILD_TYPE="$BUILD_TYPE SKIA"
11917 else
11918     AC_MSG_RESULT([no])
11920 AC_SUBST(ENABLE_SKIA)
11921 AC_SUBST(ENABLE_SKIA_DEBUG)
11923 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
11924 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
11925 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
11926 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
11927 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
11928 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
11929 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
11930 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
11931 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
11933 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE -a ! \( "$_os" = "WINNT" -a "$CPUNAME" = "AARCH64" \); then
11934     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
11935         AC_MSG_CHECKING([for Clang])
11936         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
11937     else
11938         if test "$_os" = "WINNT"; then
11939             AC_MSG_CHECKING([for clang-cl])
11940             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
11941                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
11942                 dnl explicitly set -m32/-m64
11943                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
11944                 LO_CLANG_CXX="$LO_CLANG_CC"
11945                 AC_MSG_RESULT([$LO_CLANG_CC])
11946             else
11947                 AC_MSG_RESULT([no])
11948             fi
11949         else
11950             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
11951             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
11952         fi
11953     fi
11954     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
11955         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
11956         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
11957         if test "$clang2_ver" -lt 50002; then
11958             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
11959             LO_CLANG_CC=
11960             LO_CLANG_CXX=
11961         fi
11962     fi
11963     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
11964         # Skia is the default on Windows, so hard-require Clang.
11965         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
11966         if test "$_os" = "WINNT"; then
11967             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang.])
11968         else
11969             AC_MSG_WARN([Clang compiler not found.])
11970         fi
11971     else
11973         save_CXX="$CXX"
11974         CXX="$LO_CLANG_CXX"
11975         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
11976         flag_sse2=-msse2
11977         flag_ssse3=-mssse3
11978         flag_sse41=-msse4.1
11979         flag_sse42=-msse4.2
11980         flag_avx=-mavx
11981         flag_avx2=-mavx2
11982         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
11983         flag_f16c=-mf16c
11984         flag_fma=-mfma
11986         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
11987         AC_LANG_PUSH([C++])
11988         save_CXXFLAGS=$CXXFLAGS
11989         CXXFLAGS="$CXXFLAGS $flag_sse2"
11990         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11991             #include <emmintrin.h>
11992             int main () {
11993                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
11994                 c = _mm_xor_si128 (a, b);
11995                 return 0;
11996             }
11997             ])],
11998             [can_compile_sse2=yes],
11999             [can_compile_sse2=no])
12000         AC_LANG_POP([C++])
12001         CXXFLAGS=$save_CXXFLAGS
12002         AC_MSG_RESULT([${can_compile_sse2}])
12003         if test "${can_compile_sse2}" = "yes" ; then
12004             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12005         fi
12007         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12008         AC_LANG_PUSH([C++])
12009         save_CXXFLAGS=$CXXFLAGS
12010         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12011         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12012             #include <tmmintrin.h>
12013             int main () {
12014                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12015                 c = _mm_maddubs_epi16 (a, b);
12016                 return 0;
12017             }
12018             ])],
12019             [can_compile_ssse3=yes],
12020             [can_compile_ssse3=no])
12021         AC_LANG_POP([C++])
12022         CXXFLAGS=$save_CXXFLAGS
12023         AC_MSG_RESULT([${can_compile_ssse3}])
12024         if test "${can_compile_ssse3}" = "yes" ; then
12025             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12026         fi
12028         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12029         AC_LANG_PUSH([C++])
12030         save_CXXFLAGS=$CXXFLAGS
12031         CXXFLAGS="$CXXFLAGS $flag_sse41"
12032         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12033             #include <smmintrin.h>
12034             int main () {
12035                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12036                 c = _mm_cmpeq_epi64 (a, b);
12037                 return 0;
12038             }
12039             ])],
12040             [can_compile_sse41=yes],
12041             [can_compile_sse41=no])
12042         AC_LANG_POP([C++])
12043         CXXFLAGS=$save_CXXFLAGS
12044         AC_MSG_RESULT([${can_compile_sse41}])
12045         if test "${can_compile_sse41}" = "yes" ; then
12046             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12047         fi
12049         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12050         AC_LANG_PUSH([C++])
12051         save_CXXFLAGS=$CXXFLAGS
12052         CXXFLAGS="$CXXFLAGS $flag_sse42"
12053         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12054             #include <nmmintrin.h>
12055             int main () {
12056                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12057                 c = _mm_cmpgt_epi64 (a, b);
12058                 return 0;
12059             }
12060             ])],
12061             [can_compile_sse42=yes],
12062             [can_compile_sse42=no])
12063         AC_LANG_POP([C++])
12064         CXXFLAGS=$save_CXXFLAGS
12065         AC_MSG_RESULT([${can_compile_sse42}])
12066         if test "${can_compile_sse42}" = "yes" ; then
12067             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12068         fi
12070         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12071         AC_LANG_PUSH([C++])
12072         save_CXXFLAGS=$CXXFLAGS
12073         CXXFLAGS="$CXXFLAGS $flag_avx"
12074         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12075             #include <immintrin.h>
12076             int main () {
12077                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12078                 c = _mm256_xor_ps(a, b);
12079                 return 0;
12080             }
12081             ])],
12082             [can_compile_avx=yes],
12083             [can_compile_avx=no])
12084         AC_LANG_POP([C++])
12085         CXXFLAGS=$save_CXXFLAGS
12086         AC_MSG_RESULT([${can_compile_avx}])
12087         if test "${can_compile_avx}" = "yes" ; then
12088             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12089         fi
12091         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12092         AC_LANG_PUSH([C++])
12093         save_CXXFLAGS=$CXXFLAGS
12094         CXXFLAGS="$CXXFLAGS $flag_avx2"
12095         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12096             #include <immintrin.h>
12097             int main () {
12098                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12099                 c = _mm256_maddubs_epi16(a, b);
12100                 return 0;
12101             }
12102             ])],
12103             [can_compile_avx2=yes],
12104             [can_compile_avx2=no])
12105         AC_LANG_POP([C++])
12106         CXXFLAGS=$save_CXXFLAGS
12107         AC_MSG_RESULT([${can_compile_avx2}])
12108         if test "${can_compile_avx2}" = "yes" ; then
12109             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12110         fi
12112         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12113         AC_LANG_PUSH([C++])
12114         save_CXXFLAGS=$CXXFLAGS
12115         CXXFLAGS="$CXXFLAGS $flag_avx512"
12116         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12117             #include <immintrin.h>
12118             int main () {
12119                 __m512i a = _mm512_loadu_si512(0);
12120                 return 0;
12121             }
12122             ])],
12123             [can_compile_avx512=yes],
12124             [can_compile_avx512=no])
12125         AC_LANG_POP([C++])
12126         CXXFLAGS=$save_CXXFLAGS
12127         AC_MSG_RESULT([${can_compile_avx512}])
12128         if test "${can_compile_avx512}" = "yes" ; then
12129             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12130         fi
12132         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12133         AC_LANG_PUSH([C++])
12134         save_CXXFLAGS=$CXXFLAGS
12135         CXXFLAGS="$CXXFLAGS $flag_f16c"
12136         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12137             #include <immintrin.h>
12138             int main () {
12139                 __m128i a = _mm_set1_epi32 (0);
12140                 __m128 c;
12141                 c = _mm_cvtph_ps(a);
12142                 return 0;
12143             }
12144             ])],
12145             [can_compile_f16c=yes],
12146             [can_compile_f16c=no])
12147         AC_LANG_POP([C++])
12148         CXXFLAGS=$save_CXXFLAGS
12149         AC_MSG_RESULT([${can_compile_f16c}])
12150         if test "${can_compile_f16c}" = "yes" ; then
12151             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12152         fi
12154         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12155         AC_LANG_PUSH([C++])
12156         save_CXXFLAGS=$CXXFLAGS
12157         CXXFLAGS="$CXXFLAGS $flag_fma"
12158         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12159             #include <immintrin.h>
12160             int main () {
12161                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12162                 d = _mm256_fmadd_ps(a, b, c);
12163                 return 0;
12164             }
12165             ])],
12166             [can_compile_fma=yes],
12167             [can_compile_fma=no])
12168         AC_LANG_POP([C++])
12169         CXXFLAGS=$save_CXXFLAGS
12170         AC_MSG_RESULT([${can_compile_fma}])
12171         if test "${can_compile_fma}" = "yes" ; then
12172             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12173         fi
12175         CXX="$save_CXX"
12176     fi
12179 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12181 UNCACHED_CLANG_CC="$LO_CLANG_CC"
12182 UNCACHED_CLANG_CXX="$LO_CLANG_CXX"
12183 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12184     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12185     AC_LANG_PUSH([C])
12186     save_CC="$CC"
12187     CC="$LO_CLANG_CC"
12188     save_CFLAGS=$CFLAGS
12189     CFLAGS="$CFLAGS --ccache-skip -O2"
12190     dnl an empty program will do, we're checking the compiler flags
12191     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12192                       [use_ccache=yes], [use_ccache=no])
12193     CFLAGS=$save_CFLAGS
12194     CC=$save_CC
12195     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12196         AC_MSG_RESULT([yes])
12197     else
12198         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12199         AC_MSG_RESULT([no])
12200     fi
12201     AC_LANG_POP([C])
12203     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12204     AC_LANG_PUSH([C++])
12205     save_CXX="$CXX"
12206     CXX="$LO_CLANG_CXX"
12207     save_CXXFLAGS=$CXXFLAGS
12208     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
12209     dnl an empty program will do, we're checking the compiler flags
12210     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12211                       [use_ccache=yes], [use_ccache=no])
12212     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12213         AC_MSG_RESULT([yes])
12214     else
12215         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12216         AC_MSG_RESULT([no])
12217     fi
12218     CXXFLAGS=$save_CXXFLAGS
12219     CXX=$save_CXX
12220     AC_LANG_POP([C++])
12223 AC_SUBST(UNCACHED_CC)
12224 AC_SUBST(UNCACHED_CXX)
12225 AC_SUBST(LO_CLANG_CC)
12226 AC_SUBST(LO_CLANG_CXX)
12227 AC_SUBST(UNCACHED_CLANG_CC)
12228 AC_SUBST(UNCACHED_CLANG_CXX)
12229 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12230 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12231 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12232 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12233 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12234 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12235 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12236 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12237 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12238 AC_SUBST(CLANG_USE_LD)
12240 SYSTEM_GPGMEPP=
12242 if test "$enable_gpgmepp" = no; then
12243     AC_MSG_CHECKING([whether to enable gpgmepp])
12244     AC_MSG_RESULT([no])
12245 elif test "$enable_mpl_subset" = "yes"; then
12246     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12247     AC_MSG_RESULT([yes])
12248 elif test "$enable_fuzzers" = "yes"; then
12249     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12250     AC_MSG_RESULT([yes])
12251 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12252     dnl ===================================================================
12253     dnl Check for system gpgme
12254     dnl ===================================================================
12255     AC_MSG_CHECKING([which gpgmepp to use])
12256     if test "$with_system_gpgmepp" = "yes"; then
12257         AC_MSG_RESULT([external])
12258         SYSTEM_GPGMEPP=TRUE
12260         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12261         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12262             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12263         # progress_callback is the only func with plain C linkage
12264         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12265         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12266             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12267         AC_CHECK_HEADER(gpgme.h, [],
12268             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12269     else
12270         AC_MSG_RESULT([internal])
12271         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12272         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12274         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12275         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12276         if test "$_os" != "WINNT"; then
12277             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12278             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12279         fi
12280     fi
12281     ENABLE_GPGMEPP=TRUE
12282     AC_DEFINE([HAVE_FEATURE_GPGME])
12283     AC_PATH_PROG(GPG, gpg)
12284     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12285     # so let's exclude that manually for the moment
12286     if test -n "$GPG" -a "$_os" != "WINNT"; then
12287         # make sure we not only have a working gpgme, but a full working
12288         # gpg installation to run OpenPGP signature verification
12289         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12290     fi
12291     if test "$_os" = "Linux"; then
12292       uid=`id -u`
12293       AC_MSG_CHECKING([for /run/user/$uid])
12294       if test -d /run/user/$uid; then
12295         AC_MSG_RESULT([yes])
12296         AC_PATH_PROG(GPGCONF, gpgconf)
12298         # Older versions of gpgconf are not working as expected, since
12299         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12300         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12301         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12302         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12303         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12304         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12305         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12306           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12307           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12308           if $GPGCONF --dump-options > /dev/null ; then
12309             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12310               AC_MSG_RESULT([yes])
12311               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12312               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12313             else
12314               AC_MSG_RESULT([no])
12315             fi
12316           else
12317             AC_MSG_RESULT([no. missing or broken gpgconf?])
12318           fi
12319         else
12320           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12321         fi
12322       else
12323         AC_MSG_RESULT([no])
12324      fi
12325    fi
12327 AC_SUBST(ENABLE_GPGMEPP)
12328 AC_SUBST(SYSTEM_GPGMEPP)
12329 AC_SUBST(GPG_ERROR_CFLAGS)
12330 AC_SUBST(GPG_ERROR_LIBS)
12331 AC_SUBST(LIBASSUAN_CFLAGS)
12332 AC_SUBST(LIBASSUAN_LIBS)
12333 AC_SUBST(GPGMEPP_CFLAGS)
12334 AC_SUBST(GPGMEPP_LIBS)
12336 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12337 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12338     AC_MSG_RESULT([yes])
12339     ENABLE_MEDIAWIKI=TRUE
12340     BUILD_TYPE="$BUILD_TYPE XSLTML"
12341     if test  "x$with_java" = "xno"; then
12342         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12343     fi
12344 else
12345     AC_MSG_RESULT([no])
12346     ENABLE_MEDIAWIKI=
12347     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12349 AC_SUBST(ENABLE_MEDIAWIKI)
12351 AC_MSG_CHECKING([whether to build the Report Builder])
12352 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12353     AC_MSG_RESULT([yes])
12354     ENABLE_REPORTBUILDER=TRUE
12355     AC_MSG_CHECKING([which jfreereport libs to use])
12356     if test "$with_system_jfreereport" = "yes"; then
12357         SYSTEM_JFREEREPORT=TRUE
12358         AC_MSG_RESULT([external])
12359         if test -z $SAC_JAR; then
12360             SAC_JAR=/usr/share/java/sac.jar
12361         fi
12362         if ! test -f $SAC_JAR; then
12363              AC_MSG_ERROR(sac.jar not found.)
12364         fi
12366         if test -z $LIBXML_JAR; then
12367             if test -f /usr/share/java/libxml-1.0.0.jar; then
12368                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12369             elif test -f /usr/share/java/libxml.jar; then
12370                 LIBXML_JAR=/usr/share/java/libxml.jar
12371             else
12372                 AC_MSG_ERROR(libxml.jar replacement not found.)
12373             fi
12374         elif ! test -f $LIBXML_JAR; then
12375             AC_MSG_ERROR(libxml.jar not found.)
12376         fi
12378         if test -z $FLUTE_JAR; then
12379             if test -f /usr/share/java/flute-1.3.0.jar; then
12380                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12381             elif test -f /usr/share/java/flute.jar; then
12382                 FLUTE_JAR=/usr/share/java/flute.jar
12383             else
12384                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12385             fi
12386         elif ! test -f $FLUTE_JAR; then
12387             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12388         fi
12390         if test -z $JFREEREPORT_JAR; then
12391             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12392                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12393             elif test -f /usr/share/java/flow-engine.jar; then
12394                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12395             else
12396                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12397             fi
12398         elif ! test -f  $JFREEREPORT_JAR; then
12399                 AC_MSG_ERROR(jfreereport.jar not found.)
12400         fi
12402         if test -z $LIBLAYOUT_JAR; then
12403             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12404                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12405             elif test -f /usr/share/java/liblayout.jar; then
12406                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12407             else
12408                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12409             fi
12410         elif ! test -f $LIBLAYOUT_JAR; then
12411                 AC_MSG_ERROR(liblayout.jar not found.)
12412         fi
12414         if test -z $LIBLOADER_JAR; then
12415             if test -f /usr/share/java/libloader-1.0.0.jar; then
12416                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12417             elif test -f /usr/share/java/libloader.jar; then
12418                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12419             else
12420                 AC_MSG_ERROR(libloader.jar replacement not found.)
12421             fi
12422         elif ! test -f  $LIBLOADER_JAR; then
12423             AC_MSG_ERROR(libloader.jar not found.)
12424         fi
12426         if test -z $LIBFORMULA_JAR; then
12427             if test -f /usr/share/java/libformula-0.2.0.jar; then
12428                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12429             elif test -f /usr/share/java/libformula.jar; then
12430                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12431             else
12432                 AC_MSG_ERROR(libformula.jar replacement not found.)
12433             fi
12434         elif ! test -f $LIBFORMULA_JAR; then
12435                 AC_MSG_ERROR(libformula.jar not found.)
12436         fi
12438         if test -z $LIBREPOSITORY_JAR; then
12439             if test -f /usr/share/java/librepository-1.0.0.jar; then
12440                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12441             elif test -f /usr/share/java/librepository.jar; then
12442                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12443             else
12444                 AC_MSG_ERROR(librepository.jar replacement not found.)
12445             fi
12446         elif ! test -f $LIBREPOSITORY_JAR; then
12447             AC_MSG_ERROR(librepository.jar not found.)
12448         fi
12450         if test -z $LIBFONTS_JAR; then
12451             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12452                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12453             elif test -f /usr/share/java/libfonts.jar; then
12454                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12455             else
12456                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12457             fi
12458         elif ! test -f $LIBFONTS_JAR; then
12459                 AC_MSG_ERROR(libfonts.jar not found.)
12460         fi
12462         if test -z $LIBSERIALIZER_JAR; then
12463             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12464                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12465             elif test -f /usr/share/java/libserializer.jar; then
12466                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12467             else
12468                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12469             fi
12470         elif ! test -f $LIBSERIALIZER_JAR; then
12471                 AC_MSG_ERROR(libserializer.jar not found.)
12472         fi
12474         if test -z $LIBBASE_JAR; then
12475             if test -f /usr/share/java/libbase-1.0.0.jar; then
12476                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12477             elif test -f /usr/share/java/libbase.jar; then
12478                 LIBBASE_JAR=/usr/share/java/libbase.jar
12479             else
12480                 AC_MSG_ERROR(libbase.jar replacement not found.)
12481             fi
12482         elif ! test -f $LIBBASE_JAR; then
12483             AC_MSG_ERROR(libbase.jar not found.)
12484         fi
12486     else
12487         AC_MSG_RESULT([internal])
12488         SYSTEM_JFREEREPORT=
12489         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12490         NEED_ANT=TRUE
12491     fi
12492 else
12493     AC_MSG_RESULT([no])
12494     ENABLE_REPORTBUILDER=
12495     SYSTEM_JFREEREPORT=
12497 AC_SUBST(ENABLE_REPORTBUILDER)
12498 AC_SUBST(SYSTEM_JFREEREPORT)
12499 AC_SUBST(SAC_JAR)
12500 AC_SUBST(LIBXML_JAR)
12501 AC_SUBST(FLUTE_JAR)
12502 AC_SUBST(JFREEREPORT_JAR)
12503 AC_SUBST(LIBBASE_JAR)
12504 AC_SUBST(LIBLAYOUT_JAR)
12505 AC_SUBST(LIBLOADER_JAR)
12506 AC_SUBST(LIBFORMULA_JAR)
12507 AC_SUBST(LIBREPOSITORY_JAR)
12508 AC_SUBST(LIBFONTS_JAR)
12509 AC_SUBST(LIBSERIALIZER_JAR)
12511 # scripting provider for BeanShell?
12512 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12513 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12514     AC_MSG_RESULT([yes])
12515     ENABLE_SCRIPTING_BEANSHELL=TRUE
12517     dnl ===================================================================
12518     dnl Check for system beanshell
12519     dnl ===================================================================
12520     AC_MSG_CHECKING([which beanshell to use])
12521     if test "$with_system_beanshell" = "yes"; then
12522         AC_MSG_RESULT([external])
12523         SYSTEM_BSH=TRUE
12524         if test -z $BSH_JAR; then
12525             BSH_JAR=/usr/share/java/bsh.jar
12526         fi
12527         if ! test -f $BSH_JAR; then
12528             AC_MSG_ERROR(bsh.jar not found.)
12529         fi
12530     else
12531         AC_MSG_RESULT([internal])
12532         SYSTEM_BSH=
12533         BUILD_TYPE="$BUILD_TYPE BSH"
12534     fi
12535 else
12536     AC_MSG_RESULT([no])
12537     ENABLE_SCRIPTING_BEANSHELL=
12538     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12540 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12541 AC_SUBST(SYSTEM_BSH)
12542 AC_SUBST(BSH_JAR)
12544 # scripting provider for JavaScript?
12545 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12546 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12547     AC_MSG_RESULT([yes])
12548     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12550     dnl ===================================================================
12551     dnl Check for system rhino
12552     dnl ===================================================================
12553     AC_MSG_CHECKING([which rhino to use])
12554     if test "$with_system_rhino" = "yes"; then
12555         AC_MSG_RESULT([external])
12556         SYSTEM_RHINO=TRUE
12557         if test -z $RHINO_JAR; then
12558             RHINO_JAR=/usr/share/java/js.jar
12559         fi
12560         if ! test -f $RHINO_JAR; then
12561             AC_MSG_ERROR(js.jar not found.)
12562         fi
12563     else
12564         AC_MSG_RESULT([internal])
12565         SYSTEM_RHINO=
12566         BUILD_TYPE="$BUILD_TYPE RHINO"
12567         NEED_ANT=TRUE
12568     fi
12569 else
12570     AC_MSG_RESULT([no])
12571     ENABLE_SCRIPTING_JAVASCRIPT=
12572     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12574 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12575 AC_SUBST(SYSTEM_RHINO)
12576 AC_SUBST(RHINO_JAR)
12578 # This is only used in Qt5/KF5 checks to determine if /usr/lib64
12579 # paths should be added to library search path. So lets put all 64-bit
12580 # platforms there.
12581 supports_multilib=
12582 case "$host_cpu" in
12583 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12584     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12585         supports_multilib="yes"
12586     fi
12587     ;;
12589     ;;
12590 esac
12592 dnl ===================================================================
12593 dnl QT5 Integration
12594 dnl ===================================================================
12596 QT5_CFLAGS=""
12597 QT5_LIBS=""
12598 QMAKE5="qmake"
12599 MOC5="moc"
12600 QT5_GOBJECT_CFLAGS=""
12601 QT5_GOBJECT_LIBS=""
12602 QT5_HAVE_GOBJECT=""
12603 QT5_PLATFORMS_SRCDIR=""
12604 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12605         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12606         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12607 then
12608     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12609     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12611     if test -n "$supports_multilib"; then
12612         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12613     fi
12615     qt5_test_include="QtWidgets/qapplication.h"
12616     if test "$_os" = "Emscripten"; then
12617         qt5_test_library="libQt5Widgets.a"
12618     else
12619         qt5_test_library="libQt5Widgets.so"
12620     fi
12622     dnl Check for qmake5
12623     if test -n "$QT5DIR"; then
12624         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12625     else
12626         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12627     fi
12628     if test "$QMAKE5" = "no"; then
12629         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12630     else
12631         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12632         if test -z "$qmake5_test_ver"; then
12633             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12634         fi
12635         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12636         qt5_minimal_minor="6"
12637         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12638             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12639         else
12640             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12641         fi
12642     fi
12644     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12645     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12646     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12647     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12649     AC_MSG_CHECKING([for Qt5 headers])
12650     qt5_incdir="no"
12651     for inc_dir in $qt5_incdirs; do
12652         if test -r "$inc_dir/$qt5_test_include"; then
12653             qt5_incdir="$inc_dir"
12654             break
12655         fi
12656     done
12657     AC_MSG_RESULT([$qt5_incdir])
12658     if test "x$qt5_incdir" = "xno"; then
12659         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12660     fi
12661     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12662     AC_LANG_PUSH([C++])
12663     save_CPPFLAGS=$CPPFLAGS
12664     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12665     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12666         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12667     CPPFLAGS=$save_CPPFLAGS
12668     AC_LANG_POP([C++])
12670     AC_MSG_CHECKING([for Qt5 libraries])
12671     qt5_libdir="no"
12672     for lib_dir in $qt5_libdirs; do
12673         if test -r "$lib_dir/$qt5_test_library"; then
12674             qt5_libdir="$lib_dir"
12675             break
12676         fi
12677     done
12678     AC_MSG_RESULT([$qt5_libdir])
12679     if test "x$qt5_libdir" = "xno"; then
12680         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12681     fi
12683     if test "$_os" = "Emscripten"; then
12684         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12685             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12686         fi
12687         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12688             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12689         fi
12690     fi
12692     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12693     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12694     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12695     if test "$_os" = "Emscripten"; then
12696         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12697     fi
12699     if test "$USING_X11" = TRUE; then
12700         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12701         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12702             QT5_HAVE_XCB_ICCCM=1
12703             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12704         ],[
12705             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)])
12706             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12707         ])
12708         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12709         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12710         QT5_USING_X11=1
12711         AC_DEFINE(QT5_USING_X11)
12712     fi
12714     dnl Check for Meta Object Compiler
12716     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12717     if test "$MOC5" = "no"; then
12718         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12719 the root of your Qt installation by exporting QT5DIR before running "configure".])
12720     fi
12722     if test "$test_gstreamer_1_0" = yes; then
12723         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12724                 QT5_HAVE_GOBJECT=1
12725                 AC_DEFINE(QT5_HAVE_GOBJECT)
12726             ],
12727             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12728         )
12729     fi
12731 AC_SUBST(QT5_CFLAGS)
12732 AC_SUBST(QT5_LIBS)
12733 AC_SUBST(MOC5)
12734 AC_SUBST(QT5_GOBJECT_CFLAGS)
12735 AC_SUBST(QT5_GOBJECT_LIBS)
12736 AC_SUBST(QT5_HAVE_GOBJECT)
12737 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12739 dnl ===================================================================
12740 dnl KF5 Integration
12741 dnl ===================================================================
12743 KF5_CFLAGS=""
12744 KF5_LIBS=""
12745 KF5_CONFIG="kf5-config"
12746 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12747         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12748 then
12749     if test "$OS" = "HAIKU"; then
12750         haiku_arch="`echo $RTL_ARCH | tr X x`"
12751         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
12752         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
12753     fi
12755     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
12756     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
12757     if test -n "$supports_multilib"; then
12758         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
12759     fi
12761     kf5_test_include="KF5/kcoreaddons_version.h"
12762     kf5_test_library="libKF5CoreAddons.so"
12763     kf5_libdirs="$qt5_libdir $kf5_libdirs"
12765     dnl kf5 KDE4 support compatibility installed
12766     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
12767     if test "$KF5_CONFIG" != "no"; then
12768         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
12769         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
12770     fi
12772     dnl Check for KF5 headers
12773     AC_MSG_CHECKING([for KF5 headers])
12774     kf5_incdir="no"
12775     for kf5_check in $kf5_incdirs; do
12776         if test -r "$kf5_check/$kf5_test_include"; then
12777             kf5_incdir="$kf5_check/KF5"
12778             break
12779         fi
12780     done
12781     AC_MSG_RESULT([$kf5_incdir])
12782     if test "x$kf5_incdir" = "xno"; then
12783         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12784     fi
12786     dnl Check for KF5 libraries
12787     AC_MSG_CHECKING([for KF5 libraries])
12788     kf5_libdir="no"
12789     for kf5_check in $kf5_libdirs; do
12790         if test -r "$kf5_check/$kf5_test_library"; then
12791             kf5_libdir="$kf5_check"
12792             break
12793         fi
12794     done
12796     AC_MSG_RESULT([$kf5_libdir])
12797     if test "x$kf5_libdir" = "xno"; then
12798         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12799     fi
12801     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"
12802     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12803     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12805     if test "$USING_X11" = TRUE; then
12806         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
12807     fi
12809     AC_LANG_PUSH([C++])
12810     save_CXXFLAGS=$CXXFLAGS
12811     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
12812     AC_MSG_CHECKING([whether KDE is >= 5.0])
12813        AC_RUN_IFELSE([AC_LANG_SOURCE([[
12814 #include <kcoreaddons_version.h>
12816 int main(int argc, char **argv) {
12817        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
12818        else return 1;
12820        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
12821     CXXFLAGS=$save_CXXFLAGS
12822     AC_LANG_POP([C++])
12824 AC_SUBST(KF5_CFLAGS)
12825 AC_SUBST(KF5_LIBS)
12827 dnl ===================================================================
12828 dnl Test whether to include Evolution 2 support
12829 dnl ===================================================================
12830 AC_MSG_CHECKING([whether to enable evolution 2 support])
12831 if test "$enable_evolution2" = yes; then
12832     AC_MSG_RESULT([yes])
12833     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
12834     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12835     FilterLibs "${GOBJECT_LIBS}"
12836     GOBJECT_LIBS="${filteredlibs}"
12837     ENABLE_EVOAB2="TRUE"
12838 else
12839     AC_MSG_RESULT([no])
12841 AC_SUBST(ENABLE_EVOAB2)
12842 AC_SUBST(GOBJECT_CFLAGS)
12843 AC_SUBST(GOBJECT_LIBS)
12845 dnl ===================================================================
12846 dnl Test which themes to include
12847 dnl ===================================================================
12848 AC_MSG_CHECKING([which themes to include])
12849 # if none given use default subset of available themes
12850 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
12851     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"
12854 WITH_THEMES=""
12855 if test "x$with_theme" != "xno"; then
12856     for theme in $with_theme; do
12857         case $theme in
12858         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" ;;
12859         default) real_theme=colibre ;;
12860         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
12861         esac
12862         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
12863     done
12865 AC_MSG_RESULT([$WITH_THEMES])
12866 AC_SUBST([WITH_THEMES])
12867 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
12868 for theme in $with_theme; do
12869     case $theme in
12870     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
12871     *) ;;
12872     esac
12873 done
12875 dnl ===================================================================
12876 dnl Test whether to integrate helppacks into the product's installer
12877 dnl ===================================================================
12878 AC_MSG_CHECKING([for helppack integration])
12879 if test "$with_helppack_integration" = "no"; then
12880     AC_MSG_RESULT([no integration])
12881 else
12882     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
12883     AC_MSG_RESULT([integration])
12886 ###############################################################################
12887 # Extensions checking
12888 ###############################################################################
12889 AC_MSG_CHECKING([for extensions integration])
12890 if test "x$enable_extension_integration" != "xno"; then
12891     WITH_EXTENSION_INTEGRATION=TRUE
12892     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
12893     AC_MSG_RESULT([yes, use integration])
12894 else
12895     WITH_EXTENSION_INTEGRATION=
12896     AC_MSG_RESULT([no, do not integrate])
12898 AC_SUBST(WITH_EXTENSION_INTEGRATION)
12900 dnl Should any extra extensions be included?
12901 dnl There are standalone tests for each of these below.
12902 WITH_EXTRA_EXTENSIONS=
12903 AC_SUBST([WITH_EXTRA_EXTENSIONS])
12905 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
12906 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
12907 if test "x$with_java" != "xno"; then
12908     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
12909     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
12912 AC_MSG_CHECKING([whether to build opens___.ttf])
12913 if test "$enable_build_opensymbol" = "yes"; then
12914     AC_MSG_RESULT([yes])
12915     AC_PATH_PROG(FONTFORGE, fontforge)
12916     if test -z "$FONTFORGE"; then
12917         AC_MSG_ERROR([fontforge not installed])
12918     fi
12919 else
12920     AC_MSG_RESULT([no])
12921     OPENSYMBOL_TTF=f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
12922     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
12924 AC_SUBST(OPENSYMBOL_TTF)
12925 AC_SUBST(FONTFORGE)
12927 dnl ===================================================================
12928 dnl Test whether to include fonts
12929 dnl ===================================================================
12930 AC_MSG_CHECKING([whether to include third-party fonts])
12931 if test "$with_fonts" != "no"; then
12932     AC_MSG_RESULT([yes])
12933     WITH_FONTS=TRUE
12934     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
12935     AC_DEFINE(HAVE_MORE_FONTS)
12936 else
12937     AC_MSG_RESULT([no])
12938     WITH_FONTS=
12939     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
12941 AC_SUBST(WITH_FONTS)
12944 dnl ===================================================================
12945 dnl Test whether to enable online update service
12946 dnl ===================================================================
12947 AC_MSG_CHECKING([whether to enable online update])
12948 ENABLE_ONLINE_UPDATE=
12949 ENABLE_ONLINE_UPDATE_MAR=
12950 UPDATE_CONFIG=
12951 if test "$enable_online_update" = ""; then
12952     if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12953         AC_MSG_RESULT([yes])
12954         ENABLE_ONLINE_UPDATE="TRUE"
12955     else
12956         AC_MSG_RESULT([no])
12957     fi
12958 else
12959     if test "$enable_online_update" = "mar"; then
12960         AC_MSG_RESULT([yes - MAR-based online update])
12961         ENABLE_ONLINE_UPDATE_MAR="TRUE"
12962         if test "$with_update_config" = ""; then
12963             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
12964         fi
12965         UPDATE_CONFIG="$with_update_config"
12966         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
12967     elif test "$enable_online_update" = "yes"; then
12968         AC_MSG_RESULT([yes])
12969         ENABLE_ONLINE_UPDATE="TRUE"
12970     else
12971         AC_MSG_RESULT([no])
12972     fi
12974 AC_SUBST(ENABLE_ONLINE_UPDATE)
12975 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
12976 AC_SUBST(UPDATE_CONFIG)
12979 PRIVACY_POLICY_URL="$with_privacy_policy_url"
12980 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
12981     if test "x$with_privacy_policy_url" = "xundefined"; then
12982         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
12983     fi
12985 AC_SUBST(PRIVACY_POLICY_URL)
12986 dnl ===================================================================
12987 dnl Test whether we need bzip2
12988 dnl ===================================================================
12989 SYSTEM_BZIP2=
12990 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
12991     AC_MSG_CHECKING([whether to use system bzip2])
12992     if test "$with_system_bzip2" = yes; then
12993         SYSTEM_BZIP2=TRUE
12994         AC_MSG_RESULT([yes])
12995         PKG_CHECK_MODULES(BZIP2, bzip2)
12996         FilterLibs "${BZIP2_LIBS}"
12997         BZIP2_LIBS="${filteredlibs}"
12998     else
12999         AC_MSG_RESULT([no])
13000         BUILD_TYPE="$BUILD_TYPE BZIP2"
13001     fi
13003 AC_SUBST(SYSTEM_BZIP2)
13004 AC_SUBST(BZIP2_CFLAGS)
13005 AC_SUBST(BZIP2_LIBS)
13007 dnl ===================================================================
13008 dnl Test whether to enable extension update
13009 dnl ===================================================================
13010 AC_MSG_CHECKING([whether to enable extension update])
13011 ENABLE_EXTENSION_UPDATE=
13012 if test "x$enable_extension_update" = "xno"; then
13013     AC_MSG_RESULT([no])
13014 else
13015     AC_MSG_RESULT([yes])
13016     ENABLE_EXTENSION_UPDATE="TRUE"
13017     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13018     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13020 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13023 dnl ===================================================================
13024 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13025 dnl ===================================================================
13026 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13027 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13028     AC_MSG_RESULT([no])
13029     ENABLE_SILENT_MSI=
13030 else
13031     AC_MSG_RESULT([yes])
13032     ENABLE_SILENT_MSI=TRUE
13033     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13035 AC_SUBST(ENABLE_SILENT_MSI)
13037 AC_MSG_CHECKING([whether and how to use Xinerama])
13038 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13039     if test "$x_libraries" = "default_x_libraries"; then
13040         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13041         if test "x$XINERAMALIB" = x; then
13042            XINERAMALIB="/usr/lib"
13043         fi
13044     else
13045         XINERAMALIB="$x_libraries"
13046     fi
13047     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13048         # we have both versions, let the user decide but use the dynamic one
13049         # per default
13050         USE_XINERAMA=TRUE
13051         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13052             XINERAMA_LINK=dynamic
13053         else
13054             XINERAMA_LINK=static
13055         fi
13056     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13057         # we have only the dynamic version
13058         USE_XINERAMA=TRUE
13059         XINERAMA_LINK=dynamic
13060     elif test -e "$XINERAMALIB/libXinerama.a"; then
13061         # static version
13062         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13063             USE_XINERAMA=TRUE
13064             XINERAMA_LINK=static
13065         else
13066             USE_XINERAMA=
13067             XINERAMA_LINK=none
13068         fi
13069     else
13070         # no Xinerama
13071         USE_XINERAMA=
13072         XINERAMA_LINK=none
13073     fi
13074     if test "$USE_XINERAMA" = "TRUE"; then
13075         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13076         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13077             [AC_MSG_ERROR(Xinerama header not found.)], [])
13078         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13079         if test "x$XEXTLIB" = x; then
13080            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13081         fi
13082         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13083         if test "$_os" = "FreeBSD"; then
13084             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13085         fi
13086         if test "$_os" = "Linux"; then
13087             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13088         fi
13089         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13090             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13091     else
13092         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13093     fi
13094 else
13095     USE_XINERAMA=
13096     XINERAMA_LINK=none
13097     AC_MSG_RESULT([no])
13099 AC_SUBST(USE_XINERAMA)
13100 AC_SUBST(XINERAMA_LINK)
13102 dnl ===================================================================
13103 dnl Test whether to build cairo or rely on the system version
13104 dnl ===================================================================
13106 if test "$test_cairo" = "yes"; then
13107     AC_MSG_CHECKING([whether to use the system cairo])
13109     : ${with_system_cairo:=$with_system_libs}
13110     if test "$with_system_cairo" = "yes"; then
13111         SYSTEM_CAIRO=TRUE
13112         AC_MSG_RESULT([yes])
13114         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13115         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13116         FilterLibs "${CAIRO_LIBS}"
13117         CAIRO_LIBS="${filteredlibs}"
13119         if test "$test_xrender" = "yes"; then
13120             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13121             AC_LANG_PUSH([C])
13122             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13123 #ifdef PictStandardA8
13124 #else
13125       return fail;
13126 #endif
13127 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13129             AC_LANG_POP([C])
13130         fi
13131     else
13132         AC_MSG_RESULT([no])
13133         BUILD_TYPE="$BUILD_TYPE CAIRO"
13134     fi
13136     if test "$enable_cairo_canvas" != no; then
13137         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13138         ENABLE_CAIRO_CANVAS=TRUE
13139     fi
13142 AC_SUBST(CAIRO_CFLAGS)
13143 AC_SUBST(CAIRO_LIBS)
13144 AC_SUBST(ENABLE_CAIRO_CANVAS)
13145 AC_SUBST(SYSTEM_CAIRO)
13147 dnl ===================================================================
13148 dnl Test whether to use avahi
13149 dnl ===================================================================
13150 if test "$_os" = "WINNT"; then
13151     # Windows uses bundled mDNSResponder
13152     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13153 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13154     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13155                       [ENABLE_AVAHI="TRUE"])
13156     AC_DEFINE(HAVE_FEATURE_AVAHI)
13157     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13158     FilterLibs "${AVAHI_LIBS}"
13159     AVAHI_LIBS="${filteredlibs}"
13162 AC_SUBST(ENABLE_AVAHI)
13163 AC_SUBST(AVAHI_CFLAGS)
13164 AC_SUBST(AVAHI_LIBS)
13166 dnl ===================================================================
13167 dnl Test whether to use liblangtag
13168 dnl ===================================================================
13169 SYSTEM_LIBLANGTAG=
13170 AC_MSG_CHECKING([whether to use system liblangtag])
13171 if test "$with_system_liblangtag" = yes; then
13172     SYSTEM_LIBLANGTAG=TRUE
13173     AC_MSG_RESULT([yes])
13174     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13175     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13176     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13177     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13178     FilterLibs "${LIBLANGTAG_LIBS}"
13179     LIBLANGTAG_LIBS="${filteredlibs}"
13180 else
13181     SYSTEM_LIBLANGTAG=
13182     AC_MSG_RESULT([no])
13183     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13184     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13185     if test "$COM" = "MSC"; then
13186         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13187     else
13188         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13189     fi
13191 AC_SUBST(SYSTEM_LIBLANGTAG)
13192 AC_SUBST(LIBLANGTAG_CFLAGS)
13193 AC_SUBST(LIBLANGTAG_LIBS)
13195 dnl ===================================================================
13196 dnl Test whether to build libpng or rely on the system version
13197 dnl ===================================================================
13199 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13201 dnl ===================================================================
13202 dnl Check for runtime JVM search path
13203 dnl ===================================================================
13204 if test "$ENABLE_JAVA" != ""; then
13205     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13206     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13207         AC_MSG_RESULT([yes])
13208         if ! test -d "$with_jvm_path"; then
13209             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13210         fi
13211         if ! test -d "$with_jvm_path"jvm; then
13212             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13213         fi
13214         JVM_ONE_PATH_CHECK="$with_jvm_path"
13215         AC_SUBST(JVM_ONE_PATH_CHECK)
13216     else
13217         AC_MSG_RESULT([no])
13218     fi
13221 dnl ===================================================================
13222 dnl Test for the presence of Ant and that it works
13223 dnl ===================================================================
13225 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13226     ANT_HOME=; export ANT_HOME
13227     WITH_ANT_HOME=; export WITH_ANT_HOME
13228     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13229         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13230             if test "$_os" = "WINNT"; then
13231                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13232             else
13233                 with_ant_home="$LODE_HOME/opt/ant"
13234             fi
13235         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13236             with_ant_home="$LODE_HOME/opt/ant"
13237         fi
13238     fi
13239     if test -z "$with_ant_home"; then
13240         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13241     else
13242         if test "$_os" = "WINNT"; then
13243             # AC_PATH_PROGS needs unix path
13244             with_ant_home=`cygpath -u "$with_ant_home"`
13245         fi
13246         AbsolutePath "$with_ant_home"
13247         with_ant_home=$absolute_path
13248         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13249         WITH_ANT_HOME=$with_ant_home
13250         ANT_HOME=$with_ant_home
13251     fi
13253     if test -z "$ANT"; then
13254         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13255     else
13256         # resolve relative or absolute symlink
13257         while test -h "$ANT"; do
13258             a_cwd=`pwd`
13259             a_basename=`basename "$ANT"`
13260             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13261             cd "`dirname "$ANT"`"
13262             cd "`dirname "$a_script"`"
13263             ANT="`pwd`"/"`basename "$a_script"`"
13264             cd "$a_cwd"
13265         done
13267         AC_MSG_CHECKING([if $ANT works])
13268         mkdir -p conftest.dir
13269         a_cwd=$(pwd)
13270         cd conftest.dir
13271         cat > conftest.java << EOF
13272         public class conftest {
13273             int testmethod(int a, int b) {
13274                     return a + b;
13275             }
13276         }
13279         cat > conftest.xml << EOF
13280         <project name="conftest" default="conftest">
13281         <target name="conftest">
13282             <javac srcdir="." includes="conftest.java">
13283             </javac>
13284         </target>
13285         </project>
13288         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13289         if test $? = 0 -a -f ./conftest.class; then
13290             AC_MSG_RESULT([Ant works])
13291             if test -z "$WITH_ANT_HOME"; then
13292                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13293                 if test -z "$ANT_HOME"; then
13294                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13295                 fi
13296             else
13297                 ANT_HOME="$WITH_ANT_HOME"
13298             fi
13299         else
13300             echo "configure: Ant test failed" >&5
13301             cat conftest.java >&5
13302             cat conftest.xml >&5
13303             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13304         fi
13305         cd "$a_cwd"
13306         rm -fr conftest.dir
13307     fi
13308     if test -z "$ANT_HOME"; then
13309         ANT_HOME="NO_ANT_HOME"
13310     else
13311         PathFormat "$ANT_HOME"
13312         ANT_HOME="$formatted_path"
13313         PathFormat "$ANT"
13314         ANT="$formatted_path"
13315     fi
13317     dnl Checking for ant.jar
13318     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13319         AC_MSG_CHECKING([Ant lib directory])
13320         if test -f $ANT_HOME/lib/ant.jar; then
13321             ANT_LIB="$ANT_HOME/lib"
13322         else
13323             if test -f $ANT_HOME/ant.jar; then
13324                 ANT_LIB="$ANT_HOME"
13325             else
13326                 if test -f /usr/share/java/ant.jar; then
13327                     ANT_LIB=/usr/share/java
13328                 else
13329                     if test -f /usr/share/ant-core/lib/ant.jar; then
13330                         ANT_LIB=/usr/share/ant-core/lib
13331                     else
13332                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13333                             ANT_LIB="$ANT_HOME/lib/ant"
13334                         else
13335                             if test -f /usr/share/lib/ant/ant.jar; then
13336                                 ANT_LIB=/usr/share/lib/ant
13337                             else
13338                                 AC_MSG_ERROR([Ant libraries not found!])
13339                             fi
13340                         fi
13341                     fi
13342                 fi
13343             fi
13344         fi
13345         PathFormat "$ANT_LIB"
13346         ANT_LIB="$formatted_path"
13347         AC_MSG_RESULT([Ant lib directory found.])
13348     fi
13350     ant_minver=1.6.0
13351     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13353     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13354     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13355     ant_version_major=`echo $ant_version | cut -d. -f1`
13356     ant_version_minor=`echo $ant_version | cut -d. -f2`
13357     echo "configure: ant_version $ant_version " >&5
13358     echo "configure: ant_version_major $ant_version_major " >&5
13359     echo "configure: ant_version_minor $ant_version_minor " >&5
13360     if test "$ant_version_major" -ge "2"; then
13361         AC_MSG_RESULT([yes, $ant_version])
13362     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13363         AC_MSG_RESULT([yes, $ant_version])
13364     else
13365         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13366     fi
13368     rm -f conftest* core core.* *.core
13370 AC_SUBST(ANT)
13371 AC_SUBST(ANT_HOME)
13372 AC_SUBST(ANT_LIB)
13374 OOO_JUNIT_JAR=
13375 HAMCREST_JAR=
13376 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13377     AC_MSG_CHECKING([for JUnit 4])
13378     if test "$with_junit" = "yes"; then
13379         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13380             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13381         elif test -e /usr/share/java/junit4.jar; then
13382             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13383         else
13384            if test -e /usr/share/lib/java/junit.jar; then
13385               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13386            else
13387               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13388            fi
13389         fi
13390     else
13391         OOO_JUNIT_JAR=$with_junit
13392     fi
13393     if test "$_os" = "WINNT"; then
13394         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13395     fi
13396     printf 'import org.junit.Before;' > conftest.java
13397     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13398         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13399     else
13400         AC_MSG_ERROR(
13401 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13402  specify its pathname via --with-junit=..., or disable it via --without-junit])
13403     fi
13404     rm -f conftest.class conftest.java
13405     if test $OOO_JUNIT_JAR != ""; then
13406         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13407     fi
13409     AC_MSG_CHECKING([for included Hamcrest])
13410     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13411     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13412         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13413     else
13414         AC_MSG_RESULT([Not included])
13415         AC_MSG_CHECKING([for standalone hamcrest jar.])
13416         if test "$with_hamcrest" = "yes"; then
13417             if test -e /usr/share/lib/java/hamcrest.jar; then
13418                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13419             elif test -e /usr/share/java/hamcrest/core.jar; then
13420                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13421             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13422                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13423             else
13424                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13425             fi
13426         else
13427             HAMCREST_JAR=$with_hamcrest
13428         fi
13429         if test "$_os" = "WINNT"; then
13430             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13431         fi
13432         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13433             AC_MSG_RESULT([$HAMCREST_JAR])
13434         else
13435             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),
13436                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13437         fi
13438     fi
13439     rm -f conftest.class conftest.java
13441 AC_SUBST(OOO_JUNIT_JAR)
13442 AC_SUBST(HAMCREST_JAR)
13445 AC_SUBST(SCPDEFS)
13448 # check for wget and curl
13450 WGET=
13451 CURL=
13453 if test "$enable_fetch_external" != "no"; then
13455 CURL=`which curl 2>/dev/null`
13457 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13458     # wget new enough?
13459     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13460     if test $? -eq 0; then
13461         WGET=$i
13462         break
13463     fi
13464 done
13466 if test -z "$WGET" -a -z "$CURL"; then
13467     AC_MSG_ERROR([neither wget nor curl found!])
13472 AC_SUBST(WGET)
13473 AC_SUBST(CURL)
13476 # check for sha256sum
13478 SHA256SUM=
13480 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13481     eval "$i -a 256 --version" > /dev/null 2>&1
13482     ret=$?
13483     if test $ret -eq 0; then
13484         SHA256SUM="$i -a 256"
13485         break
13486     fi
13487 done
13489 if test -z "$SHA256SUM"; then
13490     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13491         eval "$i --version" > /dev/null 2>&1
13492         ret=$?
13493         if test $ret -eq 0; then
13494             SHA256SUM=$i
13495             break
13496         fi
13497     done
13500 if test -z "$SHA256SUM"; then
13501     AC_MSG_ERROR([no sha256sum found!])
13504 AC_SUBST(SHA256SUM)
13506 dnl ===================================================================
13507 dnl Dealing with l10n options
13508 dnl ===================================================================
13509 AC_MSG_CHECKING([which languages to be built])
13510 # get list of all languages
13511 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13512 # the sed command does the following:
13513 #   + if a line ends with a backslash, append the next line to it
13514 #   + adds " on the beginning of the value (after =)
13515 #   + adds " at the end of the value
13516 #   + removes en-US; we want to put it on the beginning
13517 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13518 [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)]
13519 ALL_LANGS="en-US $completelangiso"
13520 # check the configured localizations
13521 WITH_LANG="$with_lang"
13523 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13524 # (Norwegian is "nb" and "nn".)
13525 if test "$WITH_LANG" = "no"; then
13526     WITH_LANG=
13529 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13530     AC_MSG_RESULT([en-US])
13531 else
13532     AC_MSG_RESULT([$WITH_LANG])
13533     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13534     if test -z "$MSGFMT"; then
13535         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13536             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13537         elif test -x "/opt/lo/bin/msgfmt"; then
13538             MSGFMT="/opt/lo/bin/msgfmt"
13539         else
13540             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13541             if test -z "$MSGFMT"; then
13542                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13543             fi
13544         fi
13545     fi
13546     if test -z "$MSGUNIQ"; then
13547         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13548             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13549         elif test -x "/opt/lo/bin/msguniq"; then
13550             MSGUNIQ="/opt/lo/bin/msguniq"
13551         else
13552             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13553             if test -z "$MSGUNIQ"; then
13554                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13555             fi
13556         fi
13557     fi
13559 AC_SUBST(MSGFMT)
13560 AC_SUBST(MSGUNIQ)
13561 # check that the list is valid
13562 for lang in $WITH_LANG; do
13563     test "$lang" = "ALL" && continue
13564     # need to check for the exact string, so add space before and after the list of all languages
13565     for vl in $ALL_LANGS; do
13566         if test "$vl" = "$lang"; then
13567            break
13568         fi
13569     done
13570     if test "$vl" != "$lang"; then
13571         # if you're reading this - you prolly quoted your languages remove the quotes ...
13572         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13573     fi
13574 done
13575 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13576     echo $WITH_LANG | grep -q en-US
13577     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13579 # list with substituted ALL
13580 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13581 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13582 test "$WITH_LANG" = "en-US" && WITH_LANG=
13583 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13584     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13585     ALL_LANGS=`echo $ALL_LANGS qtz`
13587 AC_SUBST(ALL_LANGS)
13588 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13589 AC_SUBST(WITH_LANG)
13590 AC_SUBST(WITH_LANG_LIST)
13591 AC_SUBST(GIT_NEEDED_SUBMODULES)
13593 WITH_POOR_HELP_LOCALIZATIONS=
13594 if test -d "$SRC_ROOT/translations/source"; then
13595     for l in `ls -1 $SRC_ROOT/translations/source`; do
13596         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13597             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13598         fi
13599     done
13601 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13603 if test -n "$with_locales"; then
13604     WITH_LOCALES="$with_locales"
13606     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13607     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13608     # config_host/config_locales.h.in
13609     for locale in $WITH_LOCALES; do
13610         lang=${locale%_*}
13612         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13614         case $lang in
13615         hi|mr*ne)
13616             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13617             ;;
13618         bg|ru)
13619             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13620             ;;
13621         esac
13622     done
13623 else
13624     AC_DEFINE(WITH_LOCALE_ALL)
13626 AC_SUBST(WITH_LOCALES)
13628 dnl git submodule update --reference
13629 dnl ===================================================================
13630 if test -n "${GIT_REFERENCE_SRC}"; then
13631     for repo in ${GIT_NEEDED_SUBMODULES}; do
13632         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13633             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13634         fi
13635     done
13637 AC_SUBST(GIT_REFERENCE_SRC)
13639 dnl git submodules linked dirs
13640 dnl ===================================================================
13641 if test -n "${GIT_LINK_SRC}"; then
13642     for repo in ${GIT_NEEDED_SUBMODULES}; do
13643         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13644             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13645         fi
13646     done
13648 AC_SUBST(GIT_LINK_SRC)
13650 dnl branding
13651 dnl ===================================================================
13652 AC_MSG_CHECKING([for alternative branding images directory])
13653 # initialize mapped arrays
13654 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13655 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13657 if test -z "$with_branding" -o "$with_branding" = "no"; then
13658     AC_MSG_RESULT([none])
13659     DEFAULT_BRAND_IMAGES="$brand_files"
13660 else
13661     if ! test -d $with_branding ; then
13662         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13663     else
13664         AC_MSG_RESULT([$with_branding])
13665         CUSTOM_BRAND_DIR="$with_branding"
13666         for lfile in $brand_files
13667         do
13668             if ! test -f $with_branding/$lfile ; then
13669                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13670                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13671             else
13672                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13673             fi
13674         done
13675         check_for_progress="yes"
13676     fi
13678 AC_SUBST([BRAND_INTRO_IMAGES])
13679 AC_SUBST([CUSTOM_BRAND_DIR])
13680 AC_SUBST([CUSTOM_BRAND_IMAGES])
13681 AC_SUBST([DEFAULT_BRAND_IMAGES])
13684 AC_MSG_CHECKING([for 'intro' progress settings])
13685 PROGRESSBARCOLOR=
13686 PROGRESSSIZE=
13687 PROGRESSPOSITION=
13688 PROGRESSFRAMECOLOR=
13689 PROGRESSTEXTCOLOR=
13690 PROGRESSTEXTBASELINE=
13692 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13693     source "$with_branding/progress.conf"
13694     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13695 else
13696     AC_MSG_RESULT([none])
13699 AC_SUBST(PROGRESSBARCOLOR)
13700 AC_SUBST(PROGRESSSIZE)
13701 AC_SUBST(PROGRESSPOSITION)
13702 AC_SUBST(PROGRESSFRAMECOLOR)
13703 AC_SUBST(PROGRESSTEXTCOLOR)
13704 AC_SUBST(PROGRESSTEXTBASELINE)
13707 dnl ===================================================================
13708 dnl Custom build version
13709 dnl ===================================================================
13710 AC_MSG_CHECKING([for extra build ID])
13711 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
13712     EXTRA_BUILDID="$with_extra_buildid"
13714 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
13715 if test -n "$EXTRA_BUILDID" ; then
13716     AC_MSG_RESULT([$EXTRA_BUILDID])
13717 else
13718     AC_MSG_RESULT([not set])
13720 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
13722 OOO_VENDOR=
13723 AC_MSG_CHECKING([for vendor])
13724 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
13725     OOO_VENDOR="$USERNAME"
13727     if test -z "$OOO_VENDOR"; then
13728         OOO_VENDOR="$USER"
13729     fi
13731     if test -z "$OOO_VENDOR"; then
13732         OOO_VENDOR="`id -u -n`"
13733     fi
13735     AC_MSG_RESULT([not set, using $OOO_VENDOR])
13736 else
13737     OOO_VENDOR="$with_vendor"
13738     AC_MSG_RESULT([$OOO_VENDOR])
13740 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
13741 AC_SUBST(OOO_VENDOR)
13743 if test "$_os" = "Android" ; then
13744     ANDROID_PACKAGE_NAME=
13745     AC_MSG_CHECKING([for Android package name])
13746     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
13747         if test -n "$ENABLE_DEBUG"; then
13748             # Default to the package name that makes ndk-gdb happy.
13749             ANDROID_PACKAGE_NAME="org.libreoffice"
13750         else
13751             ANDROID_PACKAGE_NAME="org.example.libreoffice"
13752         fi
13754         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
13755     else
13756         ANDROID_PACKAGE_NAME="$with_android_package_name"
13757         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
13758     fi
13759     AC_SUBST(ANDROID_PACKAGE_NAME)
13762 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
13763 if test "$with_compat_oowrappers" = "yes"; then
13764     WITH_COMPAT_OOWRAPPERS=TRUE
13765     AC_MSG_RESULT(yes)
13766 else
13767     WITH_COMPAT_OOWRAPPERS=
13768     AC_MSG_RESULT(no)
13770 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
13772 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
13773 AC_MSG_CHECKING([for install dirname])
13774 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
13775     INSTALLDIRNAME="$with_install_dirname"
13777 AC_MSG_RESULT([$INSTALLDIRNAME])
13778 AC_SUBST(INSTALLDIRNAME)
13780 AC_MSG_CHECKING([for prefix])
13781 test "x$prefix" = xNONE && prefix=$ac_default_prefix
13782 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
13783 PREFIXDIR="$prefix"
13784 AC_MSG_RESULT([$PREFIXDIR])
13785 AC_SUBST(PREFIXDIR)
13787 LIBDIR=[$(eval echo $(eval echo $libdir))]
13788 AC_SUBST(LIBDIR)
13790 DATADIR=[$(eval echo $(eval echo $datadir))]
13791 AC_SUBST(DATADIR)
13793 MANDIR=[$(eval echo $(eval echo $mandir))]
13794 AC_SUBST(MANDIR)
13796 DOCDIR=[$(eval echo $(eval echo $docdir))]
13797 AC_SUBST(DOCDIR)
13799 BINDIR=[$(eval echo $(eval echo $bindir))]
13800 AC_SUBST(BINDIR)
13802 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
13803 AC_SUBST(INSTALLDIR)
13805 TESTINSTALLDIR="${BUILDDIR}/test-install"
13806 AC_SUBST(TESTINSTALLDIR)
13809 # ===================================================================
13810 # OAuth2 id and secrets
13811 # ===================================================================
13813 AC_MSG_CHECKING([for Google Drive client id and secret])
13814 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
13815     AC_MSG_RESULT([not set])
13816     GDRIVE_CLIENT_ID="\"\""
13817     GDRIVE_CLIENT_SECRET="\"\""
13818 else
13819     AC_MSG_RESULT([set])
13820     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
13821     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
13823 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
13824 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
13826 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
13827 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
13828     AC_MSG_RESULT([not set])
13829     ALFRESCO_CLOUD_CLIENT_ID="\"\""
13830     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
13831 else
13832     AC_MSG_RESULT([set])
13833     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
13834     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
13836 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
13837 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
13839 AC_MSG_CHECKING([for OneDrive client id and secret])
13840 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
13841     AC_MSG_RESULT([not set])
13842     ONEDRIVE_CLIENT_ID="\"\""
13843     ONEDRIVE_CLIENT_SECRET="\"\""
13844 else
13845     AC_MSG_RESULT([set])
13846     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
13847     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
13849 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
13850 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
13853 dnl ===================================================================
13854 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
13855 dnl --enable-dependency-tracking configure option
13856 dnl ===================================================================
13857 AC_MSG_CHECKING([whether to enable dependency tracking])
13858 if test "$enable_dependency_tracking" = "no"; then
13859     nodep=TRUE
13860     AC_MSG_RESULT([no])
13861 else
13862     AC_MSG_RESULT([yes])
13864 AC_SUBST(nodep)
13866 dnl ===================================================================
13867 dnl Number of CPUs to use during the build
13868 dnl ===================================================================
13869 AC_MSG_CHECKING([for number of processors to use])
13870 # plain --with-parallelism is just the default
13871 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
13872     if test "$with_parallelism" = "no"; then
13873         PARALLELISM=0
13874     else
13875         PARALLELISM=$with_parallelism
13876     fi
13877 else
13878     if test "$enable_icecream" = "yes"; then
13879         PARALLELISM="40"
13880     else
13881         case `uname -s` in
13883         Darwin|FreeBSD|NetBSD|OpenBSD)
13884             PARALLELISM=`sysctl -n hw.ncpu`
13885             ;;
13887         Linux)
13888             PARALLELISM=`getconf _NPROCESSORS_ONLN`
13889         ;;
13890         # what else than above does profit here *and* has /proc?
13891         *)
13892             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
13893             ;;
13894         esac
13896         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
13897         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
13898     fi
13901 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
13902     if test -z "$with_parallelism"; then
13903             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
13904             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
13905             PARALLELISM="1"
13906     else
13907         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."
13908     fi
13911 if test $PARALLELISM -eq 0; then
13912     AC_MSG_RESULT([explicit make -j option needed])
13913 else
13914     AC_MSG_RESULT([$PARALLELISM])
13916 AC_SUBST(PARALLELISM)
13918 IWYU_PATH="$with_iwyu"
13919 AC_SUBST(IWYU_PATH)
13920 if test ! -z "$IWYU_PATH"; then
13921     if test ! -f "$IWYU_PATH"; then
13922         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
13923     fi
13927 # Set up ILIB for MSVC build
13929 ILIB1=
13930 if test "$build_os" = "cygwin"; then
13931     ILIB="."
13932     if test -n "$JAVA_HOME"; then
13933         ILIB="$ILIB;$JAVA_HOME/lib"
13934     fi
13935     ILIB1=-link
13936     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
13937     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
13938     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13939     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13940     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
13941         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13942         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13943     fi
13944     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
13945     ucrtlibpath_formatted=$formatted_path
13946     ILIB="$ILIB;$ucrtlibpath_formatted"
13947     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
13948     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
13949         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
13950     else
13951         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
13952     fi
13954     if test "$cross_compiling" != "yes"; then
13955         ILIB_FOR_BUILD="$ILIB"
13956     fi
13958 AC_SUBST(ILIB)
13959 AC_SUBST(ILIB_FOR_BUILD)
13961 # ===================================================================
13962 # Creating bigger shared library to link against
13963 # ===================================================================
13964 AC_MSG_CHECKING([whether to create huge library])
13965 MERGELIBS=
13967 if test $_os = iOS -o $_os = Android; then
13968     # Never any point in mergelibs for these as we build just static
13969     # libraries anyway...
13970     enable_mergelibs=no
13973 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
13974     if test $_os != Linux -a $_os != WINNT; then
13975         add_warning "--enable-mergelibs is not tested for this platform"
13976     fi
13977     MERGELIBS="TRUE"
13978     AC_MSG_RESULT([yes])
13979     AC_DEFINE(ENABLE_MERGELIBS)
13980 else
13981     AC_MSG_RESULT([no])
13983 AC_SUBST([MERGELIBS])
13985 dnl ===================================================================
13986 dnl icerun is a wrapper that stops us spawning tens of processes
13987 dnl locally - for tools that can't be executed on the compile cluster
13988 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
13989 dnl ===================================================================
13990 AC_MSG_CHECKING([whether to use icerun wrapper])
13991 ICECREAM_RUN=
13992 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
13993     ICECREAM_RUN=icerun
13994     AC_MSG_RESULT([yes])
13995 else
13996     AC_MSG_RESULT([no])
13998 AC_SUBST(ICECREAM_RUN)
14000 dnl ===================================================================
14001 dnl Setup the ICECC_VERSION for the build the same way it was set for
14002 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14003 dnl ===================================================================
14004 x_ICECC_VERSION=[\#]
14005 if test -n "$ICECC_VERSION" ; then
14006     x_ICECC_VERSION=
14008 AC_SUBST(x_ICECC_VERSION)
14009 AC_SUBST(ICECC_VERSION)
14011 dnl ===================================================================
14013 AC_MSG_CHECKING([MPL subset])
14014 MPL_SUBSET=
14016 if test "$enable_mpl_subset" = "yes"; then
14017     warn_report=false
14018     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14019         warn_report=true
14020     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14021         warn_report=true
14022     fi
14023     if test "$warn_report" = "true"; then
14024         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14025     fi
14026     if test "x$enable_postgresql_sdbc" != "xno"; then
14027         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14028     fi
14029     if test "$enable_lotuswordpro" = "yes"; then
14030         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14031     fi
14032     if test "$WITH_WEBDAV" = "neon"; then
14033         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14034     fi
14035     if test -n "$ENABLE_POPPLER"; then
14036         if test "x$SYSTEM_POPPLER" = "x"; then
14037             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14038         fi
14039     fi
14040     # cf. m4/libo_check_extension.m4
14041     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14042         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14043     fi
14044     for theme in $WITH_THEMES; do
14045         case $theme in
14046         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14047             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14048         *) : ;;
14049         esac
14050     done
14052     ENABLE_OPENGL_TRANSITIONS=
14054     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14055         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14056     fi
14058     MPL_SUBSET="TRUE"
14059     AC_DEFINE(MPL_HAVE_SUBSET)
14060     AC_MSG_RESULT([only])
14061 else
14062     AC_MSG_RESULT([no restrictions])
14064 AC_SUBST(MPL_SUBSET)
14066 dnl ===================================================================
14068 AC_MSG_CHECKING([formula logger])
14069 ENABLE_FORMULA_LOGGER=
14071 if test "x$enable_formula_logger" = "xyes"; then
14072     AC_MSG_RESULT([yes])
14073     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14074     ENABLE_FORMULA_LOGGER=TRUE
14075 elif test -n "$ENABLE_DBGUTIL" ; then
14076     AC_MSG_RESULT([yes])
14077     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14078     ENABLE_FORMULA_LOGGER=TRUE
14079 else
14080     AC_MSG_RESULT([no])
14083 AC_SUBST(ENABLE_FORMULA_LOGGER)
14085 dnl ===================================================================
14086 dnl Checking for active Antivirus software.
14087 dnl ===================================================================
14089 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14090     AC_MSG_CHECKING([for active Antivirus software])
14091     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14092     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14093         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14094             AC_MSG_RESULT([found])
14095             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14096             echo $EICAR_STRING > $SRC_ROOT/eicar
14097             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14098             rm $SRC_ROOT/eicar
14099             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14100                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14101             fi
14102             echo $EICAR_STRING > $BUILDDIR/eicar
14103             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14104             rm $BUILDDIR/eicar
14105             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14106                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14107             fi
14108             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"
14109         else
14110             AC_MSG_RESULT([not found])
14111         fi
14112     else
14113         AC_MSG_RESULT([n/a])
14114     fi
14117 dnl ===================================================================
14118 dnl Setting up the environment.
14119 dnl ===================================================================
14120 AC_MSG_NOTICE([setting up the build environment variables...])
14122 AC_SUBST(COMPATH)
14124 if test "$build_os" = "cygwin"; then
14125     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14126         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14127         ATL_INCLUDE="$COMPATH/atlmfc/include"
14128     elif test -d "$COMPATH/atlmfc/lib"; then
14129         ATL_LIB="$COMPATH/atlmfc/lib"
14130         ATL_INCLUDE="$COMPATH/atlmfc/include"
14131     else
14132         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14133         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14134     fi
14135     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14136     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14137     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14139     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14140     PathFormat "/usr/bin/find.exe"
14141     FIND="$formatted_path"
14142     PathFormat "/usr/bin/sort.exe"
14143     SORT="$formatted_path"
14144     PathFormat "/usr/bin/grep.exe"
14145     WIN_GREP="$formatted_path"
14146     PathFormat "/usr/bin/ls.exe"
14147     WIN_LS="$formatted_path"
14148     PathFormat "/usr/bin/touch.exe"
14149     WIN_TOUCH="$formatted_path"
14150 else
14151     FIND=find
14152     SORT=sort
14155 AC_SUBST(ATL_INCLUDE)
14156 AC_SUBST(ATL_LIB)
14157 AC_SUBST(FIND)
14158 AC_SUBST(SORT)
14159 AC_SUBST(WIN_GREP)
14160 AC_SUBST(WIN_LS)
14161 AC_SUBST(WIN_TOUCH)
14163 AC_SUBST(BUILD_TYPE)
14165 AC_SUBST(SOLARINC)
14167 PathFormat "$PERL"
14168 PERL="$formatted_path"
14169 AC_SUBST(PERL)
14171 if test -n "$TMPDIR"; then
14172     TEMP_DIRECTORY="$TMPDIR"
14173 else
14174     TEMP_DIRECTORY="/tmp"
14176 if test "$build_os" = "cygwin"; then
14177     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14179 AC_SUBST(TEMP_DIRECTORY)
14181 # setup the PATH for the environment
14182 if test -n "$LO_PATH_FOR_BUILD"; then
14183     LO_PATH="$LO_PATH_FOR_BUILD"
14184     case "$host_os" in
14185     cygwin*|wsl*)
14186         pathmunge "$MSVC_HOST_PATH" "before"
14187         ;;
14188     esac
14189 else
14190     LO_PATH="$PATH"
14192     case "$host_os" in
14194     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14195         if test "$ENABLE_JAVA" != ""; then
14196             pathmunge "$JAVA_HOME/bin" "after"
14197         fi
14198         ;;
14200     cygwin*|wsl*)
14201         # Win32 make needs native paths
14202         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14203             LO_PATH=`cygpath -p -m "$PATH"`
14204         fi
14205         if test "$WIN_BUILD_ARCH" = "x64"; then
14206             # needed for msi packaging
14207             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14208         fi
14209         # .NET 4.6 and higher don't have bin directory
14210         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14211             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14212         fi
14213         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14214         pathmunge "$CSC_PATH" "before"
14215         pathmunge "$MIDL_PATH" "before"
14216         pathmunge "$AL_PATH" "before"
14217         pathmunge "$MSVC_MULTI_PATH" "before"
14218         pathmunge "$MSVC_BUILD_PATH" "before"
14219         if test -n "$MSBUILD_PATH" ; then
14220             pathmunge "$MSBUILD_PATH" "before"
14221         fi
14222         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14223         if test "$ENABLE_JAVA" != ""; then
14224             if test -d "$JAVA_HOME/jre/bin/client"; then
14225                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14226             fi
14227             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14228                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14229             fi
14230             pathmunge "$JAVA_HOME/bin" "before"
14231         fi
14232         pathmunge "$MSVC_HOST_PATH" "before"
14233         ;;
14235     solaris*)
14236         pathmunge "/usr/css/bin" "before"
14237         if test "$ENABLE_JAVA" != ""; then
14238             pathmunge "$JAVA_HOME/bin" "after"
14239         fi
14240         ;;
14241     esac
14244 AC_SUBST(LO_PATH)
14246 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14247 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14248     x_LO_ELFCHECK_ALLOWLIST=
14249 else
14250     x_LO_ELFCHECK_ALLOWLIST=[\#]
14252 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14253 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14255 libo_FUZZ_SUMMARY
14257 # Generate a configuration sha256 we can use for deps
14258 if test -f config_host.mk; then
14259     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14261 if test -f config_host_lang.mk; then
14262     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14265 CFLAGS=$my_original_CFLAGS
14266 CXXFLAGS=$my_original_CXXFLAGS
14267 CPPFLAGS=$my_original_CPPFLAGS
14269 AC_CONFIG_LINKS([include:include])
14271 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14272 # BUILD platform configuration] - otherwise breaks cross building
14273 AC_CONFIG_FILES([config_host.mk
14274                  config_host_lang.mk
14275                  Makefile
14276                  bin/bffvalidator.sh
14277                  bin/odfvalidator.sh
14278                  bin/officeotron.sh
14279                  hardened_runtime.xcent
14280                  instsetoo_native/util/openoffice.lst
14281                  sysui/desktop/macosx/Info.plist
14282                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14283 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14284 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14285 AC_CONFIG_HEADERS([config_host/config_clang.h])
14286 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14287 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14288 AC_CONFIG_HEADERS([config_host/config_eot.h])
14289 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14290 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14291 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14292 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14293 AC_CONFIG_HEADERS([config_host/config_features.h])
14294 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14295 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14296 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14297 AC_CONFIG_HEADERS([config_host/config_folders.h])
14298 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14299 AC_CONFIG_HEADERS([config_host/config_gio.h])
14300 AC_CONFIG_HEADERS([config_host/config_global.h])
14301 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14302 AC_CONFIG_HEADERS([config_host/config_java.h])
14303 AC_CONFIG_HEADERS([config_host/config_langs.h])
14304 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14305 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14306 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14307 AC_CONFIG_HEADERS([config_host/config_locales.h])
14308 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14309 AC_CONFIG_HEADERS([config_host/config_oox.h])
14310 AC_CONFIG_HEADERS([config_host/config_options.h])
14311 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14312 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14313 AC_CONFIG_HEADERS([config_host/config_skia.h])
14314 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14315 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14316 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14317 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14318 AC_CONFIG_HEADERS([config_host/config_version.h])
14319 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14320 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14321 AC_CONFIG_HEADERS([config_host/config_python.h])
14322 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14323 AC_OUTPUT
14325 if test "$CROSS_COMPILING" = TRUE; then
14326     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14329 # touch the config timestamp file
14330 if test ! -f config_host.mk.stamp; then
14331     echo > config_host.mk.stamp
14332 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14333     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14334 else
14335     echo > config_host.mk.stamp
14338 # touch the config lang timestamp file
14339 if test ! -f config_host_lang.mk.stamp; then
14340     echo > config_host_lang.mk.stamp
14341 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14342     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14343 else
14344     echo > config_host_lang.mk.stamp
14348 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14349         -a "$build_os" = "cygwin"; then
14351 cat << _EOS
14352 ****************************************************************************
14353 WARNING:
14354 Your make version is known to be horribly slow, and hard to debug
14355 problems with. To get a reasonably functional make please do:
14357 to install a pre-compiled binary make for Win32
14359  mkdir -p /opt/lo/bin
14360  cd /opt/lo/bin
14361  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14362  cp make-4.2.1-msvc.exe make
14363  chmod +x make
14365 to install from source:
14366 place yourself in a working directory of you choice.
14368  git clone git://git.savannah.gnu.org/make.git
14370  [go to Start menu, open "Visual Studio 2019", click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14371  set PATH=%PATH%;C:\Cygwin\bin
14372  [or Cygwin64, if that is what you have]
14373  cd path-to-make-repo-you-cloned-above
14374  build_w32.bat --without-guile
14376 should result in a WinRel/gnumake.exe.
14377 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14379 Then re-run autogen.sh
14381 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14382 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14384 _EOS
14385 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14386     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14391 cat << _EOF
14392 ****************************************************************************
14394 To build, run:
14395 $GNUMAKE
14397 To view some help, run:
14398 $GNUMAKE help
14400 _EOF
14402 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14403     cat << _EOF
14404 After the build has finished successfully, you can immediately run what you built using the command:
14405 _EOF
14407     if test $_os = Darwin; then
14408         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14409     else
14410         echo instdir/program/soffice
14411     fi
14412     cat << _EOF
14414 If you want to run the smoketest, run:
14415 $GNUMAKE check
14417 _EOF
14420 if test -f "$WARNINGS_FILE_FOR_BUILD"; then
14421     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14422     cat "$WARNINGS_FILE_FOR_BUILD"
14423     echo
14426 if test -f "$WARNINGS_FILE"; then
14427     echo "HOST config ($WARNINGS_FILE)"
14428     cat "$WARNINGS_FILE"
14431 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: