Remove dubious lone mutex lock
[LibreOffice.git] / configure.ac
blob7a9eaf39b24b43f93c8b69322e96621eaa289aec
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
2 dnl configure.ac serves as input for the GNU autoconf package
3 dnl in order to create a configure script.
5 # The version number in the second argument to AC_INIT should be four numbers separated by
6 # periods. Some parts of the code requires the first one to be less than 128 and the others to be less
7 # than 256. The four numbers can optionally be followed by a period and a free-form string containing
8 # no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
9 # several non-alphanumeric characters, those are split off and used only for the
10 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
12 AC_INIT([LibreOffice],[7.3.0.0.alpha0+],[],[],[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_openldap=yes
825 test_split_debug=no
826 test_webdav=yes
828 # There is currently just iOS not using salplug, so this explicitly enables it.
829 # must: using_freetype_fontconfig
830 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
831 using_vclplug=yes
832 # must: using_x11
834 # Default values, as such probably valid just for Linux, set
835 # differently below just for Mac OSX, but at least better than
836 # hardcoding these as we used to do. Much of this is duplicated also
837 # in solenv for old build system and for gbuild, ideally we should
838 # perhaps define stuff like this only here in configure.ac?
840 LINKFLAGSSHL="-shared"
841 PICSWITCH="-fpic"
842 DLLPOST=".so"
844 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
846 INSTROOTBASESUFFIX=
847 INSTROOTCONTENTSUFFIX=
848 SDKDIRNAME=sdk
850 HOST_PLATFORM="$host"
852 host_cpu_for_clang="$host_cpu"
854 case "$host_os" in
856 solaris*)
857     using_freetype_fontconfig=yes
858     using_x11=yes
859     build_skia=yes
860     _os=SunOS
862     dnl ===========================================================
863     dnl Check whether we're using Solaris 10 - SPARC or Intel.
864     dnl ===========================================================
865     AC_MSG_CHECKING([the Solaris operating system release])
866     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
867     if test "$_os_release" -lt "10"; then
868         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
869     else
870         AC_MSG_RESULT([ok ($_os_release)])
871     fi
873     dnl Check whether we're using a SPARC or i386 processor
874     AC_MSG_CHECKING([the processor type])
875     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
876         AC_MSG_RESULT([ok ($host_cpu)])
877     else
878         AC_MSG_ERROR([only SPARC and i386 processors are supported])
879     fi
880     ;;
882 linux-gnu*|k*bsd*-gnu*)
883     using_freetype_fontconfig=yes
884     using_x11=yes
885     build_skia=yes
886     test_gdb_index=yes
887     test_split_debug=yes
888     if test "$enable_fuzzers" = yes; then
889         test_system_freetype=no
890     fi
891     _os=Linux
892     ;;
894 gnu)
895     using_freetype_fontconfig=yes
896     using_x11=no
897     _os=GNU
898      ;;
900 cygwin*|wsl*)
901     # When building on Windows normally with MSVC under Cygwin,
902     # configure thinks that the host platform (the platform the
903     # built code will run on) is Cygwin, even if it obviously is
904     # Windows, which in Autoconf terminology is called
905     # "mingw32". (Which is misleading as MinGW is the name of the
906     # tool-chain, not an operating system.)
908     # Somewhat confusing, yes. But this configure script doesn't
909     # look at $host etc that much, it mostly uses its own $_os
910     # variable, set here in this case statement.
912     using_freetype_fontconfig=no
913     using_x11=no
914     test_openldap=no
915     build_skia=yes
916     _os=WINNT
918     DLLPOST=".dll"
919     LINKFLAGSNOUNDEFS=
921     if test "$host_cpu" = "aarch64"; then
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     if test -n "$LODE_HOME" ; then
932         mac_sanitize_path
933         AC_MSG_NOTICE([sanitized the PATH to $PATH])
934     fi
935     _os=Darwin
936     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
937     INSTROOTCONTENTSUFFIX=/Contents
938     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
939     # See comment above the case "$host_os"
940     LINKFLAGSSHL="-dynamiclib -single_module"
942     # -fPIC is default
943     PICSWITCH=""
945     DLLPOST=".dylib"
947     # -undefined error is the default
948     LINKFLAGSNOUNDEFS=""
949     case "$host_cpu" in
950     aarch64|arm64)
951         case "$host_os" in
952         macos*)
953             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
954             # the "macos" part so be sure to use aarch64-apple-darwin for now.
955             HOST_PLATFORM=aarch64-apple-darwin
956             ;;
957         esac
959         # Apple's Clang uses "arm64"
960         host_cpu_for_clang=arm64
961     esac
964 ios*) # iOS
965     using_freetype_fontconfig=no
966     using_vclplug=no
967     using_x11=no
968     build_crypto=no
969     test_cmis=no
970     test_openldap=no
971     test_webdav=no
972     if test -n "$LODE_HOME" ; then
973         mac_sanitize_path
974         AC_MSG_NOTICE([sanitized the PATH to $PATH])
975     fi
976     enable_gpgmepp=no
977     _os=iOS
978     enable_mpl_subset=yes
979     enable_lotuswordpro=no
980     disable_database_connectivity_dependencies
981     enable_coinmp=no
982     enable_lpsolve=no
983     enable_extension_integration=no
984     enable_xmlhelp=no
985     with_ppds=no
986     if test "$enable_ios_simulator" = "yes"; then
987         host=x86_64-apple-darwin
988     fi
989     # See comment above the case "$host_os"
990     LINKFLAGSSHL="-dynamiclib -single_module"
992     # -fPIC is default
993     PICSWITCH=""
995     DLLPOST=".dylib"
997     # -undefined error is the default
998     LINKFLAGSNOUNDEFS=""
1000     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1001     # part, so use aarch64-apple-darwin for now.
1002     HOST_PLATFORM=aarch64-apple-darwin
1004     # Apple's Clang uses "arm64"
1005     host_cpu_for_clang=arm64
1008 freebsd*)
1009     using_freetype_fontconfig=yes
1010     using_x11=yes
1011     build_skia=yes
1012     AC_MSG_CHECKING([the FreeBSD operating system release])
1013     if test -n "$with_os_version"; then
1014         OSVERSION="$with_os_version"
1015     else
1016         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1017     fi
1018     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1019     AC_MSG_CHECKING([which thread library to use])
1020     if test "$OSVERSION" -lt "500016"; then
1021         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1022         PTHREAD_LIBS="-pthread"
1023     elif test "$OSVERSION" -lt "502102"; then
1024         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1025         PTHREAD_LIBS="-lc_r"
1026     else
1027         PTHREAD_CFLAGS=""
1028         PTHREAD_LIBS="-pthread"
1029     fi
1030     AC_MSG_RESULT([$PTHREAD_LIBS])
1031     _os=FreeBSD
1032     ;;
1034 *netbsd*)
1035     using_freetype_fontconfig=yes
1036     using_x11=yes
1037     test_gtk3_kde5=no
1038     build_skia=yes
1039     PTHREAD_LIBS="-pthread -lpthread"
1040     _os=NetBSD
1041     ;;
1043 aix*)
1044     using_freetype_fontconfig=yes
1045     using_x11=yes
1046     test_randr=no
1047     test_gstreamer_1_0=no
1048     PTHREAD_LIBS=-pthread
1049     _os=AIX
1050     ;;
1052 openbsd*)
1053     using_freetype_fontconfig=yes
1054     using_x11=yes
1055     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1056     PTHREAD_LIBS="-pthread"
1057     _os=OpenBSD
1058     ;;
1060 dragonfly*)
1061     using_freetype_fontconfig=yes
1062     using_x11=yes
1063     build_skia=yes
1064     PTHREAD_LIBS="-pthread"
1065     _os=DragonFly
1066     ;;
1068 linux-android*)
1069     using_freetype_fontconfig=yes
1070     using_headless_plugin=no
1071     using_x11=no
1072     build_crypto=no
1073     test_openldap=no
1074     test_system_freetype=no
1075     test_webdav=no
1076     disable_database_connectivity_dependencies
1077     enable_lotuswordpro=no
1078     enable_mpl_subset=yes
1079     enable_cairo_canvas=no
1080     enable_coinmp=yes
1081     enable_lpsolve=no
1082     enable_odk=no
1083     enable_python=no
1084     enable_xmlhelp=no
1085     _os=Android
1087     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1088     ;;
1090 haiku*)
1091     using_freetype_fontconfig=yes
1092     using_x11=no
1093     test_gtk3_kde5=no
1094     test_kf5=yes
1095     enable_odk=no
1096     enable_coinmp=no
1097     enable_pdfium=no
1098     enable_sdremote=no
1099     enable_postgresql_sdbc=no
1100     enable_firebird_sdbc=no
1101     _os=Haiku
1102     ;;
1104 emscripten)
1105     using_freetype_fontconfig=yes
1106     using_x11=no
1107     test_openldap=no
1108     enable_compiler_plugins=no
1109     test_cmis=no
1110     test_webdav=no
1111     enable_database_connectivity=no
1112     enable_lpsolve=no
1113     enable_xmlhelp=no
1114     with_system_zlib=no
1115     with_theme="breeze"
1116     _os=Emscripten
1117     ;;
1120     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1121     ;;
1122 esac
1124 AC_SUBST(HOST_PLATFORM)
1126 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1127     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1130 # Set defaults, if not set by platform
1131 test "${test_cups+set}" = set || test_cups="$using_x11"
1132 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1133 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1134 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1135 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1136 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1137 # don't handle test_qt5, so it can disable test_kf5 later
1138 test "${test_randr+set}" = set || test_randr="$using_x11"
1139 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1140 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1142 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1143 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1144 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1146 # convenience / platform overriding "fixes"
1147 # Don't sort!
1148 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1149 test "$test_kf5" = yes && test_qt5=yes
1150 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1151 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1152 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1154 # Keep in sync with the above $using_x11 depending test default list
1155 disable_x11_tests()
1157     test_cups=no
1158     test_dbus=no
1159     test_gstreamer_1_0=no
1160     test_gtk3_kde5=no
1161     test_gtk3=no
1162     test_gtk4=no
1163     test_kf5=no
1164     test_qt5=no
1165     test_randr=no
1166     test_xrender=no
1169 test "$using_x11" = yes && USING_X11=TRUE
1171 if test "$using_freetype_fontconfig" = yes; then
1172     if test "$using_headless_plugin" = yes; then
1173         AC_DEFINE(ENABLE_HEADLESS)
1174         ENABLE_HEADLESS=TRUE
1175     fi
1178 AC_SUBST(ENABLE_HEADLESS)
1180 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1181 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1182 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1183 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1185 # ===================================================================
1187 # End initial platform setup
1189 # ===================================================================
1191 if test "$_os" = "Android" ; then
1192     # Verify that the NDK and SDK options are proper
1193     if test -z "$with_android_ndk"; then
1194         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1195     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1196         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1197     fi
1199     if test -z "$ANDROID_SDK_HOME"; then
1200         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1201     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1202         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1203     fi
1205     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1206     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1207         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1208                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1209                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1210         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1211         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1212         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1213     fi
1214     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1215         AC_MSG_WARN([android support repository not found - install with
1216                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1217                      to allow the build to download the specified version of the android support libraries])
1218         add_warning "android support repository not found - install with"
1219         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1220         add_warning "to allow the build to download the specified version of the android support libraries"
1221     fi
1224 if test "$_os" = "AIX"; then
1225     AC_PATH_PROG(GAWK, gawk)
1226     if test -z "$GAWK"; then
1227         AC_MSG_ERROR([gawk not found in \$PATH])
1228     fi
1231 AC_SUBST(SDKDIRNAME)
1233 AC_SUBST(PTHREAD_CFLAGS)
1234 AC_SUBST(PTHREAD_LIBS)
1236 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1237 # By default use the ones specified by our build system,
1238 # but explicit override is possible.
1239 AC_MSG_CHECKING(for explicit AFLAGS)
1240 if test -n "$AFLAGS"; then
1241     AC_MSG_RESULT([$AFLAGS])
1242     x_AFLAGS=
1243 else
1244     AC_MSG_RESULT(no)
1245     x_AFLAGS=[\#]
1247 AC_MSG_CHECKING(for explicit CFLAGS)
1248 if test -n "$CFLAGS"; then
1249     AC_MSG_RESULT([$CFLAGS])
1250     x_CFLAGS=
1251 else
1252     AC_MSG_RESULT(no)
1253     x_CFLAGS=[\#]
1255 AC_MSG_CHECKING(for explicit CXXFLAGS)
1256 if test -n "$CXXFLAGS"; then
1257     AC_MSG_RESULT([$CXXFLAGS])
1258     x_CXXFLAGS=
1259 else
1260     AC_MSG_RESULT(no)
1261     x_CXXFLAGS=[\#]
1263 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1264 if test -n "$OBJCFLAGS"; then
1265     AC_MSG_RESULT([$OBJCFLAGS])
1266     x_OBJCFLAGS=
1267 else
1268     AC_MSG_RESULT(no)
1269     x_OBJCFLAGS=[\#]
1271 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1272 if test -n "$OBJCXXFLAGS"; then
1273     AC_MSG_RESULT([$OBJCXXFLAGS])
1274     x_OBJCXXFLAGS=
1275 else
1276     AC_MSG_RESULT(no)
1277     x_OBJCXXFLAGS=[\#]
1279 AC_MSG_CHECKING(for explicit LDFLAGS)
1280 if test -n "$LDFLAGS"; then
1281     AC_MSG_RESULT([$LDFLAGS])
1282     x_LDFLAGS=
1283 else
1284     AC_MSG_RESULT(no)
1285     x_LDFLAGS=[\#]
1287 AC_SUBST(AFLAGS)
1288 AC_SUBST(CFLAGS)
1289 AC_SUBST(CXXFLAGS)
1290 AC_SUBST(OBJCFLAGS)
1291 AC_SUBST(OBJCXXFLAGS)
1292 AC_SUBST(LDFLAGS)
1293 AC_SUBST(x_AFLAGS)
1294 AC_SUBST(x_CFLAGS)
1295 AC_SUBST(x_CXXFLAGS)
1296 AC_SUBST(x_OBJCFLAGS)
1297 AC_SUBST(x_OBJCXXFLAGS)
1298 AC_SUBST(x_LDFLAGS)
1300 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1301 my_original_CFLAGS=$CFLAGS
1302 my_original_CXXFLAGS=$CXXFLAGS
1303 my_original_CPPFLAGS=$CPPFLAGS
1305 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1306 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1307 dnl AC_PROG_CC internally.
1308 if test "$_os" != "WINNT"; then
1309     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1310     save_CFLAGS=$CFLAGS
1311     AC_PROG_CC
1312     CFLAGS=$save_CFLAGS
1313     if test -z "$CC_BASE"; then
1314         CC_BASE=`first_arg_basename "$CC"`
1315     fi
1318 if test "$_os" != "WINNT"; then
1319     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1320 else
1321     ENDIANNESS=little
1323 AC_SUBST(ENDIANNESS)
1325 if test $_os != "WINNT"; then
1326     save_LIBS="$LIBS"
1327     AC_SEARCH_LIBS([dlsym], [dl],
1328         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1329         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1330     LIBS="$save_LIBS"
1332 AC_SUBST(DLOPEN_LIBS)
1334 dnl ===================================================================
1335 dnl Sanity checks for Emscripten SDK setup
1336 dnl ===================================================================
1338 if test "$_os" = "Emscripten"; then
1339     EMSCRIPTEN_ERROR=0
1340     if ! which emconfigure >/dev/null 2>&1; then
1341         AC_MSG_WARN([emconfigure must be in your \$PATH])
1342         EMSCRIPTEN_ERROR=1
1343     fi
1344     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1345         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1346         EMSCRIPTEN_ERROR=1
1347     fi
1348     if test $EMSCRIPTEN_ERROR -ne 0; then
1349         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1350     fi
1353 ###############################################################################
1354 # Extensions switches --enable/--disable
1355 ###############################################################################
1356 # By default these should be enabled unless having extra dependencies.
1357 # If there is extra dependency over configure options then the enable should
1358 # be automagic based on whether the requiring feature is enabled or not.
1359 # All this options change anything only with --enable-extension-integration.
1361 # The name of this option and its help string makes it sound as if
1362 # extensions are built anyway, just not integrated in the installer,
1363 # if you use --disable-extension-integration. Is that really the
1364 # case?
1366 AC_ARG_ENABLE(ios-simulator,
1367     AS_HELP_STRING([--enable-ios-simulator],
1368         [build for iOS simulator])
1371 libo_FUZZ_ARG_ENABLE(extension-integration,
1372     AS_HELP_STRING([--disable-extension-integration],
1373         [Disable integration of the built extensions in the installer of the
1374          product. Use this switch to disable the integration.])
1377 AC_ARG_ENABLE(avmedia,
1378     AS_HELP_STRING([--disable-avmedia],
1379         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1382 AC_ARG_ENABLE(database-connectivity,
1383     AS_HELP_STRING([--disable-database-connectivity],
1384         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1387 # This doesn't mean not building (or "integrating") extensions
1388 # (although it probably should; i.e. it should imply
1389 # --disable-extension-integration I guess), it means not supporting
1390 # any extension mechanism at all
1391 libo_FUZZ_ARG_ENABLE(extensions,
1392     AS_HELP_STRING([--disable-extensions],
1393         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1396 AC_ARG_ENABLE(scripting,
1397     AS_HELP_STRING([--disable-scripting],
1398         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1401 # This is mainly for Android and iOS, but could potentially be used in some
1402 # special case otherwise, too, so factored out as a separate setting
1404 AC_ARG_ENABLE(dynamic-loading,
1405     AS_HELP_STRING([--disable-dynamic-loading],
1406         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1409 libo_FUZZ_ARG_ENABLE(report-builder,
1410     AS_HELP_STRING([--disable-report-builder],
1411         [Disable the Report Builder.])
1414 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1415     AS_HELP_STRING([--enable-ext-wiki-publisher],
1416         [Enable the Wiki Publisher extension.])
1419 libo_FUZZ_ARG_ENABLE(lpsolve,
1420     AS_HELP_STRING([--disable-lpsolve],
1421         [Disable compilation of the lp solve solver ])
1423 libo_FUZZ_ARG_ENABLE(coinmp,
1424     AS_HELP_STRING([--disable-coinmp],
1425         [Disable compilation of the CoinMP solver ])
1428 libo_FUZZ_ARG_ENABLE(pdfimport,
1429     AS_HELP_STRING([--disable-pdfimport],
1430         [Disable building the PDF import feature.])
1433 libo_FUZZ_ARG_ENABLE(pdfium,
1434     AS_HELP_STRING([--disable-pdfium],
1435         [Disable building PDFium. Results in unsecure PDF signature verification.])
1438 libo_FUZZ_ARG_ENABLE(skia,
1439     AS_HELP_STRING([--disable-skia],
1440         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1443 ###############################################################################
1445 dnl ---------- *** ----------
1447 libo_FUZZ_ARG_ENABLE(mergelibs,
1448     AS_HELP_STRING([--enable-mergelibs],
1449         [Merge several of the smaller libraries into one big, "merged", one.])
1452 libo_FUZZ_ARG_ENABLE(breakpad,
1453     AS_HELP_STRING([--enable-breakpad],
1454         [Enables breakpad for crash reporting.])
1457 libo_FUZZ_ARG_ENABLE(crashdump,
1458     AS_HELP_STRING([--disable-crashdump],
1459         [Disable dump.ini and dump-file, when --enable-breakpad])
1462 AC_ARG_ENABLE(fetch-external,
1463     AS_HELP_STRING([--disable-fetch-external],
1464         [Disables fetching external tarballs from web sources.])
1467 AC_ARG_ENABLE(fuzzers,
1468     AS_HELP_STRING([--enable-fuzzers],
1469         [Enables building libfuzzer targets for fuzz testing.])
1472 libo_FUZZ_ARG_ENABLE(pch,
1473     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1474         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1475          Using 'system' will include only external headers, 'base' will add also headers
1476          from base modules, 'normal' will also add all headers except from the module built,
1477          'full' will use all suitable headers even from a module itself.])
1480 libo_FUZZ_ARG_ENABLE(epm,
1481     AS_HELP_STRING([--enable-epm],
1482         [LibreOffice includes self-packaging code, that requires epm, however epm is
1483          useless for large scale package building.])
1486 libo_FUZZ_ARG_ENABLE(odk,
1487     AS_HELP_STRING([--enable-odk],
1488         [Enable building the Office Development Kit, the part that extensions need to build against])
1491 AC_ARG_ENABLE(mpl-subset,
1492     AS_HELP_STRING([--enable-mpl-subset],
1493         [Don't compile any pieces which are not MPL or more liberally licensed])
1496 libo_FUZZ_ARG_ENABLE(evolution2,
1497     AS_HELP_STRING([--enable-evolution2],
1498         [Allows the built-in evolution 2 addressbook connectivity build to be
1499          enabled.])
1502 AC_ARG_ENABLE(avahi,
1503     AS_HELP_STRING([--enable-avahi],
1504         [Determines whether to use Avahi to advertise Impress to remote controls.])
1507 libo_FUZZ_ARG_ENABLE(werror,
1508     AS_HELP_STRING([--enable-werror],
1509         [Turn warnings to errors. (Has no effect in modules where the treating
1510          of warnings as errors is disabled explicitly.)]),
1513 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1514     AS_HELP_STRING([--enable-assert-always-abort],
1515         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1518 libo_FUZZ_ARG_ENABLE(dbgutil,
1519     AS_HELP_STRING([--enable-dbgutil],
1520         [Provide debugging support from --enable-debug and include additional debugging
1521          utilities such as object counting or more expensive checks.
1522          This is the recommended option for developers.
1523          Note that this makes the build ABI incompatible, it is not possible to mix object
1524          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1526 libo_FUZZ_ARG_ENABLE(debug,
1527     AS_HELP_STRING([--enable-debug],
1528         [Include debugging information, disable compiler optimization and inlining plus
1529          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1531 libo_FUZZ_ARG_ENABLE(split-debug,
1532     AS_HELP_STRING([--disable-split-debug],
1533         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1534          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1536 libo_FUZZ_ARG_ENABLE(gdb-index,
1537     AS_HELP_STRING([--disable-gdb-index],
1538         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1539          The feature requires the gold or lld linker.]))
1541 libo_FUZZ_ARG_ENABLE(sal-log,
1542     AS_HELP_STRING([--enable-sal-log],
1543         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1545 libo_FUZZ_ARG_ENABLE(symbols,
1546     AS_HELP_STRING([--enable-symbols],
1547         [Generate debug information.
1548          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1549          otherwise. It is possible to explicitly specify gbuild build targets
1550          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1551          everything in the directory; there is no ordering, more specific overrides
1552          more general, and disabling takes precedence).
1553          Example: --enable-symbols="all -sw/ -Library_sc".]))
1555 libo_FUZZ_ARG_ENABLE(optimized,
1556     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1557         [Whether to compile with optimization flags.
1558          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1559          otherwise. Using 'debug' will try to use only optimizations that should
1560          not interfere with debugging. For Emscripten we default to optimized (-O1)
1561          debug build, as otherwise binaries become too large.]))
1563 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1564     AS_HELP_STRING([--disable-runtime-optimizations],
1565         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1566          JVM JIT) that are known to interact badly with certain dynamic analysis
1567          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1568          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1569          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1571 AC_ARG_WITH(valgrind,
1572     AS_HELP_STRING([--with-valgrind],
1573         [Make availability of Valgrind headers a hard requirement.]))
1575 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1576     AS_HELP_STRING([--enable-compiler-plugins],
1577         [Enable compiler plugins that will perform additional checks during
1578          building. Enabled automatically by --enable-dbgutil.
1579          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1580 COMPILER_PLUGINS_DEBUG=
1581 if test "$enable_compiler_plugins" = debug; then
1582     enable_compiler_plugins=yes
1583     COMPILER_PLUGINS_DEBUG=TRUE
1586 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1587     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1588         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1589          relevant in the --disable-compiler-plugins case.]))
1591 libo_FUZZ_ARG_ENABLE(ooenv,
1592     AS_HELP_STRING([--enable-ooenv],
1593         [Enable ooenv for the instdir installation.]))
1595 AC_ARG_ENABLE(lto,
1596     AS_HELP_STRING([--enable-lto],
1597         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1598          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1599          linker. For MSVC, this option is broken at the moment. This is experimental work
1600          in progress that shouldn't be used unless you are working on it.)]))
1602 AC_ARG_ENABLE(python,
1603     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1604         [Enables or disables Python support at run-time.
1605          Also specifies what Python to use at build-time.
1606          'fully-internal' even forces the internal version for uses of Python
1607          during the build.
1608          On macOS the only choices are
1609          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1610          ]))
1612 libo_FUZZ_ARG_ENABLE(gtk3,
1613     AS_HELP_STRING([--disable-gtk3],
1614         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1615 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1617 AC_ARG_ENABLE(gtk4,
1618     AS_HELP_STRING([--enable-gtk4],
1619         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1621 AC_ARG_ENABLE(introspection,
1622     AS_HELP_STRING([--enable-introspection],
1623         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1624          Linux distributions.)]))
1626 AC_ARG_ENABLE(split-app-modules,
1627     AS_HELP_STRING([--enable-split-app-modules],
1628         [Split file lists for app modules, e.g. base, calc.
1629          Has effect only with make distro-pack-install]),
1632 AC_ARG_ENABLE(split-opt-features,
1633     AS_HELP_STRING([--enable-split-opt-features],
1634         [Split file lists for some optional features, e.g. pyuno, testtool.
1635          Has effect only with make distro-pack-install]),
1638 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1639     AS_HELP_STRING([--disable-cairo-canvas],
1640         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1643 libo_FUZZ_ARG_ENABLE(dbus,
1644     AS_HELP_STRING([--disable-dbus],
1645         [Determines whether to enable features that depend on dbus.
1646          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1647 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1649 libo_FUZZ_ARG_ENABLE(sdremote,
1650     AS_HELP_STRING([--disable-sdremote],
1651         [Determines whether to enable Impress remote control (i.e. the server component).]),
1652 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1654 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1655     AS_HELP_STRING([--disable-sdremote-bluetooth],
1656         [Determines whether to build sdremote with bluetooth support.
1657          Requires dbus on Linux.]))
1659 libo_FUZZ_ARG_ENABLE(gio,
1660     AS_HELP_STRING([--disable-gio],
1661         [Determines whether to use the GIO support.]),
1662 ,test "${enable_gio+set}" = set || enable_gio=yes)
1664 AC_ARG_ENABLE(qt5,
1665     AS_HELP_STRING([--enable-qt5],
1666         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1667          available.]),
1670 AC_ARG_ENABLE(kf5,
1671     AS_HELP_STRING([--enable-kf5],
1672         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1673          KF5 are available.]),
1676 AC_ARG_ENABLE(gtk3_kde5,
1677     AS_HELP_STRING([--enable-gtk3-kde5],
1678         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1679          platforms where Gtk3, Qt5 and Plasma is available.]),
1682 AC_ARG_ENABLE(gui,
1683     AS_HELP_STRING([--disable-gui],
1684         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1685 ,enable_gui=yes)
1687 libo_FUZZ_ARG_ENABLE(randr,
1688     AS_HELP_STRING([--disable-randr],
1689         [Disable RandR support in the vcl project.]),
1690 ,test "${enable_randr+set}" = set || enable_randr=yes)
1692 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1693     AS_HELP_STRING([--disable-gstreamer-1-0],
1694         [Disable building with the gstreamer 1.0 avmedia backend.]),
1695 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1697 libo_FUZZ_ARG_ENABLE([eot],
1698     [AS_HELP_STRING([--enable-eot],
1699         [Enable support for Embedded OpenType fonts.])],
1700 ,test "${enable_eot+set}" = set || enable_eot=no)
1702 libo_FUZZ_ARG_ENABLE(cve-tests,
1703     AS_HELP_STRING([--disable-cve-tests],
1704         [Prevent CVE tests to be executed]),
1707 libo_FUZZ_ARG_ENABLE(chart-tests,
1708     AS_HELP_STRING([--enable-chart-tests],
1709         [Executes chart XShape tests. In a perfect world these tests would be
1710          stable and everyone could run them, in reality it is best to run them
1711          only on a few machines that are known to work and maintained by people
1712          who can judge if a test failure is a regression or not.]),
1715 AC_ARG_ENABLE(build-opensymbol,
1716     AS_HELP_STRING([--enable-build-opensymbol],
1717         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1718          fontforge installed.]),
1721 AC_ARG_ENABLE(dependency-tracking,
1722     AS_HELP_STRING([--enable-dependency-tracking],
1723         [Do not reject slow dependency extractors.])[
1724   --disable-dependency-tracking
1725                           Disables generation of dependency information.
1726                           Speed up one-time builds.],
1729 AC_ARG_ENABLE(icecream,
1730     AS_HELP_STRING([--enable-icecream],
1731         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1732          It defaults to /opt/icecream for the location of the icecream gcc/g++
1733          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1736 AC_ARG_ENABLE(ld,
1737     AS_HELP_STRING([--enable-ld=<linker>],
1738         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1739          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1740          If <linker> contains any ':', the part before the first ':' is used as the value of
1741          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1742          needed for Clang 12).]),
1745 libo_FUZZ_ARG_ENABLE(cups,
1746     AS_HELP_STRING([--disable-cups],
1747         [Do not build cups support.])
1750 AC_ARG_ENABLE(ccache,
1751     AS_HELP_STRING([--disable-ccache],
1752         [Do not try to use ccache automatically.
1753          By default, unless on Windows, we will try to detect if ccache is available; in that case if
1754          CC/CXX are not yet set, and --enable-icecream is not given, we
1755          attempt to use ccache. --disable-ccache disables ccache completely.
1756          Additionally ccache's depend mode is enabled if possible,
1757          use --enable-ccache=nodepend to enable ccache without depend mode.
1761 libo_FUZZ_ARG_ENABLE(online-update,
1762     AS_HELP_STRING([--enable-online-update],
1763         [Enable the online update service that will check for new versions of
1764          LibreOffice. By default, it is enabled on Windows and Mac, disabled on Linux.
1765          If the value is "mar", the experimental Mozilla-like update will be
1766          enabled instead of the traditional update mechanism.]),
1769 AC_ARG_WITH(update-config,
1770     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1771                    [Path to the update config ini file]))
1773 libo_FUZZ_ARG_ENABLE(extension-update,
1774     AS_HELP_STRING([--disable-extension-update],
1775         [Disable possibility to update installed extensions.]),
1778 libo_FUZZ_ARG_ENABLE(release-build,
1779     AS_HELP_STRING([--enable-release-build],
1780         [Enable release build. Note that the "release build" choice is orthogonal to
1781          whether symbols are present, debug info is generated, or optimization
1782          is done.
1783          See http://wiki.documentfoundation.org/Development/DevBuild]),
1786 AC_ARG_ENABLE(windows-build-signing,
1787     AS_HELP_STRING([--enable-windows-build-signing],
1788         [Enable signing of windows binaries (*.exe, *.dll)]),
1791 AC_ARG_ENABLE(silent-msi,
1792     AS_HELP_STRING([--enable-silent-msi],
1793         [Enable MSI with LIMITUI=1 (silent install).]),
1796 AC_ARG_ENABLE(macosx-code-signing,
1797     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1798         [Sign executables, dylibs, frameworks and the app bundle. If you
1799          don't provide an identity the first suitable certificate
1800          in your keychain is used.]),
1803 AC_ARG_ENABLE(macosx-package-signing,
1804     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1805         [Create a .pkg suitable for uploading to the Mac App Store and sign
1806          it. If you don't provide an identity the first suitable certificate
1807          in your keychain is used.]),
1810 AC_ARG_ENABLE(macosx-sandbox,
1811     AS_HELP_STRING([--enable-macosx-sandbox],
1812         [Make the app bundle run in a sandbox. Requires code signing.
1813          Is required by apps distributed in the Mac App Store, and implies
1814          adherence to App Store rules.]),
1817 AC_ARG_WITH(macosx-bundle-identifier,
1818     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1819         [Define the macOS bundle identifier. Default is the somewhat weird
1820          org.libreoffice.script ("script", huh?).]),
1821 ,with_macosx_bundle_identifier=org.libreoffice.script)
1823 AC_ARG_WITH(product-name,
1824     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1825         [Define the product name. Default is AC_PACKAGE_NAME.]),
1826 ,with_product_name=$PRODUCTNAME)
1828 libo_FUZZ_ARG_ENABLE(community-flavor,
1829     AS_HELP_STRING([--disable-community-flavor],
1830         [Disable the Community branding.]),
1833 AC_ARG_WITH(package-version,
1834     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1835         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1838 libo_FUZZ_ARG_ENABLE(readonly-installset,
1839     AS_HELP_STRING([--enable-readonly-installset],
1840         [Prevents any attempts by LibreOffice to write into its installation. That means
1841          at least that no "system-wide" extensions can be added. Partly experimental work in
1842          progress, probably not fully implemented. Always enabled for macOS.]),
1845 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1846     AS_HELP_STRING([--disable-mariadb-sdbc],
1847         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1850 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1851     AS_HELP_STRING([--disable-postgresql-sdbc],
1852         [Disable the build of the PostgreSQL-SDBC driver.])
1855 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1856     AS_HELP_STRING([--disable-lotuswordpro],
1857         [Disable the build of the Lotus Word Pro filter.]),
1858 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1860 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1861     AS_HELP_STRING([--disable-firebird-sdbc],
1862         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1863 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1865 AC_ARG_ENABLE(bogus-pkg-config,
1866     AS_HELP_STRING([--enable-bogus-pkg-config],
1867         [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.]),
1870 AC_ARG_ENABLE(openssl,
1871     AS_HELP_STRING([--disable-openssl],
1872         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1873          components will either use GNUTLS or NSS. Work in progress,
1874          use only if you are hacking on it.]),
1875 ,enable_openssl=yes)
1877 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1878     AS_HELP_STRING([--enable-cipher-openssl-backend],
1879         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1880          Requires --enable-openssl.]))
1882 AC_ARG_ENABLE(nss,
1883     AS_HELP_STRING([--disable-nss],
1884         [Disable using NSS. If disabled,
1885          components will either use GNUTLS or openssl. Work in progress,
1886          use only if you are hacking on it.]),
1887 ,enable_nss=yes)
1889 AC_ARG_ENABLE(library-bin-tar,
1890     AS_HELP_STRING([--enable-library-bin-tar],
1891         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1892         Some libraries can save their build result in a tarball
1893         stored in TARFILE_LOCATION. That binary tarball is
1894         uniquely identified by the source tarball,
1895         the content of the config_host.mk file and the content
1896         of the top-level directory in core for that library
1897         If this option is enabled, then if such a tarfile exist, it will be untarred
1898         instead of the source tarfile, and the build step will be skipped for that
1899         library.
1900         If a proper tarfile does not exist, then the normal source-based
1901         build is done for that library and a proper binary tarfile is created
1902         for the next time.]),
1905 AC_ARG_ENABLE(dconf,
1906     AS_HELP_STRING([--disable-dconf],
1907         [Disable the dconf configuration backend (enabled by default where
1908          available).]))
1910 libo_FUZZ_ARG_ENABLE(formula-logger,
1911     AS_HELP_STRING(
1912         [--enable-formula-logger],
1913         [Enable formula logger for logging formula calculation flow in Calc.]
1914     )
1917 AC_ARG_ENABLE(ldap,
1918     AS_HELP_STRING([--disable-ldap],
1919         [Disable LDAP support.]),
1920 ,enable_ldap=yes)
1922 AC_ARG_ENABLE(opencl,
1923     AS_HELP_STRING([--disable-opencl],
1924         [Disable OpenCL support.]),
1925 ,enable_opencl=yes)
1927 libo_FUZZ_ARG_ENABLE(librelogo,
1928     AS_HELP_STRING([--disable-librelogo],
1929         [Do not build LibreLogo.]),
1930 ,enable_librelogo=yes)
1932 AC_ARG_ENABLE(cmis,
1933     AS_HELP_STRING([--disable-cmis],
1934         [Disable CMIS support.]),
1935 ,enable_cmis=yes)
1937 AC_ARG_ENABLE(curl,
1938     AS_HELP_STRING([--disable-curl],
1939         [Disable CURL support.]),
1940 ,enable_curl=yes)
1942 AC_ARG_ENABLE(wasm-strip,
1943     AS_HELP_STRING([--enable-wasm-strip],
1944         [Strip the static build like for WASM/emscripten platform.]),
1945 ,enable_wasm_strip=yes)
1947 AC_ARG_ENABLE(xmlhelp,
1948     AS_HELP_STRING([--disable-xmlhelp],
1949         [Disable XML help support]),
1950 ,enable_xmlhelp=yes)
1953 dnl ===================================================================
1954 dnl Optional Packages (--with/without-)
1955 dnl ===================================================================
1957 AC_ARG_WITH(gcc-home,
1958     AS_HELP_STRING([--with-gcc-home],
1959         [Specify the location of gcc/g++ manually. This can be used in conjunction
1960          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1961          non-default path.]),
1964 AC_ARG_WITH(gnu-patch,
1965     AS_HELP_STRING([--with-gnu-patch],
1966         [Specify location of GNU patch on Solaris or FreeBSD.]),
1969 AC_ARG_WITH(build-platform-configure-options,
1970     AS_HELP_STRING([--with-build-platform-configure-options],
1971         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1974 AC_ARG_WITH(gnu-cp,
1975     AS_HELP_STRING([--with-gnu-cp],
1976         [Specify location of GNU cp on Solaris or FreeBSD.]),
1979 AC_ARG_WITH(external-tar,
1980     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1981         [Specify an absolute path of where to find (and store) tarfiles.]),
1982     TARFILE_LOCATION=$withval ,
1985 AC_ARG_WITH(referenced-git,
1986     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
1987         [Specify another checkout directory to reference. This makes use of
1988                  git submodule update --reference, and saves a lot of diskspace
1989                  when having multiple trees side-by-side.]),
1990     GIT_REFERENCE_SRC=$withval ,
1993 AC_ARG_WITH(linked-git,
1994     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
1995         [Specify a directory where the repositories of submodules are located.
1996          This uses a method similar to git-new-workdir to get submodules.]),
1997     GIT_LINK_SRC=$withval ,
2000 AC_ARG_WITH(galleries,
2001     AS_HELP_STRING([--with-galleries],
2002         [Specify how galleries should be built. It is possible either to
2003          build these internally from source ("build"),
2004          or to disable them ("no")]),
2007 AC_ARG_WITH(theme,
2008     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2009         [Choose which themes to include. By default those themes with an '*' are included.
2010          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2011          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2014 libo_FUZZ_ARG_WITH(helppack-integration,
2015     AS_HELP_STRING([--without-helppack-integration],
2016         [It will not integrate the helppacks to the installer
2017          of the product. Please use this switch to use the online help
2018          or separate help packages.]),
2021 libo_FUZZ_ARG_WITH(fonts,
2022     AS_HELP_STRING([--without-fonts],
2023         [LibreOffice includes some third-party fonts to provide a reliable basis for
2024          help content, templates, samples, etc. When these fonts are already
2025          known to be available on the system then you should use this option.]),
2028 AC_ARG_WITH(epm,
2029     AS_HELP_STRING([--with-epm],
2030         [Decides which epm to use. Default is to use the one from the system if
2031          one is built. When either this is not there or you say =internal epm
2032          will be built.]),
2035 AC_ARG_WITH(package-format,
2036     AS_HELP_STRING([--with-package-format],
2037         [Specify package format(s) for LibreOffice installation sets. The
2038          implicit --without-package-format leads to no installation sets being
2039          generated. Possible values: aix, archive, bsd, deb, dmg,
2040          installed, msi, pkg, and rpm.
2041          Example: --with-package-format='deb rpm']),
2044 AC_ARG_WITH(tls,
2045     AS_HELP_STRING([--with-tls],
2046         [Decides which TLS/SSL and cryptographic implementations to use for
2047          LibreOffice's code. Notice that this doesn't apply for depending
2048          libraries like "neon", for example. Default is to use NSS
2049          although OpenSSL is also possible. Notice that selecting NSS restricts
2050          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2051          restrict by now the usage of NSS in LO's code. Possible values:
2052          openssl, nss. Example: --with-tls="nss"]),
2055 AC_ARG_WITH(system-libs,
2056     AS_HELP_STRING([--with-system-libs],
2057         [Use libraries already on system -- enables all --with-system-* flags.]),
2060 AC_ARG_WITH(system-bzip2,
2061     AS_HELP_STRING([--with-system-bzip2],
2062         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2063     [with_system_bzip2="$with_system_libs"])
2065 AC_ARG_WITH(system-headers,
2066     AS_HELP_STRING([--with-system-headers],
2067         [Use headers already on system -- enables all --with-system-* flags for
2068          external packages whose headers are the only entities used i.e.
2069          boost/odbc/sane-header(s).]),,
2070     [with_system_headers="$with_system_libs"])
2072 AC_ARG_WITH(system-jars,
2073     AS_HELP_STRING([--without-system-jars],
2074         [When building with --with-system-libs, also the needed jars are expected
2075          on the system. Use this to disable that]),,
2076     [with_system_jars="$with_system_libs"])
2078 AC_ARG_WITH(system-cairo,
2079     AS_HELP_STRING([--with-system-cairo],
2080         [Use cairo libraries already on system.  Happens automatically for
2081          (implicit) --enable-gtk3.]))
2083 AC_ARG_WITH(system-epoxy,
2084     AS_HELP_STRING([--with-system-epoxy],
2085         [Use epoxy libraries already on system.  Happens automatically for
2086          (implicit) --enable-gtk3.]),,
2087        [with_system_epoxy="$with_system_libs"])
2089 AC_ARG_WITH(myspell-dicts,
2090     AS_HELP_STRING([--with-myspell-dicts],
2091         [Adds myspell dictionaries to the LibreOffice installation set]),
2094 AC_ARG_WITH(system-dicts,
2095     AS_HELP_STRING([--without-system-dicts],
2096         [Do not use dictionaries from system paths.]),
2099 AC_ARG_WITH(external-dict-dir,
2100     AS_HELP_STRING([--with-external-dict-dir],
2101         [Specify external dictionary dir.]),
2104 AC_ARG_WITH(external-hyph-dir,
2105     AS_HELP_STRING([--with-external-hyph-dir],
2106         [Specify external hyphenation pattern dir.]),
2109 AC_ARG_WITH(external-thes-dir,
2110     AS_HELP_STRING([--with-external-thes-dir],
2111         [Specify external thesaurus dir.]),
2114 AC_ARG_WITH(system-zlib,
2115     AS_HELP_STRING([--with-system-zlib],
2116         [Use zlib already on system.]),,
2117     [with_system_zlib=auto])
2119 AC_ARG_WITH(system-jpeg,
2120     AS_HELP_STRING([--with-system-jpeg],
2121         [Use jpeg already on system.]),,
2122     [with_system_jpeg="$with_system_libs"])
2124 AC_ARG_WITH(system-clucene,
2125     AS_HELP_STRING([--with-system-clucene],
2126         [Use clucene already on system.]),,
2127     [with_system_clucene="$with_system_libs"])
2129 AC_ARG_WITH(system-expat,
2130     AS_HELP_STRING([--with-system-expat],
2131         [Use expat already on system.]),,
2132     [with_system_expat="$with_system_libs"])
2134 AC_ARG_WITH(system-libxml,
2135     AS_HELP_STRING([--with-system-libxml],
2136         [Use libxml/libxslt already on system.]),,
2137     [with_system_libxml=auto])
2139 AC_ARG_WITH(system-icu,
2140     AS_HELP_STRING([--with-system-icu],
2141         [Use icu already on system.]),,
2142     [with_system_icu="$with_system_libs"])
2144 AC_ARG_WITH(system-ucpp,
2145     AS_HELP_STRING([--with-system-ucpp],
2146         [Use ucpp already on system.]),,
2147     [])
2149 AC_ARG_WITH(system-openldap,
2150     AS_HELP_STRING([--with-system-openldap],
2151         [Use the OpenLDAP LDAP SDK already on system.]),,
2152     [with_system_openldap="$with_system_libs"])
2154 libo_FUZZ_ARG_ENABLE(poppler,
2155     AS_HELP_STRING([--disable-poppler],
2156         [Disable building Poppler.])
2159 AC_ARG_WITH(system-poppler,
2160     AS_HELP_STRING([--with-system-poppler],
2161         [Use system poppler (only needed for PDF import).]),,
2162     [with_system_poppler="$with_system_libs"])
2164 libo_FUZZ_ARG_ENABLE(gpgmepp,
2165     AS_HELP_STRING([--disable-gpgmepp],
2166         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2169 AC_ARG_WITH(system-gpgmepp,
2170     AS_HELP_STRING([--with-system-gpgmepp],
2171         [Use gpgmepp already on system]),,
2172     [with_system_gpgmepp="$with_system_libs"])
2174 AC_ARG_WITH(system-mariadb,
2175     AS_HELP_STRING([--with-system-mariadb],
2176         [Use MariaDB/MySQL libraries already on system.]),,
2177     [with_system_mariadb="$with_system_libs"])
2179 AC_ARG_ENABLE(bundle-mariadb,
2180     AS_HELP_STRING([--enable-bundle-mariadb],
2181         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2184 AC_ARG_WITH(system-postgresql,
2185     AS_HELP_STRING([--with-system-postgresql],
2186         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2187          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2188     [with_system_postgresql="$with_system_libs"])
2190 AC_ARG_WITH(libpq-path,
2191     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2192         [Use this PostgreSQL C interface (libpq) installation for building
2193          the PostgreSQL-SDBC extension.]),
2196 AC_ARG_WITH(system-firebird,
2197     AS_HELP_STRING([--with-system-firebird],
2198         [Use Firebird libraries already on system, for building the Firebird-SDBC
2199          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2200     [with_system_firebird="$with_system_libs"])
2202 AC_ARG_WITH(system-libtommath,
2203             AS_HELP_STRING([--with-system-libtommath],
2204                            [Use libtommath already on system]),,
2205             [with_system_libtommath="$with_system_libs"])
2207 AC_ARG_WITH(system-hsqldb,
2208     AS_HELP_STRING([--with-system-hsqldb],
2209         [Use hsqldb already on system.]))
2211 AC_ARG_WITH(hsqldb-jar,
2212     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2213         [Specify path to jarfile manually.]),
2214     HSQLDB_JAR=$withval)
2216 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2217     AS_HELP_STRING([--disable-scripting-beanshell],
2218         [Disable support for scripts in BeanShell.]),
2222 AC_ARG_WITH(system-beanshell,
2223     AS_HELP_STRING([--with-system-beanshell],
2224         [Use beanshell already on system.]),,
2225     [with_system_beanshell="$with_system_jars"])
2227 AC_ARG_WITH(beanshell-jar,
2228     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2229         [Specify path to jarfile manually.]),
2230     BSH_JAR=$withval)
2232 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2233     AS_HELP_STRING([--disable-scripting-javascript],
2234         [Disable support for scripts in JavaScript.]),
2238 AC_ARG_WITH(system-rhino,
2239     AS_HELP_STRING([--with-system-rhino],
2240         [Use rhino already on system.]),,)
2241 #    [with_system_rhino="$with_system_jars"])
2242 # Above is not used as we have different debug interface
2243 # patched into internal rhino. This code needs to be fixed
2244 # before we can enable it by default.
2246 AC_ARG_WITH(rhino-jar,
2247     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2248         [Specify path to jarfile manually.]),
2249     RHINO_JAR=$withval)
2251 AC_ARG_WITH(system-jfreereport,
2252     AS_HELP_STRING([--with-system-jfreereport],
2253         [Use JFreeReport already on system.]),,
2254     [with_system_jfreereport="$with_system_jars"])
2256 AC_ARG_WITH(sac-jar,
2257     AS_HELP_STRING([--with-sac-jar=JARFILE],
2258         [Specify path to jarfile manually.]),
2259     SAC_JAR=$withval)
2261 AC_ARG_WITH(libxml-jar,
2262     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2263         [Specify path to jarfile manually.]),
2264     LIBXML_JAR=$withval)
2266 AC_ARG_WITH(flute-jar,
2267     AS_HELP_STRING([--with-flute-jar=JARFILE],
2268         [Specify path to jarfile manually.]),
2269     FLUTE_JAR=$withval)
2271 AC_ARG_WITH(jfreereport-jar,
2272     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2273         [Specify path to jarfile manually.]),
2274     JFREEREPORT_JAR=$withval)
2276 AC_ARG_WITH(liblayout-jar,
2277     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2278         [Specify path to jarfile manually.]),
2279     LIBLAYOUT_JAR=$withval)
2281 AC_ARG_WITH(libloader-jar,
2282     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2283         [Specify path to jarfile manually.]),
2284     LIBLOADER_JAR=$withval)
2286 AC_ARG_WITH(libformula-jar,
2287     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2288         [Specify path to jarfile manually.]),
2289     LIBFORMULA_JAR=$withval)
2291 AC_ARG_WITH(librepository-jar,
2292     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2293         [Specify path to jarfile manually.]),
2294     LIBREPOSITORY_JAR=$withval)
2296 AC_ARG_WITH(libfonts-jar,
2297     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2298         [Specify path to jarfile manually.]),
2299     LIBFONTS_JAR=$withval)
2301 AC_ARG_WITH(libserializer-jar,
2302     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2303         [Specify path to jarfile manually.]),
2304     LIBSERIALIZER_JAR=$withval)
2306 AC_ARG_WITH(libbase-jar,
2307     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2308         [Specify path to jarfile manually.]),
2309     LIBBASE_JAR=$withval)
2311 AC_ARG_WITH(system-odbc,
2312     AS_HELP_STRING([--with-system-odbc],
2313         [Use the odbc headers already on system.]),,
2314     [with_system_odbc="auto"])
2316 AC_ARG_WITH(system-sane,
2317     AS_HELP_STRING([--with-system-sane],
2318         [Use sane.h already on system.]),,
2319     [with_system_sane="$with_system_headers"])
2321 AC_ARG_WITH(system-bluez,
2322     AS_HELP_STRING([--with-system-bluez],
2323         [Use bluetooth.h already on system.]),,
2324     [with_system_bluez="$with_system_headers"])
2326 AC_ARG_WITH(system-curl,
2327     AS_HELP_STRING([--with-system-curl],
2328         [Use curl already on system.]),,
2329     [with_system_curl=auto])
2331 AC_ARG_WITH(system-boost,
2332     AS_HELP_STRING([--with-system-boost],
2333         [Use boost already on system.]),,
2334     [with_system_boost="$with_system_headers"])
2336 AC_ARG_WITH(system-glm,
2337     AS_HELP_STRING([--with-system-glm],
2338         [Use glm already on system.]),,
2339     [with_system_glm="$with_system_headers"])
2341 AC_ARG_WITH(system-hunspell,
2342     AS_HELP_STRING([--with-system-hunspell],
2343         [Use libhunspell already on system.]),,
2344     [with_system_hunspell="$with_system_libs"])
2346 libo_FUZZ_ARG_ENABLE(zxing,
2347     AS_HELP_STRING([--disable-zxing],
2348        [Disable use of zxing external library.]))
2350 AC_ARG_WITH(system-zxing,
2351     AS_HELP_STRING([--with-system-zxing],
2352         [Use libzxing already on system.]),,
2353     [with_system_zxing="$with_system_libs"])
2355 AC_ARG_WITH(system-box2d,
2356     AS_HELP_STRING([--with-system-box2d],
2357         [Use box2d already on system.]),,
2358     [with_system_box2d="$with_system_libs"])
2360 AC_ARG_WITH(system-mythes,
2361     AS_HELP_STRING([--with-system-mythes],
2362         [Use mythes already on system.]),,
2363     [with_system_mythes="$with_system_libs"])
2365 AC_ARG_WITH(system-altlinuxhyph,
2366     AS_HELP_STRING([--with-system-altlinuxhyph],
2367         [Use ALTLinuxhyph already on system.]),,
2368     [with_system_altlinuxhyph="$with_system_libs"])
2370 AC_ARG_WITH(system-lpsolve,
2371     AS_HELP_STRING([--with-system-lpsolve],
2372         [Use lpsolve already on system.]),,
2373     [with_system_lpsolve="$with_system_libs"])
2375 AC_ARG_WITH(system-coinmp,
2376     AS_HELP_STRING([--with-system-coinmp],
2377         [Use CoinMP already on system.]),,
2378     [with_system_coinmp="$with_system_libs"])
2380 AC_ARG_WITH(system-liblangtag,
2381     AS_HELP_STRING([--with-system-liblangtag],
2382         [Use liblangtag library already on system.]),,
2383     [with_system_liblangtag="$with_system_libs"])
2385 AC_ARG_WITH(webdav,
2386     AS_HELP_STRING([--with-webdav],
2387         [Specify which library to use for webdav implementation.
2388          Possible values: "neon", "serf", "no". The default value is "neon".
2389          Example: --with-webdav="serf"]))
2391 AC_ARG_WITH(linker-hash-style,
2392     AS_HELP_STRING([--with-linker-hash-style],
2393         [Use linker with --hash-style=<style> when linking shared objects.
2394          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2395          if supported on the build system, and "sysv" otherwise.]))
2397 AC_ARG_WITH(jdk-home,
2398     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2399         [If you have installed JDK 9 or later on your system please supply the
2400          path here. Note that this is not the location of the java command but the
2401          location of the entire distribution. In case of cross-compiling, this
2402          is the JDK of the host os. Use --with-build-platform-configure-options
2403          to point to a different build platform JDK.]),
2406 AC_ARG_WITH(help,
2407     AS_HELP_STRING([--with-help],
2408         [Enable the build of help. There is a special parameter "common" that
2409          can be used to bundle only the common part, .e.g help-specific icons.
2410          This is useful when you build the helpcontent separately.])
2411     [
2412                           Usage:     --with-help    build the old local help
2413                                  --without-help     no local help (default)
2414                                  --with-help=html   build the new HTML local help
2415                                  --with-help=online build the new HTML online help
2416     ],
2419 AC_ARG_WITH(omindex,
2420    AS_HELP_STRING([--with-omindex],
2421         [Enable the support of xapian-omega index for online help.])
2422    [
2423                          Usage: --with-omindex=server prepare the pages for omindex
2424                                 but let xapian-omega be built in server.
2425                                 --with-omindex=noxap do not prepare online pages
2426                                 for xapian-omega
2427   ],
2430 libo_FUZZ_ARG_WITH(java,
2431     AS_HELP_STRING([--with-java=<java command>],
2432         [Specify the name of the Java interpreter command. Typically "java"
2433          which is the default.
2435          To build without support for Java components, applets, accessibility
2436          or the XML filters written in Java, use --without-java or --with-java=no.]),
2437     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2438     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2441 AC_ARG_WITH(jvm-path,
2442     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2443         [Use a specific JVM search path at runtime.
2444          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2447 AC_ARG_WITH(ant-home,
2448     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2449         [If you have installed Apache Ant on your system, please supply the path here.
2450          Note that this is not the location of the Ant binary but the location
2451          of the entire distribution.]),
2454 AC_ARG_WITH(symbol-config,
2455     AS_HELP_STRING([--with-symbol-config],
2456         [Configuration for the crashreport symbol upload]),
2457         [],
2458         [with_symbol_config=no])
2460 AC_ARG_WITH(export-validation,
2461     AS_HELP_STRING([--without-export-validation],
2462         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2463 ,with_export_validation=auto)
2465 AC_ARG_WITH(bffvalidator,
2466     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2467         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2468          Requires installed Microsoft Office Binary File Format Validator.
2469          Note: export-validation (--with-export-validation) is required to be turned on.
2470          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2471 ,with_bffvalidator=no)
2473 libo_FUZZ_ARG_WITH(junit,
2474     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2475         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2476          --without-junit disables those tests. Not relevant in the --without-java case.]),
2477 ,with_junit=yes)
2479 AC_ARG_WITH(hamcrest,
2480     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2481         [Specifies the hamcrest jar file to use for JUnit-based tests.
2482          --without-junit disables those tests. Not relevant in the --without-java case.]),
2483 ,with_hamcrest=yes)
2485 AC_ARG_WITH(perl-home,
2486     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2487         [If you have installed Perl 5 Distribution, on your system, please
2488          supply the path here. Note that this is not the location of the Perl
2489          binary but the location of the entire distribution.]),
2492 libo_FUZZ_ARG_WITH(doxygen,
2493     AS_HELP_STRING(
2494         [--with-doxygen=<absolute path to doxygen executable>],
2495         [Specifies the doxygen executable to use when generating ODK C/C++
2496          documentation. --without-doxygen disables generation of ODK C/C++
2497          documentation. Not relevant in the --disable-odk case.]),
2498 ,with_doxygen=yes)
2500 AC_ARG_WITH(visual-studio,
2501     AS_HELP_STRING([--with-visual-studio=<2019>],
2502         [Specify which Visual Studio version to use in case several are
2503          installed. Currently only 2019 (default) is supported.]),
2506 AC_ARG_WITH(windows-sdk,
2507     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2508         [Specify which Windows SDK, or "Windows Kit", version to use
2509          in case the one that came with the selected Visual Studio
2510          is not what you want for some reason. Note that not all compiler/SDK
2511          combinations are supported. The intent is that this option should not
2512          be needed.]),
2515 AC_ARG_WITH(lang,
2516     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2517         [Use this option to build LibreOffice with additional UI language support.
2518          English (US) is always included by default.
2519          Separate multiple languages with space.
2520          For all languages, use --with-lang=ALL.]),
2523 AC_ARG_WITH(locales,
2524     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2525         [Use this option to limit the locale information built in.
2526          Separate multiple locales with space.
2527          Very experimental and might well break stuff.
2528          Just a desperate measure to shrink code and data size.
2529          By default all the locales available is included.
2530          This option is completely unrelated to --with-lang.])
2531     [
2532                           Affects also our character encoding conversion
2533                           tables for encodings mainly targeted for a
2534                           particular locale, like EUC-CN and EUC-TW for
2535                           zh, ISO-2022-JP for ja.
2537                           Affects also our add-on break iterator data for
2538                           some languages.
2540                           For the default, all locales, don't use this switch at all.
2541                           Specifying just the language part of a locale means all matching
2542                           locales will be included.
2543     ],
2546 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2547 libo_FUZZ_ARG_WITH(krb5,
2548     AS_HELP_STRING([--with-krb5],
2549         [Enable MIT Kerberos 5 support in modules that support it.
2550          By default automatically enabled on platforms
2551          where a good system Kerberos 5 is available.]),
2554 libo_FUZZ_ARG_WITH(gssapi,
2555     AS_HELP_STRING([--with-gssapi],
2556         [Enable GSSAPI support in modules that support it.
2557          By default automatically enabled on platforms
2558          where a good system GSSAPI is available.]),
2561 AC_ARG_WITH(iwyu,
2562     AS_HELP_STRING([--with-iwyu],
2563         [Use given IWYU binary path to check unneeded includes instead of building.
2564          Use only if you are hacking on it.]),
2567 libo_FUZZ_ARG_WITH(lxml,
2568     AS_HELP_STRING([--without-lxml],
2569         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2570          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2571          report widget classes and ids.]),
2574 libo_FUZZ_ARG_WITH(latest-c++,
2575     AS_HELP_STRING([--with-latest-c++],
2576         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2577          published standard.]),,
2578         [with_latest_c__=no])
2580 dnl ===================================================================
2581 dnl Branding
2582 dnl ===================================================================
2584 AC_ARG_WITH(branding,
2585     AS_HELP_STRING([--with-branding=/path/to/images],
2586         [Use given path to retrieve branding images set.])
2587     [
2588                           Search for intro.png about.svg and logo.svg.
2589                           If any is missing, default ones will be used instead.
2591                           Search also progress.conf for progress
2592                           settings on intro screen :
2594                           PROGRESSBARCOLOR="255,255,255" Set color of
2595                           progress bar. Comma separated RGB decimal values.
2596                           PROGRESSSIZE="407,6" Set size of progress bar.
2597                           Comma separated decimal values (width, height).
2598                           PROGRESSPOSITION="61,317" Set position of progress
2599                           bar from left,top. Comma separated decimal values.
2600                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2601                           bar frame. Comma separated RGB decimal values.
2602                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2603                           bar text. Comma separated RGB decimal values.
2604                           PROGRESSTEXTBASELINE="287" Set vertical position of
2605                           progress bar text from top. Decimal value.
2607                           Default values will be used if not found.
2608     ],
2612 AC_ARG_WITH(extra-buildid,
2613     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2614         [Show addition build identification in about dialog.]),
2618 AC_ARG_WITH(vendor,
2619     AS_HELP_STRING([--with-vendor="John the Builder"],
2620         [Set vendor of the build.]),
2623 AC_ARG_WITH(privacy-policy-url,
2624     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2625         [The URL to your privacy policy (needed when
2626          enabling online-update or crashreporting via breakpad)]),
2627         [if test "x$with_privacy_policy_url" = "xyes"; then
2628             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2629          elif test "x$with_privacy_policy_url" = "xno"; then
2630             with_privacy_policy_url="undefined"
2631          fi]
2632 ,[with_privacy_policy_url="undefined"])
2634 AC_ARG_WITH(android-package-name,
2635     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2636         [Set Android package name of the build.]),
2639 AC_ARG_WITH(compat-oowrappers,
2640     AS_HELP_STRING([--with-compat-oowrappers],
2641         [Install oo* wrappers in parallel with
2642          lo* ones to keep backward compatibility.
2643          Has effect only with make distro-pack-install]),
2646 AC_ARG_WITH(os-version,
2647     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2648         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2651 AC_ARG_WITH(idlc-cpp,
2652     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2653         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2656 AC_ARG_WITH(parallelism,
2657     AS_HELP_STRING([--with-parallelism],
2658         [Number of jobs to run simultaneously during build. Parallel builds can
2659         save a lot of time on multi-cpu machines. Defaults to the number of
2660         CPUs on the machine, unless you configure --enable-icecream - then to
2661         40.]),
2664 AC_ARG_WITH(all-tarballs,
2665     AS_HELP_STRING([--with-all-tarballs],
2666         [Download all external tarballs unconditionally]))
2668 AC_ARG_WITH(gdrive-client-id,
2669     AS_HELP_STRING([--with-gdrive-client-id],
2670         [Provides the client id of the application for OAuth2 authentication
2671         on Google Drive. If either this or --with-gdrive-client-secret is
2672         empty, the feature will be disabled]),
2675 AC_ARG_WITH(gdrive-client-secret,
2676     AS_HELP_STRING([--with-gdrive-client-secret],
2677         [Provides the client secret of the application for OAuth2
2678         authentication on Google Drive. If either this or
2679         --with-gdrive-client-id is empty, the feature will be disabled]),
2682 AC_ARG_WITH(alfresco-cloud-client-id,
2683     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2684         [Provides the client id of the application for OAuth2 authentication
2685         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2686         empty, the feature will be disabled]),
2689 AC_ARG_WITH(alfresco-cloud-client-secret,
2690     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2691         [Provides the client secret of the application for OAuth2
2692         authentication on Alfresco Cloud. If either this or
2693         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2696 AC_ARG_WITH(onedrive-client-id,
2697     AS_HELP_STRING([--with-onedrive-client-id],
2698         [Provides the client id of the application for OAuth2 authentication
2699         on OneDrive. If either this or --with-onedrive-client-secret is
2700         empty, the feature will be disabled]),
2703 AC_ARG_WITH(onedrive-client-secret,
2704     AS_HELP_STRING([--with-onedrive-client-secret],
2705         [Provides the client secret of the application for OAuth2
2706         authentication on OneDrive. If either this or
2707         --with-onedrive-client-id is empty, the feature will be disabled]),
2709 dnl ===================================================================
2710 dnl Do we want to use pre-build binary tarball for recompile
2711 dnl ===================================================================
2713 if test "$enable_library_bin_tar" = "yes" ; then
2714     USE_LIBRARY_BIN_TAR=TRUE
2715 else
2716     USE_LIBRARY_BIN_TAR=
2718 AC_SUBST(USE_LIBRARY_BIN_TAR)
2720 dnl ===================================================================
2721 dnl Test whether build target is Release Build
2722 dnl ===================================================================
2723 AC_MSG_CHECKING([whether build target is Release Build])
2724 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2725     AC_MSG_RESULT([no])
2726     ENABLE_RELEASE_BUILD=
2727     GET_TASK_ALLOW_ENTITLEMENT='
2728         <!-- We want to be able to debug a hardened process when not building for release -->
2729         <key>com.apple.security.get-task-allow</key>
2730         <true/>'
2731 else
2732     AC_MSG_RESULT([yes])
2733     ENABLE_RELEASE_BUILD=TRUE
2734     GET_TASK_ALLOW_ENTITLEMENT=''
2736 AC_SUBST(ENABLE_RELEASE_BUILD)
2737 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2739 AC_MSG_CHECKING([whether to build a Community flavor])
2740 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2741     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2742     AC_MSG_RESULT([yes])
2743 else
2744     AC_MSG_RESULT([no])
2747 dnl ===================================================================
2748 dnl Test whether to sign Windows Build
2749 dnl ===================================================================
2750 AC_MSG_CHECKING([whether to sign windows build])
2751 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2752     AC_MSG_RESULT([yes])
2753     WINDOWS_BUILD_SIGNING="TRUE"
2754 else
2755     AC_MSG_RESULT([no])
2756     WINDOWS_BUILD_SIGNING="FALSE"
2758 AC_SUBST(WINDOWS_BUILD_SIGNING)
2760 dnl ===================================================================
2761 dnl MacOSX build and runtime environment options
2762 dnl ===================================================================
2764 AC_ARG_WITH(macosx-sdk,
2765     AS_HELP_STRING([--with-macosx-sdk=<version>],
2766         [Prefer a specific SDK for building.])
2767     [
2768                           If the requested SDK is not available, a search for the oldest one will be done.
2769                           With current Xcode versions, only the latest SDK is included, so this option is
2770                           not terribly useful. It works fine to build with a new SDK and run the result
2771                           on an older OS.
2773                           e. g.: --with-macosx-sdk=10.10
2775                           there are 3 options to control the MacOSX build:
2776                           --with-macosx-sdk (referred as 'sdk' below)
2777                           --with-macosx-version-min-required (referred as 'min' below)
2778                           --with-macosx-version-max-allowed (referred as 'max' below)
2780                           the connection between these value and the default they take is as follow:
2781                           ( ? means not specified on the command line, s means the SDK version found,
2782                           constraint: 8 <= x <= y <= z)
2784                           ==========================================
2785                            command line      || config result
2786                           ==========================================
2787                           min  | max  | sdk  || min   | max  | sdk  |
2788                           ?    | ?    | ?    || 10.10 | 10.s | 10.s |
2789                           ?    | ?    | 10.x || 10.10 | 10.x | 10.x |
2790                           ?    | 10.x | ?    || 10.10 | 10.s | 10.s |
2791                           ?    | 10.x | 10.y || 10.10 | 10.x | 10.y |
2792                           10.x | ?    | ?    || 10.x  | 10.s | 10.s |
2793                           10.x | ?    | 10.y || 10.x  | 10.y | 10.y |
2794                           10.x | 10.y | ?    || 10.x  | 10.y | 10.y |
2795                           10.x | 10.y | 10.z || 10.x  | 10.y | 10.z |
2798                           see: http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2799                           for a detailed technical explanation of these variables
2801                           Note: MACOSX_DEPLOYMENT_TARGET will be set to the value of 'min'.
2802     ],
2805 AC_ARG_WITH(macosx-version-min-required,
2806     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2807         [set the minimum OS version needed to run the built LibreOffice])
2808     [
2809                           e. g.: --with-macosx-version-min-required=10.10
2810                           see --with-macosx-sdk for more info
2811     ],
2814 AC_ARG_WITH(macosx-version-max-allowed,
2815     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2816         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2817     [
2818                           e. g.: --with-macosx-version-max-allowed=10.10
2819                           see --with-macosx-sdk for more info
2820     ],
2824 dnl ===================================================================
2825 dnl options for stuff used during cross-compilation build
2826 dnl Not quite superseded by --with-build-platform-configure-options.
2827 dnl TODO: check, if the "force" option is still needed anywhere.
2828 dnl ===================================================================
2830 AC_ARG_WITH(system-icu-for-build,
2831     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2832         [Use icu already on system for build tools (cross-compilation only).]))
2835 dnl ===================================================================
2836 dnl Check for incompatible options set by fuzzing, and reset those
2837 dnl automatically to working combinations
2838 dnl ===================================================================
2840 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2841         "$enable_dbus" != "$enable_avahi"; then
2842     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2843     enable_avahi=$enable_dbus
2846 add_lopath_after ()
2848     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2849         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2850     fi
2853 add_lopath_before ()
2855     local IFS=${P_SEP}
2856     local path_cleanup
2857     local dir
2858     for dir in $LO_PATH ; do
2859         if test "$dir" != "$1" ; then
2860             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2861         fi
2862     done
2863     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2866 dnl ===================================================================
2867 dnl check for required programs (grep, awk, sed, bash)
2868 dnl ===================================================================
2870 pathmunge ()
2872     local new_path
2873     if test -n "$1"; then
2874         if test "$build_os" = "cygwin"; then
2875             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2876                 PathFormat "$1"
2877                 new_path=`cygpath -sm "$formatted_path"`
2878             else
2879                 PathFormat "$1"
2880                 new_path=`cygpath -u "$formatted_path"`
2881             fi
2882         else
2883             new_path="$1"
2884         fi
2885         if test "$2" = "after"; then
2886             add_lopath_after "$new_path"
2887         else
2888             add_lopath_before "$new_path"
2889         fi
2890     fi
2893 AC_PROG_AWK
2894 AC_PATH_PROG( AWK, $AWK)
2895 if test -z "$AWK"; then
2896     AC_MSG_ERROR([install awk to run this script])
2899 AC_PATH_PROG(BASH, bash)
2900 if test -z "$BASH"; then
2901     AC_MSG_ERROR([bash not found in \$PATH])
2903 AC_SUBST(BASH)
2905 AC_MSG_CHECKING([for GNU or BSD tar])
2906 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2907     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2908     if test $? -eq 0;  then
2909         GNUTAR=$a
2910         break
2911     fi
2912 done
2913 AC_MSG_RESULT($GNUTAR)
2914 if test -z "$GNUTAR"; then
2915     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2917 AC_SUBST(GNUTAR)
2919 AC_MSG_CHECKING([for tar's option to strip components])
2920 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2921 if test $? -eq 0; then
2922     STRIP_COMPONENTS="--strip-components"
2923 else
2924     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2925     if test $? -eq 0; then
2926         STRIP_COMPONENTS="--strip-path"
2927     else
2928         STRIP_COMPONENTS="unsupported"
2929     fi
2931 AC_MSG_RESULT($STRIP_COMPONENTS)
2932 if test x$STRIP_COMPONENTS = xunsupported; then
2933     AC_MSG_ERROR([you need a tar that is able to strip components.])
2935 AC_SUBST(STRIP_COMPONENTS)
2937 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2938 dnl desktop OSes from "mobile" ones.
2940 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2941 dnl In other words, that when building for an OS that is not a
2942 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2944 dnl Note the direction of the implication; there is no assumption that
2945 dnl cross-compiling would imply a non-desktop OS.
2947 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2948     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2949     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2950     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2953 # Whether to build "avmedia" functionality or not.
2955 if test -z "$enable_avmedia"; then
2956     enable_avmedia=yes
2959 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2960 if test "$enable_avmedia" = yes; then
2961     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2962 else
2963     USE_AVMEDIA_DUMMY='TRUE'
2965 AC_SUBST(USE_AVMEDIA_DUMMY)
2967 # Decide whether to build database connectivity stuff (including Base) or not.
2968 if test "$enable_database_connectivity" != no; then
2969     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2970     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2971 else
2972     if test "$_os" = iOS; then
2973         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2974     fi
2975     disable_database_connectivity_dependencies
2978 if test -z "$enable_extensions"; then
2979     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2980     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2981         enable_extensions=yes
2982     fi
2985 if test "$enable_extensions" = yes; then
2986     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
2987     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
2988 else
2989     enable_extension_integration=no
2990     enable_extension_update=no
2993 if test -z "$enable_scripting"; then
2994     # Disable scripting for iOS unless specifically overridden
2995     # with --enable-scripting.
2996     if test $_os != iOS -o $_os = Emscripten; then
2997         enable_scripting=yes
2998     fi
3001 DISABLE_SCRIPTING=''
3002 if test "$enable_scripting" = yes; then
3003     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3004     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3005 else
3006     DISABLE_SCRIPTING='TRUE'
3007     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3010 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3011     # Disable dynamic_loading always for iOS and Android
3012     enable_dynamic_loading=no
3013 elif test -z "$enable_dynamic_loading"; then
3014     # Otherwise enable it unless specifically disabled
3015     enable_dynamic_loading=yes
3018 DISABLE_DYNLOADING=''
3019 if test "$enable_dynamic_loading" = yes; then
3020     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3021 else
3022     DISABLE_DYNLOADING='TRUE'
3024 AC_SUBST(DISABLE_DYNLOADING)
3026 # remember SYSBASE value
3027 AC_SUBST(SYSBASE)
3029 dnl ===================================================================
3030 dnl  Sort out various gallery compilation options
3031 dnl ===================================================================
3032 WITH_GALLERY_BUILD=TRUE
3033 AC_MSG_CHECKING([how to build and package galleries])
3034 if test -n "${with_galleries}"; then
3035     if test "$with_galleries" = "build"; then
3036         if test "$enable_database_connectivity" = no; then
3037             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3038         fi
3039         AC_MSG_RESULT([build from source images internally])
3040     elif test "$with_galleries" = "no"; then
3041         WITH_GALLERY_BUILD=
3042         AC_MSG_RESULT([disable non-internal gallery build])
3043     else
3044         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3045     fi
3046 else
3047     if test $_os != iOS -a $_os != Android; then
3048         AC_MSG_RESULT([internal src images for desktop])
3049     else
3050         WITH_GALLERY_BUILD=
3051         AC_MSG_RESULT([disable src image build])
3052     fi
3054 AC_SUBST(WITH_GALLERY_BUILD)
3056 dnl ===================================================================
3057 dnl  Checks if ccache is available
3058 dnl ===================================================================
3059 CCACHE_DEPEND_MODE=
3060 if test "$enable_ccache" = "no"; then
3061     CCACHE=""
3062 elif test "$_os" = "WINNT"; then
3063     # on windows/VC build do not use ccache - but perhaps sccache is around?
3064     case "%$CC%$CXX%" in
3065     # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3066     # assume that's good then
3067     *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3068         AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3069         CCACHE_DEPEND_MODE=1
3070         ;;
3071     *)
3072         # for sharing code below, reuse CCACHE env var
3073         AC_PATH_PROG([CCACHE],[sccache],[not found])
3074         if test "$CCACHE" = "not found"; then
3075             CCACHE=""
3076         else
3077             CCACHE=`win_short_path_for_make "$CCACHE"`
3078             CCACHE_DEPEND_MODE=1
3079         fi
3080         ;;
3081     esac
3082 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3083     case "%$CC%$CXX%" in
3084     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3085     # assume that's good then
3086     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3087         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3088         CCACHE_DEPEND_MODE=1
3089         ;;
3090     *)
3091         AC_PATH_PROG([CCACHE],[ccache],[not found])
3092         if test "$CCACHE" = "not found"; then
3093             CCACHE=""
3094         else
3095             CCACHE_DEPEND_MODE=1
3096             # Need to check for ccache version: otherwise prevents
3097             # caching of the results (like "-x objective-c++" for Mac)
3098             if test $_os = Darwin -o $_os = iOS; then
3099                 # Check ccache version
3100                 AC_MSG_CHECKING([whether version of ccache is suitable])
3101                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3102                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3103                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3104                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3105                 else
3106                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3107                     CCACHE=""
3108                     CCACHE_DEPEND_MODE=
3109                 fi
3110             fi
3111         fi
3112         ;;
3113     esac
3114 else
3115     CCACHE=""
3117 if test "$enable_ccache" = "nodepend"; then
3118     CCACHE_DEPEND_MODE=""
3120 AC_SUBST(CCACHE_DEPEND_MODE)
3122 # skip on windows - sccache defaults are good enough
3123 if test "$CCACHE" != "" -a "$_os" != "WINNT"; then
3124     ccache_size_msg=$([ccache -s | tail -n 1 | sed 's/^[^0-9]*//' | sed -e 's/\.[0-9]*//'])
3125     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3126     if test "$ccache_size" = ""; then
3127         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3128         if test "$ccache_size" = ""; then
3129             ccache_size=0
3130         fi
3131         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3132         if test $ccache_size -lt 1024; then
3133             CCACHE=""
3134             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3135             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3136         else
3137             # warn that ccache may be too small for debug build
3138             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3139             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3140         fi
3141     else
3142         if test $ccache_size -lt 5; then
3143             #warn that ccache may be too small for debug build
3144             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3145             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3146         fi
3147     fi
3150 dnl ===================================================================
3151 dnl  Checks for C compiler,
3152 dnl  The check for the C++ compiler is later on.
3153 dnl ===================================================================
3154 if test "$_os" != "WINNT"; then
3155     GCC_HOME_SET="true"
3156     AC_MSG_CHECKING([gcc home])
3157     if test -z "$with_gcc_home"; then
3158         if test "$enable_icecream" = "yes"; then
3159             if test -d "/usr/lib/icecc/bin"; then
3160                 GCC_HOME="/usr/lib/icecc/"
3161             elif test -d "/usr/libexec/icecc/bin"; then
3162                 GCC_HOME="/usr/libexec/icecc/"
3163             elif test -d "/opt/icecream/bin"; then
3164                 GCC_HOME="/opt/icecream/"
3165             else
3166                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3168             fi
3169         else
3170             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3171             GCC_HOME_SET="false"
3172         fi
3173     else
3174         GCC_HOME="$with_gcc_home"
3175     fi
3176     AC_MSG_RESULT($GCC_HOME)
3177     AC_SUBST(GCC_HOME)
3179     if test "$GCC_HOME_SET" = "true"; then
3180         if test -z "$CC"; then
3181             CC="$GCC_HOME/bin/gcc"
3182             CC_BASE="gcc"
3183         fi
3184         if test -z "$CXX"; then
3185             CXX="$GCC_HOME/bin/g++"
3186             CXX_BASE="g++"
3187         fi
3188     fi
3191 COMPATH=`dirname "$CC"`
3192 if test "$COMPATH" = "."; then
3193     AC_PATH_PROGS(COMPATH, $CC)
3194     dnl double square bracket to get single because of M4 quote...
3195     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3197 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3199 dnl ===================================================================
3200 dnl Java support
3201 dnl ===================================================================
3202 AC_MSG_CHECKING([whether to build with Java support])
3203 if test "$with_java" != "no"; then
3204     if test "$DISABLE_SCRIPTING" = TRUE; then
3205         AC_MSG_RESULT([no, overridden by --disable-scripting])
3206         ENABLE_JAVA=""
3207         with_java=no
3208     else
3209         AC_MSG_RESULT([yes])
3210         ENABLE_JAVA="TRUE"
3211         AC_DEFINE(HAVE_FEATURE_JAVA)
3212     fi
3213 else
3214     AC_MSG_RESULT([no])
3215     ENABLE_JAVA=""
3218 AC_SUBST(ENABLE_JAVA)
3220 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3222 dnl ENABLE_JAVA="" indicate no Java support at all
3224 dnl ===================================================================
3225 dnl Check macOS SDK and compiler
3226 dnl ===================================================================
3228 if test $_os = Darwin; then
3230     # If no --with-macosx-sdk option is given, look for one
3232     # The intent is that for "most" Mac-based developers, a suitable
3233     # SDK will be found automatically without any configure options.
3235     # For developers with a current Xcode, the lowest-numbered SDK
3236     # higher than or equal to the minimum required should be found.
3238     AC_MSG_CHECKING([what macOS SDK to use])
3239     for _macosx_sdk in ${with_macosx_sdk-11.3 11.1 11.0 10.15 10.14 10.13}; do
3240         MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null`
3241         if test -d "$MACOSX_SDK_PATH"; then
3242             with_macosx_sdk="${_macosx_sdk}"
3243             break
3244         else
3245             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${_macosx_sdk}.sdk"
3246             if test -d "$MACOSX_SDK_PATH"; then
3247                 with_macosx_sdk="${_macosx_sdk}"
3248                 break
3249             fi
3250         fi
3251     done
3252     if test ! -d "$MACOSX_SDK_PATH"; then
3253         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3254     fi
3256     AC_MSG_RESULT([SDK $with_macosx_sdk at $MACOSX_SDK_PATH])
3258     case $with_macosx_sdk in
3259     10.13)
3260         MACOSX_SDK_VERSION=101300
3261         ;;
3262     10.14)
3263         MACOSX_SDK_VERSION=101400
3264         ;;
3265     10.15)
3266         MACOSX_SDK_VERSION=101500
3267         ;;
3268     11.0)
3269         MACOSX_SDK_VERSION=110000
3270         ;;
3271     11.1)
3272         MACOSX_SDK_VERSION=110100
3273         ;;
3274     11.3)
3275         MACOSX_SDK_VERSION=110300
3276         ;;
3277     *)
3278         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.13--11.3])
3279         ;;
3280     esac
3282     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3283         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value for Apple Silicon])
3284     fi
3286     if test "$with_macosx_version_min_required" = "" ; then
3287         if test "$host_cpu" = x86_64; then
3288             with_macosx_version_min_required="10.10";
3289         else
3290             with_macosx_version_min_required="11.0";
3291         fi
3292     fi
3294     if test "$with_macosx_version_max_allowed" = "" ; then
3295         with_macosx_version_max_allowed="$with_macosx_sdk"
3296     fi
3298     # export this so that "xcrun" invocations later return matching values
3299     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3300     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3301     export DEVELOPER_DIR
3302     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3303     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3305     AC_MSG_CHECKING([whether Xcode is new enough])
3306     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3307     my_xcode_ver2=${my_xcode_ver1#Xcode }
3308     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3309     if test "$my_xcode_ver3" -ge 1103; then
3310         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3311     else
3312         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3313     fi
3315     case "$with_macosx_version_min_required" in
3316     10.10)
3317         MAC_OS_X_VERSION_MIN_REQUIRED="101000"
3318         ;;
3319     10.11)
3320         MAC_OS_X_VERSION_MIN_REQUIRED="101100"
3321         ;;
3322     10.12)
3323         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3324         ;;
3325     10.13)
3326         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3327         ;;
3328     10.14)
3329         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3330         ;;
3331     10.15)
3332         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3333         ;;
3334     10.16)
3335         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3336         ;;
3337     11.0)
3338         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3339         ;;
3340     11.1)
3341         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3342         ;;
3343     11.3)
3344         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3345         ;;
3346     *)
3347         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])
3348         ;;
3349     esac
3351     LIBTOOL=/usr/bin/libtool
3352     INSTALL_NAME_TOOL=install_name_tool
3353     if test -z "$save_CC"; then
3354         stdlib=-stdlib=libc++
3356         AC_MSG_CHECKING([what C compiler to use])
3357         CC="`xcrun -find clang`"
3358         CC_BASE=`first_arg_basename "$CC"`
3359         if test "$host_cpu" = x86_64; then
3360             CC+=" -target x86_64-apple-macos"
3361         else
3362             CC+=" -target arm64-apple-macos"
3363         fi
3364         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3365         AC_MSG_RESULT([$CC])
3367         AC_MSG_CHECKING([what C++ compiler to use])
3368         CXX="`xcrun -find clang++`"
3369         CXX_BASE=`first_arg_basename "$CXX"`
3370         if test "$host_cpu" = x86_64; then
3371             CXX+=" -target x86_64-apple-macos"
3372         else
3373             CXX+=" -target arm64-apple-macos"
3374         fi
3375         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3376         AC_MSG_RESULT([$CXX])
3378         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3379         AR=`xcrun -find ar`
3380         NM=`xcrun -find nm`
3381         STRIP=`xcrun -find strip`
3382         LIBTOOL=`xcrun -find libtool`
3383         RANLIB=`xcrun -find ranlib`
3384     fi
3386     case "$with_macosx_version_max_allowed" in
3387     10.10)
3388         MAC_OS_X_VERSION_MAX_ALLOWED="101000"
3389         ;;
3390     10.11)
3391         MAC_OS_X_VERSION_MAX_ALLOWED="101100"
3392         ;;
3393     10.12)
3394         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3395         ;;
3396     10.13)
3397         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3398         ;;
3399     10.14)
3400         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3401         ;;
3402     10.15)
3403         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3404         ;;
3405     11.0)
3406         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3407         ;;
3408     11.1)
3409         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3410         ;;
3411     11.3)
3412         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3413         ;;
3414     *)
3415         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])
3416         ;;
3417     esac
3419     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3420     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3421         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])
3422     else
3423         AC_MSG_RESULT([ok])
3424     fi
3426     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3427     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3428         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3429     else
3430         AC_MSG_RESULT([ok])
3431     fi
3432     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3433     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3435     AC_MSG_CHECKING([whether to do code signing])
3437     if test "$enable_macosx_code_signing" = yes; then
3438         # By default use the first suitable certificate (?).
3440         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3441         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3442         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3443         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3444         # "Developer ID Application" one.
3446         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3447         if test -n "$identity"; then
3448             MACOSX_CODESIGNING_IDENTITY=$identity
3449             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3450             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3451         else
3452             AC_MSG_ERROR([cannot determine identity to use])
3453         fi
3454     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3455         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3456         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3457         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3458     else
3459         AC_MSG_RESULT([no])
3460     fi
3462     AC_MSG_CHECKING([whether to create a Mac App Store package])
3464     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3465         AC_MSG_RESULT([no])
3466     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3467         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3468     elif test "$enable_macosx_package_signing" = yes; then
3469         # By default use the first suitable certificate.
3470         # It should be a "3rd Party Mac Developer Installer" one
3472         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3473         if test -n "$identity"; then
3474             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3475             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3476             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3477         else
3478             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3479         fi
3480     else
3481         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3482         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3483         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3484     fi
3486     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3487         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3488     fi
3490     AC_MSG_CHECKING([whether to sandbox the application])
3492     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3493         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3494     elif test "$enable_macosx_sandbox" = yes; then
3495         ENABLE_MACOSX_SANDBOX=TRUE
3496         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3497         AC_MSG_RESULT([yes])
3498     else
3499         AC_MSG_RESULT([no])
3500     fi
3502     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3503     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3504     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3506 AC_SUBST(MACOSX_SDK_PATH)
3507 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3508 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3509 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3510 AC_SUBST(INSTALL_NAME_TOOL)
3511 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3512 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3513 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3514 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3515 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3517 dnl ===================================================================
3518 dnl Check iOS SDK and compiler
3519 dnl ===================================================================
3521 if test $_os = iOS; then
3522     AC_MSG_CHECKING([what iOS SDK to use])
3523     current_sdk_ver=14.5
3524     older_sdk_vers="14.4 14.3 14.2 14.1 14.0 13.7"
3525     if test "$enable_ios_simulator" = "yes"; then
3526         platform=iPhoneSimulator
3527         versionmin=-mios-simulator-version-min=12.2
3528     else
3529         platform=iPhoneOS
3530         versionmin=-miphoneos-version-min=12.2
3531     fi
3532     xcode_developer=`xcode-select -print-path`
3534     for sdkver in $current_sdk_ver $older_sdk_vers; do
3535         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3536         if test -d $t; then
3537             sysroot=$t
3538             break
3539         fi
3540     done
3542     if test -z "$sysroot"; then
3543         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3544     fi
3546     AC_MSG_RESULT($sysroot)
3548     stdlib="-stdlib=libc++"
3550     AC_MSG_CHECKING([what C compiler to use])
3551     CC="`xcrun -find clang`"
3552     CC_BASE=`first_arg_basename "$CC"`
3553     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3554     AC_MSG_RESULT([$CC])
3556     AC_MSG_CHECKING([what C++ compiler to use])
3557     CXX="`xcrun -find clang++`"
3558     CXX_BASE=`first_arg_basename "$CXX"`
3559     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3560     AC_MSG_RESULT([$CXX])
3562     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3563     AR=`xcrun -find ar`
3564     NM=`xcrun -find nm`
3565     STRIP=`xcrun -find strip`
3566     LIBTOOL=`xcrun -find libtool`
3567     RANLIB=`xcrun -find ranlib`
3570 AC_MSG_CHECKING([whether to treat the installation as read-only])
3572 if test $_os = Darwin; then
3573     enable_readonly_installset=yes
3574 elif test "$enable_extensions" != yes; then
3575     enable_readonly_installset=yes
3577 if test "$enable_readonly_installset" = yes; then
3578     AC_MSG_RESULT([yes])
3579     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3580 else
3581     AC_MSG_RESULT([no])
3584 dnl ===================================================================
3585 dnl Structure of install set
3586 dnl ===================================================================
3588 if test $_os = Darwin; then
3589     LIBO_BIN_FOLDER=MacOS
3590     LIBO_ETC_FOLDER=Resources
3591     LIBO_LIBEXEC_FOLDER=MacOS
3592     LIBO_LIB_FOLDER=Frameworks
3593     LIBO_LIB_PYUNO_FOLDER=Resources
3594     LIBO_SHARE_FOLDER=Resources
3595     LIBO_SHARE_HELP_FOLDER=Resources/help
3596     LIBO_SHARE_JAVA_FOLDER=Resources/java
3597     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3598     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3599     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3600     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3601     LIBO_URE_BIN_FOLDER=MacOS
3602     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3603     LIBO_URE_LIB_FOLDER=Frameworks
3604     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3605     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3606 elif test $_os = WINNT; then
3607     LIBO_BIN_FOLDER=program
3608     LIBO_ETC_FOLDER=program
3609     LIBO_LIBEXEC_FOLDER=program
3610     LIBO_LIB_FOLDER=program
3611     LIBO_LIB_PYUNO_FOLDER=program
3612     LIBO_SHARE_FOLDER=share
3613     LIBO_SHARE_HELP_FOLDER=help
3614     LIBO_SHARE_JAVA_FOLDER=program/classes
3615     LIBO_SHARE_PRESETS_FOLDER=presets
3616     LIBO_SHARE_READMES_FOLDER=readmes
3617     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3618     LIBO_SHARE_SHELL_FOLDER=program/shell
3619     LIBO_URE_BIN_FOLDER=program
3620     LIBO_URE_ETC_FOLDER=program
3621     LIBO_URE_LIB_FOLDER=program
3622     LIBO_URE_MISC_FOLDER=program
3623     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3624 else
3625     LIBO_BIN_FOLDER=program
3626     LIBO_ETC_FOLDER=program
3627     LIBO_LIBEXEC_FOLDER=program
3628     LIBO_LIB_FOLDER=program
3629     LIBO_LIB_PYUNO_FOLDER=program
3630     LIBO_SHARE_FOLDER=share
3631     LIBO_SHARE_HELP_FOLDER=help
3632     LIBO_SHARE_JAVA_FOLDER=program/classes
3633     LIBO_SHARE_PRESETS_FOLDER=presets
3634     LIBO_SHARE_READMES_FOLDER=readmes
3635     if test "$enable_fuzzers" != yes; then
3636         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3637     else
3638         LIBO_SHARE_RESOURCE_FOLDER=resource
3639     fi
3640     LIBO_SHARE_SHELL_FOLDER=program/shell
3641     LIBO_URE_BIN_FOLDER=program
3642     LIBO_URE_ETC_FOLDER=program
3643     LIBO_URE_LIB_FOLDER=program
3644     LIBO_URE_MISC_FOLDER=program
3645     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3647 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3648 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3649 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3650 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3651 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3652 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3653 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3654 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3655 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3656 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3657 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3658 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3659 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3660 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3661 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3662 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3664 # Not all of them needed in config_host.mk, add more if need arises
3665 AC_SUBST(LIBO_BIN_FOLDER)
3666 AC_SUBST(LIBO_ETC_FOLDER)
3667 AC_SUBST(LIBO_LIB_FOLDER)
3668 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3669 AC_SUBST(LIBO_SHARE_FOLDER)
3670 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3671 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3672 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3673 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3674 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3675 AC_SUBST(LIBO_URE_BIN_FOLDER)
3676 AC_SUBST(LIBO_URE_ETC_FOLDER)
3677 AC_SUBST(LIBO_URE_LIB_FOLDER)
3678 AC_SUBST(LIBO_URE_MISC_FOLDER)
3679 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3681 dnl ===================================================================
3682 dnl Windows specific tests and stuff
3683 dnl ===================================================================
3685 reg_get_value()
3687     # Return value: $regvalue
3688     unset regvalue
3690     if test "$build_os" = "wsl"; then
3691         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3692         return
3693     fi
3695     local _regentry="/proc/registry${1}/${2}"
3696     if test -f "$_regentry"; then
3697         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3698         # Registry keys read via /proc/registry* are always \0 terminated!
3699         local _regvalue=$(tr -d '\0' < "$_regentry")
3700         if test $? -eq 0; then
3701             regvalue=$_regvalue
3702         fi
3703     fi
3706 # Get a value from the 32-bit side of the Registry
3707 reg_get_value_32()
3709     reg_get_value "32" "$1"
3712 # Get a value from the 64-bit side of the Registry
3713 reg_get_value_64()
3715     reg_get_value "64" "$1"
3718 case "$host_os" in
3719 cygwin*|wsl*)
3720     COM=MSC
3721     OS=WNT
3722     RTL_OS=Windows
3723     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3724         P_SEP=";"
3725     else
3726         P_SEP=:
3727     fi
3728     case "$host_cpu" in
3729     x86_64)
3730         CPUNAME=X86_64
3731         RTL_ARCH=X86_64
3732         PLATFORMID=windows_x86_64
3733         WINDOWS_X64=1
3734         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3735         WIN_HOST_ARCH="x64"
3736         WIN_MULTI_ARCH="x86"
3737         WIN_HOST_BITS=64
3738         ;;
3739     i*86)
3740         CPUNAME=INTEL
3741         RTL_ARCH=x86
3742         PLATFORMID=windows_x86
3743         WIN_HOST_ARCH="x86"
3744         WIN_HOST_BITS=32
3745         WIN_OTHER_ARCH="x64"
3746         ;;
3747     aarch64)
3748         CPUNAME=AARCH64
3749         RTL_ARCH=AARCH64
3750         PLATFORMID=windows_aarch64
3751         WINDOWS_X64=1
3752         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3753         WIN_HOST_ARCH="arm64"
3754         WIN_HOST_BITS=64
3755         with_ucrt_dir=no
3756         ;;
3757     *)
3758         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3759         ;;
3760     esac
3762     case "$build_cpu" in
3763     x86_64) WIN_BUILD_ARCH="x64" ;;
3764     i*86) WIN_BUILD_ARCH="x86" ;;
3765     aarch64) WIN_BUILD_ARCH="arm64" ;;
3766     *)
3767         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3768         ;;
3769     esac
3771     SCPDEFS="$SCPDEFS -D_MSC_VER"
3772     ;;
3773 esac
3775 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3776 # other-arch won't, but wouldn't break the build (x64 on x86).
3777 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3778     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3782 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3783     # To allow building Windows multi-arch releases without cross-tooling
3784     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3785         cross_compiling="yes"
3786     fi
3789 ENABLE_WASM_STRIP=''
3790 if test "$cross_compiling" = "yes"; then
3791     export CROSS_COMPILING=TRUE
3792     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3793         ENABLE_WASM_STRIP=TRUE
3794     fi
3795 else
3796     CROSS_COMPILING=
3797     BUILD_TYPE="$BUILD_TYPE NATIVE"
3799 AC_SUBST(CROSS_COMPILING)
3800 AC_SUBST(ENABLE_WASM_STRIP)
3802 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3803 # NOTE: must _not_ be used for bundled external libraries!
3804 ISYSTEM=
3805 if test "$GCC" = "yes"; then
3806     AC_MSG_CHECKING( for -isystem )
3807     save_CFLAGS=$CFLAGS
3808     CFLAGS="$CFLAGS -Werror"
3809     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3810     CFLAGS=$save_CFLAGS
3811     if test -n "$ISYSTEM"; then
3812         AC_MSG_RESULT(yes)
3813     else
3814         AC_MSG_RESULT(no)
3815     fi
3817 if test -z "$ISYSTEM"; then
3818     # fall back to using -I
3819     ISYSTEM=-I
3821 AC_SUBST(ISYSTEM)
3823 dnl ===================================================================
3824 dnl  Check which Visual Studio compiler is used
3825 dnl ===================================================================
3827 map_vs_year_to_version()
3829     # Return value: $vsversion
3831     unset vsversion
3833     case $1 in
3834     2019)
3835         vsversion=16;;
3836     *)
3837         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3838     esac
3841 vs_versions_to_check()
3843     # Args: $1 (optional) : versions to check, in the order of preference
3844     # Return value: $vsversions
3846     unset vsversions
3848     if test -n "$1"; then
3849         map_vs_year_to_version "$1"
3850         vsversions=$vsversion
3851     else
3852         # We accept only 2019
3853         vsversions="16"
3854     fi
3857 win_get_env_from_vsvars32bat()
3859     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3860     # Also seems to be located in another directory under the same name: vsvars32.bat
3861     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3862     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3863     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3864     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3865     local result
3866     if test "$build_os" = "wsl"; then
3867         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3868     else
3869         chmod +x $WRAPPERBATCHFILEPATH
3870         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3871     fi
3872     rm -f $WRAPPERBATCHFILEPATH
3873     printf '%s' "$result"
3876 find_ucrt()
3878     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3879     if test -n "$regvalue"; then
3880         PathFormat "$regvalue"
3881         UCRTSDKDIR=$formatted_path_unix
3882         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3883         UCRTVERSION=$regvalue
3884         # Rest if not exist
3885         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3886           UCRTSDKDIR=
3887         fi
3888     fi
3889     if test -z "$UCRTSDKDIR"; then
3890         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3891         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3892         if test -f "$ide_env_file"; then
3893             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3894             UCRTSDKDIR=$formatted_path
3895             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3896             dnl Hack needed at least by tml:
3897             if test "$UCRTVERSION" = 10.0.15063.0 \
3898                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3899                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3900             then
3901                 UCRTVERSION=10.0.14393.0
3902             fi
3903         else
3904           AC_MSG_ERROR([No UCRT found])
3905         fi
3906     fi
3909 find_msvc()
3911     # Find Visual C++ 2019
3912     # Args: $1 (optional) : The VS version year
3913     # Return values: $vctest, $vcyear, $vcnum, $vcnumwithdot, $vcbuildnumber
3915     unset vctest vcnum vcnumwithdot vcbuildnumber
3917     vs_versions_to_check "$1"
3918     if test "$build_os" = wsl; then
3919         vswhere="$PROGRAMFILESX86"
3920     else
3921         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3922     fi
3923     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3924     PathFormat "$vswhere"
3925     vswhere=$formatted_path_unix
3926     for ver in $vsversions; do
3927         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3928         # Fall back to all MS products (this includes VC++ Build Tools)
3929         if ! test -n "$vswhereoutput"; then
3930             AC_MSG_CHECKING([VC++ Build Tools and similar])
3931             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3932         fi
3933         if test -n "$vswhereoutput"; then
3934             PathFormat "$vswhereoutput"
3935             vctest=$formatted_path_unix
3936             break
3937         fi
3938     done
3940     if test -n "$vctest"; then
3941         vcnumwithdot="$ver.0"
3942         case "$vcnumwithdot" in
3943         16.0)
3944             vcyear=2019
3945             vcnum=160
3946             ;;
3947         esac
3948         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3950     fi
3953 test_cl_exe()
3955     AC_MSG_CHECKING([$1 compiler])
3957     CL_EXE_PATH="$2/cl.exe"
3959     if test ! -f "$CL_EXE_PATH"; then
3960         if test "$1" = "multi-arch"; then
3961             AC_MSG_WARN([no compiler (cl.exe) in $2])
3962             return 1
3963         else
3964             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3965         fi
3966     fi
3968     dnl ===========================================================
3969     dnl  Check for the corresponding mspdb*.dll
3970     dnl ===========================================================
3972     # MSVC 15.0 has libraries from 14.0?
3973     mspdbnum="140"
3975     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
3976         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
3977     fi
3979     # The compiles has to find its shared libraries
3980     OLD_PATH="$PATH"
3981     TEMP_PATH=`cygpath -d "$2"`
3982     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
3984     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
3985         AC_MSG_ERROR([no compiler (cl.exe) in $2])
3986     fi
3988     PATH="$OLD_PATH"
3990     AC_MSG_RESULT([$CL_EXE_PATH])
3993 SOLARINC=
3994 MSBUILD_PATH=
3995 DEVENV=
3996 if test "$_os" = "WINNT"; then
3997     AC_MSG_CHECKING([Visual C++])
3998     find_msvc "$with_visual_studio"
3999     if test -z "$vctest"; then
4000         if test -n "$with_visual_studio"; then
4001             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4002         else
4003             AC_MSG_ERROR([no Visual Studio 2019 installation found])
4004         fi
4005     fi
4006     AC_MSG_RESULT([])
4008     VC_PRODUCT_DIR="$vctest/VC"
4009     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4011     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4012     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4013         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4014         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4015         if test $? -ne 0; then
4016             WIN_MULTI_ARCH=""
4017             WIN_OTHER_ARCH=""
4018         fi
4019     fi
4021     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4022         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4023         test_cl_exe "build" "$MSVC_BUILD_PATH"
4024     fi
4026     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4027         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4028         test_cl_exe "host" "$MSVC_HOST_PATH"
4029     else
4030         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4031     fi
4033     AC_MSG_CHECKING([for short pathname of VC product directory])
4034     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4035     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4037     UCRTSDKDIR=
4038     UCRTVERSION=
4040     AC_MSG_CHECKING([for UCRT location])
4041     find_ucrt
4042     # find_ucrt errors out if it doesn't find it
4043     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4044     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4045     ucrtincpath_formatted=$formatted_path
4046     # SOLARINC is used for external modules and must be set too.
4047     # And no, it's not sufficient to set SOLARINC only, as configure
4048     # itself doesn't honour it.
4049     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4050     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4051     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4052     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4054     AC_SUBST(UCRTSDKDIR)
4055     AC_SUBST(UCRTVERSION)
4057     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4058     # Find the proper version of MSBuild.exe to use based on the VS version
4059     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4060     if test -n "$regvalue" ; then
4061         AC_MSG_RESULT([found: $regvalue])
4062         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4063     else
4064         if test "$vcnumwithdot" = "16.0"; then
4065             if test "$WIN_BUILD_ARCH" != "x64"; then
4066                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4067             else
4068                 regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4069             fi
4070         else
4071             if test "$WIN_BUILD_ARCH" != "x64"; then
4072                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin"
4073             else
4074                 regvalue="$VC_PRODUCT_DIR/../MSBuild/$vcnumwithdot/Bin/amd64"
4075             fi
4076         fi
4077         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4078         AC_MSG_RESULT([$regvalue])
4079     fi
4081     # Find the version of devenv.exe
4082     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4083     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4084     DEVENV_unix=$(cygpath -u "$DEVENV")
4085     if test ! -e "$DEVENV_unix"; then
4086         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4087     fi
4089     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4090     dnl needed when building CLR code:
4091     if test -z "$MSVC_CXX"; then
4092         # This gives us a posix path with 8.3 filename restrictions
4093         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4094     fi
4096     if test -z "$CC"; then
4097         CC=$MSVC_CXX
4098         CC_BASE=`first_arg_basename "$CC"`
4099     fi
4100     if test -z "$CXX"; then
4101         CXX=$MSVC_CXX
4102         CXX_BASE=`first_arg_basename "$CXX"`
4103     fi
4105     if test -n "$CC"; then
4106         # Remove /cl.exe from CC case insensitive
4107         AC_MSG_NOTICE([found Visual C++ $vcyear])
4109         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4110         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4112         PathFormat "$COMPATH"
4113         COMPATH=`win_short_path_for_make "$formatted_path"`
4115         VCVER=$vcnum
4117         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4118         # are always "better", we list them in reverse chronological order.
4120         case "$vcnum" in
4121         160)
4122             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4123             ;;
4124         esac
4126         # The expectation is that --with-windows-sdk should not need to be used
4127         if test -n "$with_windows_sdk"; then
4128             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4129             *" "$with_windows_sdk" "*)
4130                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4131                 ;;
4132             *)
4133                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4134                 ;;
4135             esac
4136         fi
4138         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4139         ac_objext=obj
4140         ac_exeext=exe
4142     else
4143         AC_MSG_ERROR([Visual C++ not found after all, huh])
4144     fi
4146     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4147     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4148         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4149         // between Visual Studio versions and _MSC_VER:
4150         #if _MSC_VER < 1925
4151         #error
4152         #endif
4153     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4155     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4156     # version of the Explorer extension (and maybe other small
4157     # bits, too) needed when installing a 32-bit LibreOffice on a
4158     # 64-bit OS. The 64-bit Explorer extension is a feature that
4159     # has been present since long in OOo. Don't confuse it with
4160     # building LibreOffice itself as 64-bit code.
4162     BUILD_X64=
4163     CXX_X64_BINARY=
4165     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4166         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4167         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4168              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4169         then
4170             BUILD_X64=TRUE
4171             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4172             AC_MSG_RESULT([found])
4173         else
4174             AC_MSG_RESULT([not found])
4175             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4176         fi
4177     elif test "$WIN_HOST_ARCH" = "x64"; then
4178         CXX_X64_BINARY=$CXX
4179     fi
4180     AC_SUBST(BUILD_X64)
4182     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4183     AC_SUBST(CXX_X64_BINARY)
4185     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4186     # needed to support TWAIN scan on both 32- and 64-bit systems
4188     case "$WIN_HOST_ARCH" in
4189     x64)
4190         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4191         if test -n "$CXX_X86_BINARY"; then
4192             BUILD_X86=TRUE
4193             AC_MSG_RESULT([preset])
4194         elif test -n "$WIN_MULTI_ARCH"; then
4195             BUILD_X86=TRUE
4196             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4197             CXX_X86_BINARY+=" /arch:SSE"
4198             AC_MSG_RESULT([found])
4199         else
4200             AC_MSG_RESULT([not found])
4201             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4202         fi
4203         ;;
4204     x86)
4205         BUILD_X86=TRUE
4206         CXX_X86_BINARY=$MSVC_CXX
4207         ;;
4208     esac
4209     AC_SUBST(BUILD_X86)
4210     AC_SUBST(CXX_X86_BINARY)
4212 AC_SUBST(VCVER)
4213 AC_SUBST(DEVENV)
4214 AC_SUBST(MSVC_CXX)
4216 COM_IS_CLANG=
4217 AC_MSG_CHECKING([whether the compiler is actually Clang])
4218 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4219     #ifndef __clang__
4220     you lose
4221     #endif
4222     int foo=42;
4223     ]])],
4224     [AC_MSG_RESULT([yes])
4225      COM_IS_CLANG=TRUE],
4226     [AC_MSG_RESULT([no])])
4227 AC_SUBST(COM_IS_CLANG)
4229 CC_PLAIN=$CC
4230 CLANGVER=
4231 if test "$COM_IS_CLANG" = TRUE; then
4232     AC_MSG_CHECKING([whether Clang is new enough])
4233     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4234         #if !defined __apple_build_version__
4235         #error
4236         #endif
4237         ]])],
4238         [my_apple_clang=yes],[my_apple_clang=])
4239     if test "$my_apple_clang" = yes; then
4240         AC_MSG_RESULT([assumed yes (Apple Clang)])
4241     elif test "$_os" = Emscripten; then
4242         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4243     else
4244         if test "$_os" = WINNT; then
4245             dnl In which case, assume clang-cl:
4246             my_args="/EP /TC"
4247             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4248             dnl clang-cl:
4249             CC_PLAIN=
4250             for i in $CC; do
4251                 case $i in
4252                 -FIIntrin.h)
4253                     ;;
4254                 *)
4255                     CC_PLAIN="$CC_PLAIN $i"
4256                     ;;
4257                 esac
4258             done
4259         else
4260             my_args="-E -P"
4261         fi
4262         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4263         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4264         CLANGVER=`echo $clang_version \
4265             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4266         if test "$CLANGVER" -ge 50002; then
4267             AC_MSG_RESULT([yes ($clang_version)])
4268         else
4269             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4270         fi
4271         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4272         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4273     fi
4276 SHOWINCLUDES_PREFIX=
4277 if test "$_os" = WINNT; then
4278     dnl We need to guess the prefix of the -showIncludes output, it can be
4279     dnl localized
4280     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4281     echo "#include <stdlib.h>" > conftest.c
4282     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4283         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4284     rm -f conftest.c conftest.obj
4285     if test -z "$SHOWINCLUDES_PREFIX"; then
4286         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4287     else
4288         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4289     fi
4291 AC_SUBST(SHOWINCLUDES_PREFIX)
4294 # prefix C with ccache if needed
4296 UNCACHED_CC="$CC"
4297 if test "$CCACHE" != ""; then
4298     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4300     AC_LANG_PUSH([C])
4301     save_CFLAGS=$CFLAGS
4302     CFLAGS="$CFLAGS --ccache-skip -O2"
4303     dnl an empty program will do, we're checking the compiler flags
4304     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4305                       [use_ccache=yes], [use_ccache=no])
4306     CFLAGS=$save_CFLAGS
4307     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4308         AC_MSG_RESULT([yes])
4309     else
4310         CC="$CCACHE $CC"
4311         CC_BASE="ccache $CC_BASE"
4312         AC_MSG_RESULT([no])
4313     fi
4314     AC_LANG_POP([C])
4317 # ===================================================================
4318 # check various GCC options that Clang does not support now but maybe
4319 # will somewhen in the future, check them even for GCC, so that the
4320 # flags are set
4321 # ===================================================================
4323 HAVE_GCC_GGDB2=
4324 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4325     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4326     save_CFLAGS=$CFLAGS
4327     CFLAGS="$CFLAGS -Werror -ggdb2"
4328     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4329     CFLAGS=$save_CFLAGS
4330     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4331         AC_MSG_RESULT([yes])
4332     else
4333         AC_MSG_RESULT([no])
4334     fi
4336     if test "$host_cpu" = "m68k"; then
4337         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4338         save_CFLAGS=$CFLAGS
4339         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4340         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4341         CFLAGS=$save_CFLAGS
4342         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4343             AC_MSG_RESULT([yes])
4344         else
4345             AC_MSG_ERROR([no])
4346         fi
4347     fi
4349 AC_SUBST(HAVE_GCC_GGDB2)
4351 dnl ===================================================================
4352 dnl  Test the gcc version
4353 dnl ===================================================================
4354 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4355     AC_MSG_CHECKING([the GCC version])
4356     _gcc_version=`$CC -dumpversion`
4357     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4358         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4359     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4361     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4363     if test "$gcc_full_version" -lt 70000; then
4364         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4365     fi
4366 else
4367     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4368     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4369     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4370     # (which reports itself as GCC 4.2.1).
4371     GCC_VERSION=
4373 AC_SUBST(GCC_VERSION)
4375 dnl Set the ENABLE_DBGUTIL variable
4376 dnl ===================================================================
4377 AC_MSG_CHECKING([whether to build with additional debug utilities])
4378 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4379     ENABLE_DBGUTIL="TRUE"
4380     # this is an extra var so it can have different default on different MSVC
4381     # versions (in case there are version specific problems with it)
4382     MSVC_USE_DEBUG_RUNTIME="TRUE"
4384     AC_MSG_RESULT([yes])
4385     # cppunit and graphite expose STL in public headers
4386     if test "$with_system_cppunit" = "yes"; then
4387         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4388     else
4389         with_system_cppunit=no
4390     fi
4391     if test "$with_system_graphite" = "yes"; then
4392         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4393     else
4394         with_system_graphite=no
4395     fi
4396     if test "$with_system_orcus" = "yes"; then
4397         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4398     else
4399         with_system_orcus=no
4400     fi
4401     if test "$with_system_libcmis" = "yes"; then
4402         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4403     else
4404         with_system_libcmis=no
4405     fi
4406     if test "$with_system_hunspell" = "yes"; then
4407         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4408     else
4409         with_system_hunspell=no
4410     fi
4411     if test "$with_system_gpgmepp" = "yes"; then
4412         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4413     else
4414         with_system_gpgmepp=no
4415     fi
4416     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4417     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4418     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4419     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4420     # of those two is using the system variant:
4421     if test "$with_system_libnumbertext" = "yes"; then
4422         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4423     else
4424         with_system_libnumbertext=no
4425     fi
4426     if test "$with_system_libwps" = "yes"; then
4427         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4428     else
4429         with_system_libwps=no
4430     fi
4431 else
4432     ENABLE_DBGUTIL=""
4433     MSVC_USE_DEBUG_RUNTIME=""
4434     AC_MSG_RESULT([no])
4436 AC_SUBST(ENABLE_DBGUTIL)
4437 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4439 dnl Set the ENABLE_DEBUG variable.
4440 dnl ===================================================================
4441 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4442     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4444 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4445     if test -z "$libo_fuzzed_enable_debug"; then
4446         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4447     else
4448         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4449         enable_debug=yes
4450     fi
4453 AC_MSG_CHECKING([whether to do a debug build])
4454 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4455     ENABLE_DEBUG="TRUE"
4456     if test -n "$ENABLE_DBGUTIL" ; then
4457         AC_MSG_RESULT([yes (dbgutil)])
4458     else
4459         AC_MSG_RESULT([yes])
4460     fi
4461 else
4462     ENABLE_DEBUG=""
4463     AC_MSG_RESULT([no])
4465 AC_SUBST(ENABLE_DEBUG)
4467 dnl ===================================================================
4468 dnl Select the linker to use (gold/lld/ld.bfd).
4469 dnl This is done only after compiler checks (need to know if Clang is
4470 dnl used, for different defaults) and after checking if a debug build
4471 dnl is wanted (non-debug builds get the default linker if not explicitly
4472 dnl specified otherwise).
4473 dnl All checks for linker features/options should come after this.
4474 dnl ===================================================================
4475 check_use_ld()
4477     use_ld=-fuse-ld=${1%%:*}
4478     use_ld_path=${1#*:}
4479     if test "$use_ld_path" != "$1"; then
4480         use_ld="$use_ld --ld-path=$use_ld_path"
4481     fi
4482     use_ld_fail_if_error=$2
4483     use_ld_ok=
4484     AC_MSG_CHECKING([for $use_ld linker support])
4485     use_ld_ldflags_save="$LDFLAGS"
4486     LDFLAGS="$LDFLAGS $use_ld"
4487     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4488 #include <stdio.h>
4489         ],[
4490 printf ("hello world\n");
4491         ])], USE_LD=$use_ld, [])
4492     if test -n "$USE_LD"; then
4493         AC_MSG_RESULT( yes )
4494         use_ld_ok=yes
4495     else
4496         if test -n "$use_ld_fail_if_error"; then
4497             AC_MSG_ERROR( no )
4498         else
4499             AC_MSG_RESULT( no )
4500         fi
4501     fi
4502     if test -n "$use_ld_ok"; then
4503         dnl keep the value of LDFLAGS
4504         return 0
4505     fi
4506     LDFLAGS="$use_ld_ldflags_save"
4507     return 1
4509 USE_LD=
4510 if test "$enable_ld" != "no"; then
4511     if test "$GCC" = "yes"; then
4512         if test -n "$enable_ld"; then
4513             check_use_ld "$enable_ld" fail_if_error
4514         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4515             dnl non-debug builds default to the default linker
4516             true
4517         elif test -n "$COM_IS_CLANG"; then
4518             check_use_ld lld
4519             if test $? -ne 0; then
4520                 check_use_ld gold
4521             fi
4522         else
4523             # For gcc first try gold, new versions also support lld.
4524             check_use_ld gold
4525             if test $? -ne 0; then
4526                 check_use_ld lld
4527             fi
4528         fi
4529         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4530         rm conftest.out
4531         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4532         if test -z "$ld_used"; then
4533             ld_used="unknown"
4534         fi
4535         AC_MSG_CHECKING([for linker that is used])
4536         AC_MSG_RESULT([$ld_used])
4537         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4538             if echo "$ld_used" | grep -q "^GNU ld"; then
4539                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4540                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4541             fi
4542         fi
4543     else
4544         if test "$enable_ld" = "yes"; then
4545             AC_MSG_ERROR([--enable-ld not supported])
4546         fi
4547     fi
4549 AC_SUBST(USE_LD)
4551 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4552 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4553     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4554     bsymbolic_functions_ldflags_save=$LDFLAGS
4555     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4556     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4557 #include <stdio.h>
4558         ],[
4559 printf ("hello world\n");
4560         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4561     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4562         AC_MSG_RESULT( found )
4563     else
4564         AC_MSG_RESULT( not found )
4565     fi
4566     LDFLAGS=$bsymbolic_functions_ldflags_save
4568 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4570 LD_GC_SECTIONS=
4571 if test "$GCC" = "yes"; then
4572     for flag in "--gc-sections" "-dead_strip"; do
4573         AC_MSG_CHECKING([for $flag linker support])
4574         ldflags_save=$LDFLAGS
4575         LDFLAGS="$LDFLAGS -Wl,$flag"
4576         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4577 #include <stdio.h>
4578             ],[
4579 printf ("hello world\n");
4580             ])],[
4581             LD_GC_SECTIONS="-Wl,$flag"
4582             AC_MSG_RESULT( found )
4583             ], [
4584             AC_MSG_RESULT( not found )
4585             ])
4586         LDFLAGS=$ldflags_save
4587         if test -n "$LD_GC_SECTIONS"; then
4588             break
4589         fi
4590     done
4592 AC_SUBST(LD_GC_SECTIONS)
4594 HAVE_GSPLIT_DWARF=
4595 if test "$enable_split_debug" != no; then
4596     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4597     if test "$enable_split_debug" = yes -o \( "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4598         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4599         save_CFLAGS=$CFLAGS
4600         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4601         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4602         CFLAGS=$save_CFLAGS
4603         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4604             AC_MSG_RESULT([yes])
4605         else
4606             if test "$enable_split_debug" = yes; then
4607                 AC_MSG_ERROR([no])
4608             else
4609                 AC_MSG_RESULT([no])
4610             fi
4611         fi
4612     fi
4613     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4614         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4615         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4616     fi
4618 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4620 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4621 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4622 save_CFLAGS=$CFLAGS
4623 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4624 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4625 CFLAGS=$save_CFLAGS
4626 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4627     AC_MSG_RESULT([yes])
4628 else
4629     AC_MSG_RESULT([no])
4631 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4633 ENABLE_GDB_INDEX=
4634 if test "$enable_gdb_index" != "no"; then
4635     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4636     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -o -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4637         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4638         save_CFLAGS=$CFLAGS
4639         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4640         have_ggnu_pubnames=
4641         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4642         if test "$have_ggnu_pubnames" != "TRUE"; then
4643             if test "$enable_gdb_index" = "yes"; then
4644                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4645             else
4646                 AC_MSG_RESULT( no )
4647             fi
4648         else
4649             AC_MSG_RESULT( yes )
4650             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4651             ldflags_save=$LDFLAGS
4652             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4653             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4654 #include <stdio.h>
4655                 ],[
4656 printf ("hello world\n");
4657                 ])], ENABLE_GDB_INDEX=TRUE, [])
4658             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4659                 AC_MSG_RESULT( yes )
4660             else
4661                 if test "$enable_gdb_index" = "yes"; then
4662                     AC_MSG_ERROR( no )
4663                 else
4664                     AC_MSG_RESULT( no )
4665                 fi
4666             fi
4667             LDFLAGS=$ldflags_save
4668         fi
4669         CFLAGS=$save_CFLAGS
4670         fi
4671     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4672         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4673         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4674     fi
4676 AC_SUBST(ENABLE_GDB_INDEX)
4678 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4679     enable_sal_log=yes
4681 if test "$enable_sal_log" = yes; then
4682     ENABLE_SAL_LOG=TRUE
4684 AC_SUBST(ENABLE_SAL_LOG)
4686 dnl Check for enable symbols option
4687 dnl ===================================================================
4688 AC_MSG_CHECKING([whether to generate debug information])
4689 if test -z "$enable_symbols"; then
4690     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4691         enable_symbols=yes
4692     else
4693         enable_symbols=no
4694     fi
4696 if test "$enable_symbols" = yes; then
4697     ENABLE_SYMBOLS_FOR=all
4698     AC_MSG_RESULT([yes])
4699 elif test "$enable_symbols" = no; then
4700     ENABLE_SYMBOLS_FOR=
4701     AC_MSG_RESULT([no])
4702 else
4703     # Selective debuginfo.
4704     ENABLE_SYMBOLS_FOR="$enable_symbols"
4705     AC_MSG_RESULT([for "$enable_symbols"])
4707 AC_SUBST(ENABLE_SYMBOLS_FOR)
4709 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4710     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4711     AC_MSG_CHECKING([whether enough memory is available for linking])
4712     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4713     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4714     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4715         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4716     else
4717         AC_MSG_RESULT([yes])
4718     fi
4721 ENABLE_OPTIMIZED=
4722 ENABLE_OPTIMIZED_DEBUG=
4723 AC_MSG_CHECKING([whether to compile with optimization flags])
4724 if test -z "$enable_optimized"; then
4725     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4726         enable_optimized=no
4727     else
4728         enable_optimized=yes
4729     fi
4731 if test "$enable_optimized" = yes; then
4732     ENABLE_OPTIMIZED=TRUE
4733     AC_MSG_RESULT([yes])
4734 elif test "$enable_optimized" = debug; then
4735     ENABLE_OPTIMIZED_DEBUG=TRUE
4736     AC_MSG_RESULT([yes (debug)])
4737     HAVE_GCC_OG=
4738     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4739         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4740         save_CFLAGS=$CFLAGS
4741         CFLAGS="$CFLAGS -Werror -Og"
4742         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4743         CFLAGS=$save_CFLAGS
4744         if test "$HAVE_GCC_OG" = "TRUE"; then
4745             AC_MSG_RESULT([yes])
4746         else
4747             AC_MSG_RESULT([no])
4748         fi
4749     fi
4750     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4751         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4752     fi
4753 else
4754     AC_MSG_RESULT([no])
4756 AC_SUBST(ENABLE_OPTIMIZED)
4757 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4760 # determine CPUNAME, OS, ...
4762 case "$host_os" in
4764 aix*)
4765     COM=GCC
4766     CPUNAME=POWERPC
4767     OS=AIX
4768     RTL_OS=AIX
4769     RTL_ARCH=PowerPC
4770     PLATFORMID=aix_powerpc
4771     P_SEP=:
4772     ;;
4774 cygwin*|wsl*)
4775     # Already handled
4776     ;;
4778 darwin*|macos*)
4779     COM=GCC
4780     OS=MACOSX
4781     RTL_OS=MacOSX
4782     P_SEP=:
4784     case "$host_cpu" in
4785     aarch64|arm64)
4786         if test "$enable_ios_simulator" = "yes"; then
4787             OS=iOS
4788         else
4789             CPUNAME=AARCH64
4790             RTL_ARCH=AARCH64
4791             PLATFORMID=macosx_aarch64
4792         fi
4793         ;;
4794     x86_64)
4795         if test "$enable_ios_simulator" = "yes"; then
4796             OS=iOS
4797         fi
4798         CPUNAME=X86_64
4799         RTL_ARCH=X86_64
4800         PLATFORMID=macosx_x86_64
4801         ;;
4802     *)
4803         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4804         ;;
4805     esac
4806     ;;
4808 ios*)
4809     COM=GCC
4810     OS=iOS
4811     RTL_OS=iOS
4812     P_SEP=:
4814     case "$host_cpu" in
4815     aarch64|arm64)
4816         if test "$enable_ios_simulator" = "yes"; then
4817             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4818         fi
4819         ;;
4820     *)
4821         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4822         ;;
4823     esac
4824     CPUNAME=AARCH64
4825     RTL_ARCH=AARCH64
4826     PLATFORMID=ios_arm64
4827     ;;
4829 dragonfly*)
4830     COM=GCC
4831     OS=DRAGONFLY
4832     RTL_OS=DragonFly
4833     P_SEP=:
4835     case "$host_cpu" in
4836     i*86)
4837         CPUNAME=INTEL
4838         RTL_ARCH=x86
4839         PLATFORMID=dragonfly_x86
4840         ;;
4841     x86_64)
4842         CPUNAME=X86_64
4843         RTL_ARCH=X86_64
4844         PLATFORMID=dragonfly_x86_64
4845         ;;
4846     *)
4847         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4848         ;;
4849     esac
4850     ;;
4852 freebsd*)
4853     COM=GCC
4854     RTL_OS=FreeBSD
4855     OS=FREEBSD
4856     P_SEP=:
4858     case "$host_cpu" in
4859     aarch64)
4860         CPUNAME=AARCH64
4861         PLATFORMID=freebsd_aarch64
4862         RTL_ARCH=AARCH64
4863         ;;
4864     i*86)
4865         CPUNAME=INTEL
4866         RTL_ARCH=x86
4867         PLATFORMID=freebsd_x86
4868         ;;
4869     x86_64|amd64)
4870         CPUNAME=X86_64
4871         RTL_ARCH=X86_64
4872         PLATFORMID=freebsd_x86_64
4873         ;;
4874     powerpc64)
4875         CPUNAME=POWERPC64
4876         RTL_ARCH=PowerPC_64
4877         PLATFORMID=freebsd_powerpc64
4878         ;;
4879     powerpc|powerpcspe)
4880         CPUNAME=POWERPC
4881         RTL_ARCH=PowerPC
4882         PLATFORMID=freebsd_powerpc
4883         ;;
4884     *)
4885         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4886         ;;
4887     esac
4888     ;;
4890 haiku*)
4891     COM=GCC
4892     GUIBASE=haiku
4893     RTL_OS=Haiku
4894     OS=HAIKU
4895     P_SEP=:
4897     case "$host_cpu" in
4898     i*86)
4899         CPUNAME=INTEL
4900         RTL_ARCH=x86
4901         PLATFORMID=haiku_x86
4902         ;;
4903     x86_64|amd64)
4904         CPUNAME=X86_64
4905         RTL_ARCH=X86_64
4906         PLATFORMID=haiku_x86_64
4907         ;;
4908     *)
4909         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4910         ;;
4911     esac
4912     ;;
4914 kfreebsd*)
4915     COM=GCC
4916     OS=LINUX
4917     RTL_OS=kFreeBSD
4918     P_SEP=:
4920     case "$host_cpu" in
4922     i*86)
4923         CPUNAME=INTEL
4924         RTL_ARCH=x86
4925         PLATFORMID=kfreebsd_x86
4926         ;;
4927     x86_64)
4928         CPUNAME=X86_64
4929         RTL_ARCH=X86_64
4930         PLATFORMID=kfreebsd_x86_64
4931         ;;
4932     *)
4933         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4934         ;;
4935     esac
4936     ;;
4938 linux-gnu*)
4939     COM=GCC
4940     OS=LINUX
4941     RTL_OS=Linux
4942     P_SEP=:
4944     case "$host_cpu" in
4946     aarch64)
4947         CPUNAME=AARCH64
4948         PLATFORMID=linux_aarch64
4949         RTL_ARCH=AARCH64
4950         EPM_FLAGS="-a arm64"
4951         ;;
4952     alpha)
4953         CPUNAME=AXP
4954         RTL_ARCH=ALPHA
4955         PLATFORMID=linux_alpha
4956         ;;
4957     arm*)
4958         CPUNAME=ARM
4959         EPM_FLAGS="-a arm"
4960         RTL_ARCH=ARM_EABI
4961         PLATFORMID=linux_arm_eabi
4962         case "$host_cpu" in
4963         arm*-linux)
4964             RTL_ARCH=ARM_OABI
4965             PLATFORMID=linux_arm_oabi
4966             ;;
4967         esac
4968         ;;
4969     hppa)
4970         CPUNAME=HPPA
4971         RTL_ARCH=HPPA
4972         EPM_FLAGS="-a hppa"
4973         PLATFORMID=linux_hppa
4974         ;;
4975     i*86)
4976         CPUNAME=INTEL
4977         RTL_ARCH=x86
4978         PLATFORMID=linux_x86
4979         ;;
4980     ia64)
4981         CPUNAME=IA64
4982         RTL_ARCH=IA64
4983         PLATFORMID=linux_ia64
4984         ;;
4985     mips)
4986         CPUNAME=GODSON
4987         RTL_ARCH=MIPS_EB
4988         EPM_FLAGS="-a mips"
4989         PLATFORMID=linux_mips_eb
4990         ;;
4991     mips64)
4992         CPUNAME=GODSON64
4993         RTL_ARCH=MIPS64_EB
4994         EPM_FLAGS="-a mips64"
4995         PLATFORMID=linux_mips64_eb
4996         ;;
4997     mips64el)
4998         CPUNAME=GODSON64
4999         RTL_ARCH=MIPS64_EL
5000         EPM_FLAGS="-a mips64el"
5001         PLATFORMID=linux_mips64_el
5002         ;;
5003     mipsel)
5004         CPUNAME=GODSON
5005         RTL_ARCH=MIPS_EL
5006         EPM_FLAGS="-a mipsel"
5007         PLATFORMID=linux_mips_el
5008         ;;
5009     m68k)
5010         CPUNAME=M68K
5011         RTL_ARCH=M68K
5012         PLATFORMID=linux_m68k
5013         ;;
5014     powerpc)
5015         CPUNAME=POWERPC
5016         RTL_ARCH=PowerPC
5017         PLATFORMID=linux_powerpc
5018         ;;
5019     powerpc64)
5020         CPUNAME=POWERPC64
5021         RTL_ARCH=PowerPC_64
5022         PLATFORMID=linux_powerpc64
5023         ;;
5024     powerpc64le)
5025         CPUNAME=POWERPC64
5026         RTL_ARCH=PowerPC_64_LE
5027         PLATFORMID=linux_powerpc64_le
5028         ;;
5029     sparc)
5030         CPUNAME=SPARC
5031         RTL_ARCH=SPARC
5032         PLATFORMID=linux_sparc
5033         ;;
5034     sparc64)
5035         CPUNAME=SPARC64
5036         RTL_ARCH=SPARC64
5037         PLATFORMID=linux_sparc64
5038         ;;
5039     s390)
5040         CPUNAME=S390
5041         RTL_ARCH=S390
5042         PLATFORMID=linux_s390
5043         ;;
5044     s390x)
5045         CPUNAME=S390X
5046         RTL_ARCH=S390x
5047         PLATFORMID=linux_s390x
5048         ;;
5049     x86_64)
5050         CPUNAME=X86_64
5051         RTL_ARCH=X86_64
5052         PLATFORMID=linux_x86_64
5053         ;;
5054     *)
5055         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5056         ;;
5057     esac
5058     ;;
5060 linux-android*)
5061     COM=GCC
5062     OS=ANDROID
5063     RTL_OS=Android
5064     P_SEP=:
5066     case "$host_cpu" in
5068     arm|armel)
5069         CPUNAME=ARM
5070         RTL_ARCH=ARM_EABI
5071         PLATFORMID=android_arm_eabi
5072         ;;
5073     aarch64)
5074         CPUNAME=AARCH64
5075         RTL_ARCH=AARCH64
5076         PLATFORMID=android_aarch64
5077         ;;
5078     i*86)
5079         CPUNAME=INTEL
5080         RTL_ARCH=x86
5081         PLATFORMID=android_x86
5082         ;;
5083     x86_64)
5084         CPUNAME=X86_64
5085         RTL_ARCH=X86_64
5086         PLATFORMID=android_x86_64
5087         ;;
5088     *)
5089         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5090         ;;
5091     esac
5092     ;;
5094 *netbsd*)
5095     COM=GCC
5096     OS=NETBSD
5097     RTL_OS=NetBSD
5098     P_SEP=:
5100     case "$host_cpu" in
5101     i*86)
5102         CPUNAME=INTEL
5103         RTL_ARCH=x86
5104         PLATFORMID=netbsd_x86
5105         ;;
5106     powerpc)
5107         CPUNAME=POWERPC
5108         RTL_ARCH=PowerPC
5109         PLATFORMID=netbsd_powerpc
5110         ;;
5111     sparc)
5112         CPUNAME=SPARC
5113         RTL_ARCH=SPARC
5114         PLATFORMID=netbsd_sparc
5115         ;;
5116     x86_64)
5117         CPUNAME=X86_64
5118         RTL_ARCH=X86_64
5119         PLATFORMID=netbsd_x86_64
5120         ;;
5121     *)
5122         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5123         ;;
5124     esac
5125     ;;
5127 openbsd*)
5128     COM=GCC
5129     OS=OPENBSD
5130     RTL_OS=OpenBSD
5131     P_SEP=:
5133     case "$host_cpu" in
5134     i*86)
5135         CPUNAME=INTEL
5136         RTL_ARCH=x86
5137         PLATFORMID=openbsd_x86
5138         ;;
5139     x86_64)
5140         CPUNAME=X86_64
5141         RTL_ARCH=X86_64
5142         PLATFORMID=openbsd_x86_64
5143         ;;
5144     *)
5145         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5146         ;;
5147     esac
5148     SOLARINC="$SOLARINC -I/usr/local/include"
5149     ;;
5151 solaris*)
5152     COM=GCC
5153     OS=SOLARIS
5154     RTL_OS=Solaris
5155     P_SEP=:
5157     case "$host_cpu" in
5158     i*86)
5159         CPUNAME=INTEL
5160         RTL_ARCH=x86
5161         PLATFORMID=solaris_x86
5162         ;;
5163     sparc)
5164         CPUNAME=SPARC
5165         RTL_ARCH=SPARC
5166         PLATFORMID=solaris_sparc
5167         ;;
5168     sparc64)
5169         CPUNAME=SPARC64
5170         RTL_ARCH=SPARC64
5171         PLATFORMID=solaris_sparc64
5172         ;;
5173     *)
5174         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5175         ;;
5176     esac
5177     SOLARINC="$SOLARINC -I/usr/local/include"
5178     ;;
5180 emscripten*)
5181     COM=GCC
5182     OS=EMSCRIPTEN
5183     RTL_OS=Emscripten
5184     P_SEP=:
5186     case "$host_cpu" in
5187     wasm32|wasm64)
5188         ;;
5189     *)
5190         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5191         ;;
5192     esac
5193     CPUNAME=INTEL
5194     RTL_ARCH=x86
5195     PLATFORMID=linux_x86
5196     ;;
5199     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5200     ;;
5201 esac
5203 if test "$with_x" = "no"; then
5204     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5207 DISABLE_GUI=""
5208 if test "$enable_gui" = "no"; then
5209     if test "$using_x11" != yes; then
5210         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5211     fi
5212     USING_X11=
5213     DISABLE_GUI=TRUE
5214 else
5215     AC_DEFINE(HAVE_FEATURE_UI)
5217 AC_SUBST(DISABLE_GUI)
5219 if test "$using_x11" = yes; then
5220     if test "$USING_X11" = TRUE; then
5221         AC_DEFINE(USING_X11)
5222     else
5223         disable_x11_tests
5224     fi
5225 else
5226     if test "$USING_X11" = TRUE; then
5227         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5228     fi
5231 WORKDIR="${BUILDDIR}/workdir"
5232 INSTDIR="${BUILDDIR}/instdir"
5233 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5234 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5235 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5236 AC_SUBST(COM)
5237 AC_SUBST(CPUNAME)
5238 AC_SUBST(RTL_OS)
5239 AC_SUBST(RTL_ARCH)
5240 AC_SUBST(EPM_FLAGS)
5241 AC_SUBST(USING_X11)
5242 AC_SUBST([INSTDIR])
5243 AC_SUBST([INSTROOT])
5244 AC_SUBST([INSTROOTBASE])
5245 AC_SUBST(OS)
5246 AC_SUBST(P_SEP)
5247 AC_SUBST(WORKDIR)
5248 AC_SUBST(PLATFORMID)
5249 AC_SUBST(WINDOWS_X64)
5250 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5252 if test "$OS" = WNT -a "$COM" = MSC; then
5253     case "$CPUNAME" in
5254     INTEL) CPPU_ENV=msci ;;
5255     X86_64) CPPU_ENV=mscx ;;
5256     AARCH64) CPPU_ENV=msca ;;
5257     *)
5258         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5259         ;;
5260     esac
5261 else
5262     CPPU_ENV=gcc3
5264 AC_SUBST(CPPU_ENV)
5266 dnl ===================================================================
5267 dnl Test which package format to use
5268 dnl ===================================================================
5269 AC_MSG_CHECKING([which package format to use])
5270 if test -n "$with_package_format" -a "$with_package_format" != no; then
5271     for i in $with_package_format; do
5272         case "$i" in
5273         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5274             ;;
5275         *)
5276             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5277 aix - AIX software distribution
5278 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5279 deb - Debian software distribution
5280 pkg - Solaris software distribution
5281 rpm - RedHat software distribution
5283 LibreOffice additionally supports:
5284 archive - .tar.gz or .zip
5285 dmg - macOS .dmg
5286 installed - installation tree
5287 msi - Windows .msi
5288         ])
5289             ;;
5290         esac
5291     done
5292     # fakeroot is needed to ensure correct file ownerships/permissions
5293     # inside deb packages and tar archives created on Linux and Solaris.
5294     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5295         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5296         if test "$FAKEROOT" = "no"; then
5297             AC_MSG_ERROR(
5298                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5299         fi
5300     fi
5301     PKGFORMAT="$with_package_format"
5302     AC_MSG_RESULT([$PKGFORMAT])
5303 else
5304     PKGFORMAT=
5305     AC_MSG_RESULT([none])
5307 AC_SUBST(PKGFORMAT)
5309 dnl ===================================================================
5310 dnl handle help related options
5312 dnl If you change help related options, please update README.help
5313 dnl ===================================================================
5315 ENABLE_HTMLHELP=
5316 HELP_OMINDEX_PAGE=
5317 HELP_ONLINE=
5318 WITH_HELPPACKS=
5320 AC_MSG_CHECKING([which help to build])
5321 if test -n "$with_help" -a "$with_help" != "no"; then
5322     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5323     BUILD_TYPE="$BUILD_TYPE HELP"
5324     case "$with_help" in
5325     "html")
5326         ENABLE_HTMLHELP=TRUE
5327         WITH_HELPPACKS=TRUE
5328         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5329         AC_MSG_RESULT([HTML (local)])
5330         ;;
5331     "online")
5332         ENABLE_HTMLHELP=TRUE
5333         HELP_ONLINE=TRUE
5334         AC_MSG_RESULT([HTML (online)])
5335         ;;
5336     yes)
5337         WITH_HELPPACKS=TRUE
5338         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5339         AC_MSG_RESULT([XML (local)])
5340         ;;
5341     *)
5342         AC_MSG_ERROR([Unknown --with-help=$with_help])
5343         ;;
5344     esac
5345 else
5346     AC_MSG_RESULT([no])
5349 AC_MSG_CHECKING([if we need to build the help index tooling])
5350 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5351     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5352     AC_MSG_RESULT([yes])
5353 else
5354     AC_MSG_RESULT([no])
5357 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5358 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5359     if test "$HELP_ONLINE" != TRUE; then
5360         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5361     fi
5362     case "$with_omindex" in
5363     "server")
5364         HELP_OMINDEX_PAGE=TRUE
5365         AC_MSG_RESULT([SERVER])
5366         ;;
5367     "noxap")
5368         AC_MSG_RESULT([NOXAP])
5369         ;;
5370     *)
5371         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5372         ;;
5373     esac
5374 else
5375     AC_MSG_RESULT([no])
5378 AC_MSG_CHECKING([whether to include the XML-help support])
5379 if test "$enable_xmlhelp" = yes; then
5380     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5381     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5382     AC_MSG_RESULT([yes])
5383 else
5384     if test "$with_help" = yes; then
5385         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5386     fi
5387     AC_MSG_RESULT([no])
5390 dnl Test whether to integrate helppacks into the product's installer
5391 AC_MSG_CHECKING([for helppack integration])
5392 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5393     AC_MSG_RESULT([no integration])
5394 else
5395     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5396     AC_MSG_RESULT([integration])
5399 AC_SUBST([ENABLE_HTMLHELP])
5400 AC_SUBST([HELP_OMINDEX_PAGE])
5401 AC_SUBST([HELP_ONLINE])
5402 # WITH_HELPPACKS is used only in configure
5404 dnl ===================================================================
5405 dnl Set up a different compiler to produce tools to run on the build
5406 dnl machine when doing cross-compilation
5407 dnl ===================================================================
5409 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5410 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5411 if test "$cross_compiling" = "yes"; then
5412     AC_MSG_CHECKING([for BUILD platform configuration])
5413     echo
5414     rm -rf CONF-FOR-BUILD config_build.mk
5415     mkdir CONF-FOR-BUILD
5416     # Here must be listed all files needed when running the configure script. In particular, also
5417     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5418     # keep them in the same order as there.
5419     (cd $SRC_ROOT && tar cf - \
5420         config.guess \
5421         bin/get_config_variables \
5422         solenv/bin/getcompver.awk \
5423         solenv/inc/langlist.mk \
5424         download.lst \
5425         config_host.mk.in \
5426         config_host_lang.mk.in \
5427         Makefile.in \
5428         bin/bffvalidator.sh.in \
5429         bin/odfvalidator.sh.in \
5430         bin/officeotron.sh.in \
5431         hardened_runtime.xcent.in \
5432         instsetoo_native/util/openoffice.lst.in \
5433         config_host/*.in \
5434         sysui/desktop/macosx/Info.plist.in \
5435         .vscode/vs-code-template.code-workspace.in \
5436         ) \
5437     | (cd CONF-FOR-BUILD && tar xf -)
5438     cp configure CONF-FOR-BUILD
5439     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5440     (
5441     unset COM USING_X11 OS CPUNAME
5442     unset CC CXX SYSBASE CFLAGS
5443     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5444     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5445     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5446     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5447     if test -n "$CC_FOR_BUILD"; then
5448         export CC="$CC_FOR_BUILD"
5449         CC_BASE=`first_arg_basename "$CC"`
5450     fi
5451     if test -n "$CXX_FOR_BUILD"; then
5452         export CXX="$CXX_FOR_BUILD"
5453         CXX_BASE=`first_arg_basename "$CXX"`
5454     fi
5455     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5456     cd CONF-FOR-BUILD
5458     # Handle host configuration, which affects the cross-toolset too
5459     sub_conf_opts=""
5460     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5461     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5462     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5463     if test -n "$ENABLE_JAVA"; then
5464         case "$_os" in
5465         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5466         Android)
5467             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5468             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5469             ;;
5470         *)
5471             if test -z "$with_jdk_home"; then
5472                 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.])
5473             fi
5474             ;;
5475         esac
5476     else
5477         sub_conf_opts="$sub_conf_opts --without-java"
5478     fi
5479     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5480     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5481     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5482     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5483     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5484     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5485     sub_conf_opts="$sub_conf_opts $with_build_platform_configure_options"
5487     # Don't bother having configure look for stuff not needed for the build platform anyway
5488     ./configure \
5489         --build="$build_alias" \
5490         --disable-cairo-canvas \
5491         --disable-cups \
5492         --disable-firebird-sdbc \
5493         --disable-gpgmepp \
5494         --disable-gstreamer-1-0 \
5495         --disable-gtk3 \
5496         --disable-gtk4 \
5497         --disable-mariadb-sdbc \
5498         --disable-nss \
5499         --disable-online-update \
5500         --disable-opencl \
5501         --disable-pdfimport \
5502         --disable-postgresql-sdbc \
5503         --disable-skia \
5504         --enable-icecream="$enable_icecream" \
5505         --without-doxygen \
5506         --without-webdav \
5507         --with-parallelism="$with_parallelism" \
5508         --with-theme="$with_theme" \
5509         --with-tls=openssl \
5510         $sub_conf_opts \
5511         --srcdir=$srcdir \
5512         2>&1 | sed -e 's/^/    /'
5513     if test [${PIPESTATUS[0]}] -ne 0; then
5514         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5515     fi
5517     # filter permitted build targets
5518     PERMITTED_BUILD_TARGETS="
5519         AVMEDIA
5520         BOOST
5521         CAIRO
5522         CLUCENE
5523         CURL
5524         DBCONNECTIVITY
5525         DESKTOP
5526         DYNLOADING
5527         EPOXY
5528         EXPAT
5529         GLM
5530         GRAPHITE
5531         HARFBUZZ
5532         HELPTOOLS
5533         ICU
5534         LCMS2
5535         LIBJPEG_TURBO
5536         LIBLANGTAG
5537         LibO
5538         LIBFFI
5539         LIBPN
5540         LIBXML2
5541         LIBXSLT
5542         MDDS
5543         NATIVE
5544         OPENSSL
5545         ORCUS
5546         PYTHON
5547         SCRIPTING
5548         ZLIB
5550     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5551     # newlined lists, to use grep as a filter
5552     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5553     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5554     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5555     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5557     cp config_host.mk ../config_build.mk
5558     cp config_host_lang.mk ../config_build_lang.mk
5559     mv config.log ../config.Build.log
5560     mkdir -p ../config_build
5561     mv config_host/*.h ../config_build
5562     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5564     # all these will get a _FOR_BUILD postfix
5565     DIRECT_FOR_BUILD_SETTINGS="
5566         CC
5567         CPPU_ENV
5568         CXX
5569         ILIB
5570         JAVA_HOME
5571         JAVAIFLAGS
5572         JDK
5573         LIBO_BIN_FOLDER
5574         LIBO_LIB_FOLDER
5575         LIBO_URE_LIB_FOLDER
5576         LIBO_URE_MISC_FOLDER
5577         OS
5578         SDKDIRNAME
5579         SYSTEM_LIBXML
5580         SYSTEM_LIBXSLT
5582     # these overwrite host config with build config
5583     OVERWRITING_SETTINGS="
5584         ANT
5585         ANT_HOME
5586         ANT_LIB
5587         HSQLDB_USE_JDBC_4_1
5588         JAVA_CLASSPATH_NOT_SET
5589         JAVA_SOURCE_VER
5590         JAVA_TARGET_VER
5591         JAVACFLAGS
5592         JAVACOMPILER
5593         JAVADOC
5594         JAVADOCISGJDOC
5596     # these need some special handling
5597     EXTRA_HANDLED_SETTINGS="
5598         INSTDIR
5599         INSTROOT
5600         PATH
5601         WORKDIR
5603     OLD_PATH=$PATH
5604     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5605     BUILD_PATH=$PATH
5606     PATH=$OLD_PATH
5608     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5609     echo "$line" >>build-config
5611     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5612         VV='$'$V
5613         VV=`eval "echo $VV"`
5614         if test -n "$VV"; then
5615             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5616             echo "$line" >>build-config
5617         fi
5618     done
5620     for V in $OVERWRITING_SETTINGS; do
5621         VV='$'$V
5622         VV=`eval "echo $VV"`
5623         if test -n "$VV"; then
5624             line=${V}='${'${V}:-$VV'}'
5625             echo "$line" >>build-config
5626         fi
5627     done
5629     for V in INSTDIR INSTROOT WORKDIR; do
5630         VV='$'$V
5631         VV=`eval "echo $VV"`
5632         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5633         if test -n "$VV"; then
5634             line="${V}_FOR_BUILD='$VV'"
5635             echo "$line" >>build-config
5636         fi
5637     done
5639     )
5640     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5641     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])
5642     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5643              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5645     eval `cat CONF-FOR-BUILD/build-config`
5647     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5649     rm -rf CONF-FOR-BUILD
5650 else
5651     OS_FOR_BUILD="$OS"
5652     CC_FOR_BUILD="$CC"
5653     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5654     CXX_FOR_BUILD="$CXX"
5655     INSTDIR_FOR_BUILD="$INSTDIR"
5656     INSTROOT_FOR_BUILD="$INSTROOT"
5657     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5658     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5659     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5660     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5661     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5662     WORKDIR_FOR_BUILD="$WORKDIR"
5664 AC_SUBST(OS_FOR_BUILD)
5665 AC_SUBST(INSTDIR_FOR_BUILD)
5666 AC_SUBST(INSTROOT_FOR_BUILD)
5667 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5668 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5669 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5670 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5671 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5672 AC_SUBST(WORKDIR_FOR_BUILD)
5673 AC_SUBST(CC_FOR_BUILD)
5674 AC_SUBST(CXX_FOR_BUILD)
5675 AC_SUBST(CPPU_ENV_FOR_BUILD)
5677 dnl ===================================================================
5678 dnl Check for syslog header
5679 dnl ===================================================================
5680 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5682 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5683 dnl ===================================================================
5684 AC_MSG_CHECKING([whether to turn warnings to errors])
5685 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5686     ENABLE_WERROR="TRUE"
5687     PYTHONWARNINGS="error"
5688     AC_MSG_RESULT([yes])
5689 else
5690     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5691         ENABLE_WERROR="TRUE"
5692         PYTHONWARNINGS="error"
5693         AC_MSG_RESULT([yes])
5694     else
5695         AC_MSG_RESULT([no])
5696     fi
5698 AC_SUBST(ENABLE_WERROR)
5699 AC_SUBST(PYTHONWARNINGS)
5701 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5702 dnl ===================================================================
5703 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5704 if test -z "$enable_assert_always_abort"; then
5705    if test "$ENABLE_DEBUG" = TRUE; then
5706        enable_assert_always_abort=yes
5707    else
5708        enable_assert_always_abort=no
5709    fi
5711 if test "$enable_assert_always_abort" = "yes"; then
5712     ASSERT_ALWAYS_ABORT="TRUE"
5713     AC_MSG_RESULT([yes])
5714 else
5715     ASSERT_ALWAYS_ABORT="FALSE"
5716     AC_MSG_RESULT([no])
5718 AC_SUBST(ASSERT_ALWAYS_ABORT)
5720 # Determine whether to use ooenv for the instdir installation
5721 # ===================================================================
5722 if test $_os != "WINNT" -a $_os != "Darwin"; then
5723     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5724     if test -z "$enable_ooenv"; then
5725         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5726             enable_ooenv=yes
5727         else
5728             enable_ooenv=no
5729         fi
5730     fi
5731     if test "$enable_ooenv" = "no"; then
5732         AC_MSG_RESULT([no])
5733     else
5734         ENABLE_OOENV="TRUE"
5735         AC_MSG_RESULT([yes])
5736     fi
5738 AC_SUBST(ENABLE_OOENV)
5740 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5741     if test "$enable_qt5" = "no"; then
5742         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5743     else
5744         enable_qt5=yes
5745     fi
5748 dnl ===================================================================
5749 dnl check for cups support
5750 dnl ===================================================================
5752 AC_MSG_CHECKING([whether to enable CUPS support])
5753 if test "$test_cups" = yes -a "$enable_cups" != no; then
5754     ENABLE_CUPS=TRUE
5755     AC_MSG_RESULT([yes])
5757     AC_MSG_CHECKING([whether cups support is present])
5758     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5759     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5760     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5761         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5762     fi
5763 else
5764     AC_MSG_RESULT([no])
5767 AC_SUBST(ENABLE_CUPS)
5769 # fontconfig checks
5770 if test "$using_freetype_fontconfig" = yes; then
5771     AC_MSG_CHECKING([which fontconfig to use])
5773 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5774     AC_MSG_RESULT([external])
5775     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5776     SYSTEM_FONTCONFIG=TRUE
5777     FilterLibs "${FONTCONFIG_LIBS}"
5778     FONTCONFIG_LIBS="${filteredlibs}"
5779 elif test "$using_freetype_fontconfig" = yes; then
5780     AC_MSG_RESULT([internal])
5781     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5783 AC_SUBST(FONTCONFIG_CFLAGS)
5784 AC_SUBST(FONTCONFIG_LIBS)
5785 AC_SUBST([SYSTEM_FONTCONFIG])
5787 dnl whether to find & fetch external tarballs?
5788 dnl ===================================================================
5789 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5790    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5791        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5792    else
5793        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5794    fi
5796 if test -z "$TARFILE_LOCATION"; then
5797     if test -d "$SRC_ROOT/src" ; then
5798         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5799         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5800     fi
5801     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5802 else
5803     AbsolutePath "$TARFILE_LOCATION"
5804     PathFormat "${absolute_path}"
5805     TARFILE_LOCATION="${formatted_path}"
5807 AC_SUBST(TARFILE_LOCATION)
5809 AC_MSG_CHECKING([whether we want to fetch tarballs])
5810 if test "$enable_fetch_external" != "no"; then
5811     if test "$with_all_tarballs" = "yes"; then
5812         AC_MSG_RESULT([yes, all of them])
5813         DO_FETCH_TARBALLS="ALL"
5814     else
5815         AC_MSG_RESULT([yes, if we use them])
5816         DO_FETCH_TARBALLS="TRUE"
5817     fi
5818 else
5819     AC_MSG_RESULT([no])
5820     DO_FETCH_TARBALLS=
5822 AC_SUBST(DO_FETCH_TARBALLS)
5824 dnl Test whether to include MySpell dictionaries
5825 dnl ===================================================================
5826 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5827 if test "$with_myspell_dicts" = "yes"; then
5828     AC_MSG_RESULT([yes])
5829     WITH_MYSPELL_DICTS=TRUE
5830     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5831     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5832 else
5833     AC_MSG_RESULT([no])
5834     WITH_MYSPELL_DICTS=
5836 AC_SUBST(WITH_MYSPELL_DICTS)
5838 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5839 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5840     if test "$with_system_dicts" = yes; then
5841         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5842     fi
5843     with_system_dicts=no
5846 AC_MSG_CHECKING([whether to use dicts from external paths])
5847 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5848     AC_MSG_RESULT([yes])
5849     SYSTEM_DICTS=TRUE
5850     AC_MSG_CHECKING([for spelling dictionary directory])
5851     if test -n "$with_external_dict_dir"; then
5852         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5853     else
5854         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5855         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5856             DICT_SYSTEM_DIR=file:///usr/share/myspell
5857         fi
5858     fi
5859     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5860     AC_MSG_CHECKING([for hyphenation patterns directory])
5861     if test -n "$with_external_hyph_dir"; then
5862         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5863     else
5864         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5865     fi
5866     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5867     AC_MSG_CHECKING([for thesaurus directory])
5868     if test -n "$with_external_thes_dir"; then
5869         THES_SYSTEM_DIR=file://$with_external_thes_dir
5870     else
5871         THES_SYSTEM_DIR=file:///usr/share/mythes
5872     fi
5873     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5874 else
5875     AC_MSG_RESULT([no])
5876     SYSTEM_DICTS=
5878 AC_SUBST(SYSTEM_DICTS)
5879 AC_SUBST(DICT_SYSTEM_DIR)
5880 AC_SUBST(HYPH_SYSTEM_DIR)
5881 AC_SUBST(THES_SYSTEM_DIR)
5883 dnl ===================================================================
5884 dnl Precompiled headers.
5885 ENABLE_PCH=""
5886 AC_MSG_CHECKING([whether to enable pch feature])
5887 if test -z "$enable_pch"; then
5888     if test "$_os" = "WINNT"; then
5889         # Enabled by default on Windows.
5890         enable_pch=yes
5891     else
5892         enable_pch=no
5893     fi
5895 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5896     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5898 if test "$enable_pch" = "system"; then
5899     ENABLE_PCH="1"
5900     AC_MSG_RESULT([yes (system headers)])
5901 elif test "$enable_pch" = "base"; then
5902     ENABLE_PCH="2"
5903     AC_MSG_RESULT([yes (system and base headers)])
5904 elif test "$enable_pch" = "normal"; then
5905     ENABLE_PCH="3"
5906     AC_MSG_RESULT([yes (normal)])
5907 elif test "$enable_pch" = "full"; then
5908     ENABLE_PCH="4"
5909     AC_MSG_RESULT([yes (full)])
5910 elif test "$enable_pch" = "yes"; then
5911     # Pick a suitable default.
5912     if test "$GCC" = "yes"; then
5913         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5914         # while making the PCHs larger and rebuilds more likely.
5915         ENABLE_PCH="2"
5916         AC_MSG_RESULT([yes (system and base headers)])
5917     else
5918         # With MSVC the highest level makes a significant difference,
5919         # and it was the default when there used to be no PCH levels.
5920         ENABLE_PCH="4"
5921         AC_MSG_RESULT([yes (full)])
5922     fi
5923 elif test "$enable_pch" = "no"; then
5924     AC_MSG_RESULT([no])
5925 else
5926     AC_MSG_ERROR([Unknown value for --enable-pch])
5928 AC_SUBST(ENABLE_PCH)
5929 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5930 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5931     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5932     if test "$CCACHE_BIN" != "not found"; then
5933         AC_MSG_CHECKING([ccache version])
5934         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5935         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5936         AC_MSG_RESULT([$CCACHE_VERSION])
5937         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5938         if test "$CCACHE_NUMVER" -gt "030701"; then
5939             AC_MSG_RESULT([yes])
5940         else
5941             AC_MSG_RESULT([no (not newer than 3.7.1)])
5942             CCACHE_DEPEND_MODE=
5943         fi
5944     fi
5947 PCH_INSTANTIATE_TEMPLATES=
5948 if test -n "$ENABLE_PCH"; then
5949     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5950     save_CFLAGS=$CFLAGS
5951     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5952     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5953     CFLAGS=$save_CFLAGS
5954     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5955         AC_MSG_RESULT(yes)
5956     else
5957         AC_MSG_RESULT(no)
5958     fi
5960 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5962 BUILDING_PCH_WITH_OBJ=
5963 if test -n "$ENABLE_PCH"; then
5964     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5965     save_CFLAGS=$CFLAGS
5966     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5967     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5968     CFLAGS=$save_CFLAGS
5969     if test -n "$BUILDING_PCH_WITH_OBJ"; then
5970         AC_MSG_RESULT(yes)
5971     else
5972         AC_MSG_RESULT(no)
5973     fi
5975 AC_SUBST(BUILDING_PCH_WITH_OBJ)
5977 PCH_CODEGEN=
5978 PCH_NO_CODEGEN=
5979 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5980     AC_MSG_CHECKING([whether $CC supports -fpch-codegen])
5981     save_CFLAGS=$CFLAGS
5982     CFLAGS="$CFLAGS -Werror -fpch-codegen"
5983     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
5984         [
5985         PCH_CODEGEN="-fpch-codegen"
5986         PCH_NO_CODEGEN="-fno-pch-codegen"
5987         ],[])
5988     CFLAGS=$save_CFLAGS
5989     if test -n "$PCH_CODEGEN"; then
5990         AC_MSG_RESULT(yes)
5991     else
5992         AC_MSG_RESULT(no)
5993     fi
5995 AC_SUBST(PCH_CODEGEN)
5996 AC_SUBST(PCH_NO_CODEGEN)
5997 PCH_DEBUGINFO=
5998 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5999     AC_MSG_CHECKING([whether $CC supports -fpch-debuginfo])
6000     save_CFLAGS=$CFLAGS
6001     CFLAGS="$CFLAGS -Werror -fpch-debuginfo"
6002     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="-fpch-debuginfo" ],[])
6003     CFLAGS=$save_CFLAGS
6004     if test -n "$PCH_DEBUGINFO"; then
6005         AC_MSG_RESULT(yes)
6006     else
6007         AC_MSG_RESULT(no)
6008     fi
6010 AC_SUBST(PCH_DEBUGINFO)
6012 TAB=`printf '\t'`
6014 AC_MSG_CHECKING([the GNU Make version])
6015 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6016 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6017 if test "$_make_longver" -ge "038200"; then
6018     AC_MSG_RESULT([$GNUMAKE $_make_version])
6020 elif test "$_make_longver" -ge "038100"; then
6021     if test "$build_os" = "cygwin"; then
6022         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6023     fi
6024     AC_MSG_RESULT([$GNUMAKE $_make_version])
6026     dnl ===================================================================
6027     dnl Search all the common names for sha1sum
6028     dnl ===================================================================
6029     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6030     if test -z "$SHA1SUM"; then
6031         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6032     elif test "$SHA1SUM" = "openssl"; then
6033         SHA1SUM="openssl sha1"
6034     fi
6035     AC_MSG_CHECKING([for GNU Make bug 20033])
6036     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6037     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6038 A := \$(wildcard *.a)
6040 .PHONY: all
6041 all: \$(A:.a=.b)
6042 <TAB>@echo survived bug20033.
6044 .PHONY: setup
6045 setup:
6046 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6048 define d1
6049 @echo lala \$(1)
6050 @sleep 1
6051 endef
6053 define d2
6054 @echo tyty \$(1)
6055 @sleep 1
6056 endef
6058 %.b : %.a
6059 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6060 <TAB>\$(call d1,\$(CHECKSUM)),\
6061 <TAB>\$(call d2,\$(CHECKSUM)))
6063     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6064         no_parallelism_make="YES"
6065         AC_MSG_RESULT([yes, disable parallelism])
6066     else
6067         AC_MSG_RESULT([no, keep parallelism enabled])
6068     fi
6069     rm -rf $TESTGMAKEBUG20033
6070 else
6071     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6074 # find if gnumake support file function
6075 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6076 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6077 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6078     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6080 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6081 \$(file >test.txt,Success )
6083 .PHONY: all
6084 all:
6085 <TAB>@cat test.txt
6088 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6089 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6090     HAVE_GNUMAKE_FILE_FUNC=TRUE
6091     AC_MSG_RESULT([yes])
6092 else
6093     AC_MSG_RESULT([no])
6095 rm -rf $TESTGMAKEFILEFUNC
6096 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6097 AC_SUBST(GNUMAKE_WIN_NATIVE)
6099 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6100 STALE_MAKE=
6101 if test "$_make_ver_check" = ""; then
6102    STALE_MAKE=TRUE
6105 HAVE_LD_HASH_STYLE=FALSE
6106 WITH_LINKER_HASH_STYLE=
6107 AC_MSG_CHECKING([for --hash-style gcc linker support])
6108 if test "$GCC" = "yes"; then
6109     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6110         hash_styles="gnu sysv"
6111     elif test "$with_linker_hash_style" = "no"; then
6112         hash_styles=
6113     else
6114         hash_styles="$with_linker_hash_style"
6115     fi
6117     for hash_style in $hash_styles; do
6118         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6119         hash_style_ldflags_save=$LDFLAGS
6120         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6122         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6123             [
6124 #include <stdio.h>
6125             ],[
6126 printf ("");
6127             ])],
6128             [
6129                   HAVE_LD_HASH_STYLE=TRUE
6130                   WITH_LINKER_HASH_STYLE=$hash_style
6131             ],
6132             [HAVE_LD_HASH_STYLE=FALSE],
6133             [HAVE_LD_HASH_STYLE=FALSE])
6134         LDFLAGS=$hash_style_ldflags_save
6135     done
6137     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6138         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6139     else
6140         AC_MSG_RESULT( no )
6141     fi
6142     LDFLAGS=$hash_style_ldflags_save
6143 else
6144     AC_MSG_RESULT( no )
6146 AC_SUBST(HAVE_LD_HASH_STYLE)
6147 AC_SUBST(WITH_LINKER_HASH_STYLE)
6149 dnl ===================================================================
6150 dnl Check whether there's a Perl version available.
6151 dnl ===================================================================
6152 if test -z "$with_perl_home"; then
6153     AC_PATH_PROG(PERL, perl)
6154 else
6155     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6156     _perl_path="$with_perl_home/bin/perl"
6157     if test -x "$_perl_path"; then
6158         PERL=$_perl_path
6159     else
6160         AC_MSG_ERROR([$_perl_path not found])
6161     fi
6164 dnl ===================================================================
6165 dnl Testing for Perl version 5 or greater.
6166 dnl $] is the Perl version variable, it is returned as an integer
6167 dnl ===================================================================
6168 if test "$PERL"; then
6169     AC_MSG_CHECKING([the Perl version])
6170     ${PERL} -e "exit($]);"
6171     _perl_version=$?
6172     if test "$_perl_version" -lt 5; then
6173         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6174     fi
6175     AC_MSG_RESULT([Perl $_perl_version])
6176 else
6177     AC_MSG_ERROR([Perl not found, install Perl 5])
6180 dnl ===================================================================
6181 dnl Testing for required Perl modules
6182 dnl ===================================================================
6184 AC_MSG_CHECKING([for required Perl modules])
6185 perl_use_string="use Cwd ; use Digest::MD5"
6186 if test "$_os" = "WINNT"; then
6187     if test -n "$PKGFORMAT"; then
6188         for i in $PKGFORMAT; do
6189             case "$i" in
6190             msi)
6191                 # for getting fonts versions to use in MSI
6192                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6193                 ;;
6194             esac
6195         done
6196     fi
6198 if test "$with_system_hsqldb" = "yes"; then
6199     perl_use_string="$perl_use_string ; use Archive::Zip"
6201 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6202     # OpenSSL needs that to build
6203     perl_use_string="$perl_use_string ; use FindBin"
6205 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6206     AC_MSG_RESULT([all modules found])
6207 else
6208     AC_MSG_RESULT([failed to find some modules])
6209     # Find out which modules are missing.
6210     for i in $perl_use_string; do
6211         if test "$i" != "use" -a "$i" != ";"; then
6212             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6213                 missing_perl_modules="$missing_perl_modules $i"
6214             fi
6215         fi
6216     done
6217     AC_MSG_ERROR([
6218     The missing Perl modules are: $missing_perl_modules
6219     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6222 dnl ===================================================================
6223 dnl Check for pkg-config
6224 dnl ===================================================================
6225 if test "$_os" != "WINNT"; then
6226     PKG_PROG_PKG_CONFIG
6229 if test "$_os" != "WINNT"; then
6231     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6232     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6233     # explicitly. Or put /path/to/compiler in PATH yourself.
6235     # Use wrappers for LTO
6236     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6237         AC_CHECK_TOOL(AR,gcc-ar)
6238         AC_CHECK_TOOL(NM,gcc-nm)
6239         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6240     else
6241         AC_CHECK_TOOL(AR,ar)
6242         AC_CHECK_TOOL(NM,nm)
6243         AC_CHECK_TOOL(RANLIB,ranlib)
6244     fi
6245     AC_CHECK_TOOL(OBJDUMP,objdump)
6246     AC_CHECK_TOOL(READELF,readelf)
6247     AC_CHECK_TOOL(STRIP,strip)
6248     if test "$_os" = "WINNT"; then
6249         AC_CHECK_TOOL(DLLTOOL,dlltool)
6250         AC_CHECK_TOOL(WINDRES,windres)
6251     fi
6253 AC_SUBST(AR)
6254 AC_SUBST(DLLTOOL)
6255 AC_SUBST(LD)
6256 AC_SUBST(NM)
6257 AC_SUBST(OBJDUMP)
6258 AC_SUBST(PKG_CONFIG)
6259 AC_SUBST(PKG_CONFIG_PATH)
6260 AC_SUBST(PKG_CONFIG_LIBDIR)
6261 AC_SUBST(RANLIB)
6262 AC_SUBST(READELF)
6263 AC_SUBST(STRIP)
6264 AC_SUBST(WINDRES)
6266 dnl ===================================================================
6267 dnl pkg-config checks on macOS
6268 dnl ===================================================================
6270 if test $_os = Darwin; then
6271     AC_MSG_CHECKING([for bogus pkg-config])
6272     if test -n "$PKG_CONFIG"; then
6273         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6274             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6275         else
6276             if test "$enable_bogus_pkg_config" = "yes"; then
6277                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6278             else
6279                 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.])
6280             fi
6281         fi
6282     else
6283         AC_MSG_RESULT([no, good])
6284     fi
6287 find_csc()
6289     # Return value: $csctest
6291     unset csctest
6293     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6294     if test -n "$regvalue"; then
6295         csctest=$regvalue
6296         return
6297     fi
6300 find_al()
6302     # Return value: $altest
6304     unset altest
6306     # We need this check to detect 4.6.1 or above.
6307     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6308         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6309         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6310             altest=$regvalue
6311             return
6312         fi
6313     done
6315     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6316         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6317         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6318             altest=$regvalue
6319             return
6320         fi
6321     done
6324 find_dotnetsdk46()
6326     unset frametest
6328     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6329         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6330         if test -n "$regvalue"; then
6331             frametest=$regvalue
6332             return
6333         fi
6334     done
6337 find_winsdk_version()
6339     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6340     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6342     unset winsdktest winsdkbinsubdir winsdklibsubdir
6344     case "$1" in
6345     8.0|8.0A)
6346         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6347         if test -n "$regvalue"; then
6348             winsdktest=$regvalue
6349             winsdklibsubdir=win8
6350             return
6351         fi
6352         ;;
6353     8.1|8.1A)
6354         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6355         if test -n "$regvalue"; then
6356             winsdktest=$regvalue
6357             winsdklibsubdir=winv6.3
6358             return
6359         fi
6360         ;;
6361     10.0)
6362         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6363         if test -n "$regvalue"; then
6364             winsdktest=$regvalue
6365             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6366             if test -n "$regvalue"; then
6367                 winsdkbinsubdir="$regvalue".0
6368                 winsdklibsubdir=$winsdkbinsubdir
6369                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6370                 local tmppath_unix=$(cygpath -u "$tmppath")
6371                 # test exist the SDK path
6372                 if test -d "$tmppath_unix"; then
6373                    # when path is convertible to a short path then path is okay
6374                    cygpath -d "$tmppath" >/dev/null 2>&1
6375                    if test $? -ne 0; then
6376                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6377                    fi
6378                 else
6379                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6380                 fi
6381             fi
6382             return
6383         fi
6384         ;;
6385     esac
6388 find_winsdk()
6390     # Return value: From find_winsdk_version
6392     unset winsdktest
6394     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6395         find_winsdk_version $ver
6396         if test -n "$winsdktest"; then
6397             return
6398         fi
6399     done
6402 find_msms()
6404     # Return value: $msmdir
6406     AC_MSG_CHECKING([for MSVC merge modules directory])
6407     local my_msm_files=Microsoft_VC${VCVER}_CRT_x86.msm
6408     local my_msm_dir
6410     case "$VCVER" in
6411         160)
6412         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6413         ;;
6414     esac
6415     for f in $my_msm_files; do
6416         echo "$as_me:$LINENO: searching for $f" >&5
6417     done
6419     msmdir=
6420     for ver in 14.0 15.0; do
6421         reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/$ver/Setup/VS/MSMDir
6422         if test -n "$regvalue"; then
6423             for f in ${my_msm_files}; do
6424                 if test -e "$regvalue/${f}"; then
6425                     msmdir=$regvalue
6426                     break
6427                 fi
6428             done
6429         fi
6430     done
6431     dnl Is the following fallback really necessary, or was it added in response
6432     dnl to never having started Visual Studio on a given machine, so the
6433     dnl registry keys checked above had presumably not yet been created?
6434     dnl Anyway, if it really is necessary, it might be worthwhile to extend it
6435     dnl to also check %CommonProgramFiles(X86)% (typically expanding to
6436     dnl "C:\Program Files (X86)\Common Files" compared to %CommonProgramFiles%
6437     dnl expanding to "C:\Program Files\Common Files"), which would need
6438     dnl something like $(perl -e 'print $ENV{"CommonProgramFiles(x86)"}') to
6439     dnl obtain its value from cygwin:
6440     if test -z "$msmdir"; then
6441         my_msm_dir="${COMMONPROGRAMFILES}/Merge Modules/"
6442         for f in ${my_msm_files}; do
6443             if test -e "$my_msm_dir/${f}"; then
6444                 msmdir=$my_msm_dir
6445             fi
6446         done
6447     fi
6449     dnl Starting from MSVC 15.0, merge modules are located in different directory
6450     case "$VCVER" in
6451     160)
6452         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6453             echo "$as_me:$LINENO: looking in $VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules])" >&5
6454             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6455             for f in ${my_msm_files}; do
6456                 if test -e "$my_msm_dir/${f}"; then
6457                     msmdir=$my_msm_dir
6458                     break
6459                 fi
6460             done
6461         done
6462         ;;
6463     esac
6465     if test -n "$msmdir"; then
6466         msmdir=`cygpath -m "$msmdir"`
6467         AC_MSG_RESULT([$msmdir])
6468     else
6469         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6470             AC_MSG_FAILURE([not found])
6471         else
6472             AC_MSG_WARN([not found (check config.log)])
6473             add_warning "MSM none of ${my_msm_files} found"
6474         fi
6475     fi
6478 find_msvc_x64_dlls()
6480     # Return value: $msvcdllpath, $msvcdlls
6482     AC_MSG_CHECKING([for MSVC x64 DLL path])
6483     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6484     case "$VCVER" in
6485     160)
6486         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6487             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT" >&5
6488             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"; then
6489                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC141.CRT"
6490                 break
6491             fi
6492             echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT" >&5
6493             if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"; then
6494                 msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC142.CRT"
6495                 break
6496             fi
6497         done
6498         ;;
6499     esac
6500     AC_MSG_RESULT([$msvcdllpath])
6501     AC_MSG_CHECKING([for MSVC x64 DLLs])
6502     msvcdlls="msvcp140.dll vcruntime140.dll"
6503     for dll in $msvcdlls; do
6504         if ! test -f "$msvcdllpath/$dll"; then
6505             AC_MSG_FAILURE([missing $dll])
6506         fi
6507     done
6508     AC_MSG_RESULT([found all ($msvcdlls)])
6511 dnl =========================================
6512 dnl Check for the Windows  SDK.
6513 dnl =========================================
6514 if test "$_os" = "WINNT"; then
6515     AC_MSG_CHECKING([for Windows SDK])
6516     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6517         find_winsdk
6518         WINDOWS_SDK_HOME=$winsdktest
6520         # normalize if found
6521         if test -n "$WINDOWS_SDK_HOME"; then
6522             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6523             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6524         fi
6526         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6527     fi
6529     if test -n "$WINDOWS_SDK_HOME"; then
6530         # Remove a possible trailing backslash
6531         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6533         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6534              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6535              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6536             have_windows_sdk_headers=yes
6537         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6538              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6539              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6540             have_windows_sdk_headers=yes
6541         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6542              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6543              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6544             have_windows_sdk_headers=yes
6545         else
6546             have_windows_sdk_headers=no
6547         fi
6549         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6550             have_windows_sdk_libs=yes
6551         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6552             have_windows_sdk_libs=yes
6553         else
6554             have_windows_sdk_libs=no
6555         fi
6557         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6558             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6559 the  Windows SDK are installed.])
6560         fi
6561     fi
6563     if test -z "$WINDOWS_SDK_HOME"; then
6564         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6565     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6566         WINDOWS_SDK_VERSION=80
6567         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6568     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6569         WINDOWS_SDK_VERSION=81
6570         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6571     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6572         WINDOWS_SDK_VERSION=10
6573         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6574     else
6575         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6576     fi
6577     PathFormat "$WINDOWS_SDK_HOME"
6578     WINDOWS_SDK_HOME="$formatted_path"
6579     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6580     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6581         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6582         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6583             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6584         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6585             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6586         fi
6587     fi
6589     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6590     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6591     dnl but not in v8.0), so allow this to be overridden with a
6592     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6593     dnl and configuration error if no WiLangId.vbs is found would arguably be
6594     dnl better, but I do not know under which conditions exactly it is needed by
6595     dnl msiglobal.pm:
6596     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6597         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6598         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6599         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6600             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6601             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6602         fi
6603         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6604             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6605             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6606         fi
6607         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6608             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6609             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6610         fi
6611     fi
6612     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6613         if test -n "$with_package_format" -a "$with_package_format" != no; then
6614             for i in "$with_package_format"; do
6615                 if test "$i" = "msi"; then
6616                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6617                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6618                     fi
6619                 fi
6620             done
6621         fi
6622     fi
6624 AC_SUBST(WINDOWS_SDK_HOME)
6625 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6626 AC_SUBST(WINDOWS_SDK_VERSION)
6627 AC_SUBST(WINDOWS_SDK_WILANGID)
6629 if test "$build_os" = "cygwin"; then
6630     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6631     dnl dir, it also determines that dir's path w/o an arch segment if any,
6632     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6633     AC_MSG_CHECKING([for midl.exe])
6635     find_winsdk
6636     if test -n "$winsdkbinsubdir" \
6637         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6638     then
6639         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6640         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6641     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6642         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6643         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6644     elif test -f "$winsdktest/Bin/midl.exe"; then
6645         MIDL_PATH=$winsdktest/Bin
6646         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6647     fi
6648     if test ! -f "$MIDL_PATH/midl.exe"; then
6649         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6650     else
6651         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6652     fi
6654     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6655     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6657     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6658          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6659          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6660          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6661     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6662          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6663          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6664          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6665     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6666          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6667          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6668          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6669     else
6670         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6671     fi
6673     dnl Check csc.exe
6674     AC_MSG_CHECKING([for csc.exe])
6675     find_csc
6676     if test -f "$csctest/csc.exe"; then
6677         CSC_PATH="$csctest"
6678     fi
6679     if test ! -f "$CSC_PATH/csc.exe"; then
6680         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6681     else
6682         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6683     fi
6685     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6687     dnl Check al.exe
6688     AC_MSG_CHECKING([for al.exe])
6689     find_winsdk
6690     if test -n "$winsdkbinsubdir" \
6691         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6692     then
6693         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6694     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6695         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6696     elif test -f "$winsdktest/Bin/al.exe"; then
6697         AL_PATH="$winsdktest/Bin"
6698     fi
6700     if test -z "$AL_PATH"; then
6701         find_al
6702         if test -f "$altest/bin/al.exe"; then
6703             AL_PATH="$altest/bin"
6704         elif test -f "$altest/al.exe"; then
6705             AL_PATH="$altest"
6706         fi
6707     fi
6708     if test ! -f "$AL_PATH/al.exe"; then
6709         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6710     else
6711         AC_MSG_RESULT([$AL_PATH/al.exe])
6712     fi
6714     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6716     dnl Check mscoree.lib / .NET Framework dir
6717     AC_MSG_CHECKING(.NET Framework)
6718     find_dotnetsdk46
6719     PathFormat "$frametest"
6720     frametest="$formatted_path"
6721     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6722         DOTNET_FRAMEWORK_HOME="$frametest"
6723     else
6724         find_winsdk
6725         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6726             DOTNET_FRAMEWORK_HOME="$winsdktest"
6727         fi
6728     fi
6729     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
6730         AC_MSG_ERROR([mscoree.lib not found])
6731     fi
6732     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6734     PathFormat "$MIDL_PATH"
6735     MIDL_PATH="$formatted_path"
6737     PathFormat "$AL_PATH"
6738     AL_PATH="$formatted_path"
6740     PathFormat "$DOTNET_FRAMEWORK_HOME"
6741     DOTNET_FRAMEWORK_HOME="$formatted_path"
6743     PathFormat "$CSC_PATH"
6744     CSC_PATH="$formatted_path"
6747 dnl ===================================================================
6748 dnl Testing for C++ compiler and version...
6749 dnl ===================================================================
6751 if test "$_os" != "WINNT"; then
6752     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6753     save_CXXFLAGS=$CXXFLAGS
6754     AC_PROG_CXX
6755     CXXFLAGS=$save_CXXFLAGS
6756     if test -z "$CXX_BASE"; then
6757         CXX_BASE=`first_arg_basename "$CXX"`
6758     fi
6761 dnl check for GNU C++ compiler version
6762 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6763     AC_MSG_CHECKING([the GNU C++ compiler version])
6765     _gpp_version=`$CXX -dumpversion`
6766     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6768     if test "$_gpp_majmin" -lt "700"; then
6769         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6770     else
6771         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6772     fi
6774     dnl see https://code.google.com/p/android/issues/detail?id=41770
6775         glibcxx_threads=no
6776         AC_LANG_PUSH([C++])
6777         AC_REQUIRE_CPP
6778         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6779         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6780             #include <bits/c++config.h>]],[[
6781             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6782             && !defined(_GLIBCXX__PTHREADS) \
6783             && !defined(_GLIBCXX_HAS_GTHREADS)
6784             choke me
6785             #endif
6786         ]])],[AC_MSG_RESULT([yes])
6787         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6788         AC_LANG_POP([C++])
6789         if test $glibcxx_threads = yes; then
6790             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6791         fi
6793 AC_SUBST(BOOST_CXXFLAGS)
6796 # prefx CXX with ccache if needed
6798 UNCACHED_CXX="$CXX"
6799 if test "$CCACHE" != ""; then
6800     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6801     AC_LANG_PUSH([C++])
6802     save_CXXFLAGS=$CXXFLAGS
6803     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6804     dnl an empty program will do, we're checking the compiler flags
6805     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6806                       [use_ccache=yes], [use_ccache=no])
6807     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6808         AC_MSG_RESULT([yes])
6809     else
6810         CXX="$CCACHE $CXX"
6811         CXX_BASE="ccache $CXX_BASE"
6812         AC_MSG_RESULT([no])
6813     fi
6814     CXXFLAGS=$save_CXXFLAGS
6815     AC_LANG_POP([C++])
6818 dnl ===================================================================
6819 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6820 dnl ===================================================================
6822 if test "$_os" != "WINNT"; then
6823     AC_PROG_CXXCPP
6825     dnl Check whether there's a C pre-processor.
6826     AC_PROG_CPP
6830 dnl ===================================================================
6831 dnl Find integral type sizes and alignments
6832 dnl ===================================================================
6834 if test "$_os" != "WINNT"; then
6836     AC_CHECK_SIZEOF(long)
6837     AC_CHECK_SIZEOF(short)
6838     AC_CHECK_SIZEOF(int)
6839     AC_CHECK_SIZEOF(long long)
6840     AC_CHECK_SIZEOF(double)
6841     AC_CHECK_SIZEOF(void*)
6843     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6844     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6845     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6846     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6847     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6849     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6850     m4_pattern_allow([AC_CHECK_ALIGNOF])
6851     m4_ifdef([AC_CHECK_ALIGNOF],
6852         [
6853             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6854             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6855             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6856             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6857         ],
6858         [
6859             case "$_os-$host_cpu" in
6860             Linux-i686)
6861                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6862                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6863                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6864                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6865                 ;;
6866             Linux-x86_64)
6867                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6868                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6869                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6870                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6871                 ;;
6872             *)
6873                 if test -z "$ac_cv_alignof_short" -o \
6874                         -z "$ac_cv_alignof_int" -o \
6875                         -z "$ac_cv_alignof_long" -o \
6876                         -z "$ac_cv_alignof_double"; then
6877                    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.])
6878                 fi
6879                 ;;
6880             esac
6881         ])
6883     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6884     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6885     if test $ac_cv_sizeof_long -eq 8; then
6886         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6887     elif test $ac_cv_sizeof_double -eq 8; then
6888         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6889     else
6890         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6891     fi
6893     dnl Check for large file support
6894     AC_SYS_LARGEFILE
6895     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6896         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6897     fi
6898     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6899         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6900     fi
6901 else
6902     # Hardcode for MSVC
6903     SAL_TYPES_SIZEOFSHORT=2
6904     SAL_TYPES_SIZEOFINT=4
6905     SAL_TYPES_SIZEOFLONG=4
6906     SAL_TYPES_SIZEOFLONGLONG=8
6907     if test $WIN_HOST_BITS -eq 32; then
6908         SAL_TYPES_SIZEOFPOINTER=4
6909     else
6910         SAL_TYPES_SIZEOFPOINTER=8
6911     fi
6912     SAL_TYPES_ALIGNMENT2=2
6913     SAL_TYPES_ALIGNMENT4=4
6914     SAL_TYPES_ALIGNMENT8=8
6915     LFS_CFLAGS=''
6917 AC_SUBST(LFS_CFLAGS)
6919 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6920 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6921 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6922 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6923 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6924 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6925 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6926 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6928 dnl ===================================================================
6929 dnl Check whether to enable runtime optimizations
6930 dnl ===================================================================
6931 ENABLE_RUNTIME_OPTIMIZATIONS=
6932 AC_MSG_CHECKING([whether to enable runtime optimizations])
6933 if test -z "$enable_runtime_optimizations"; then
6934     for i in $CC; do
6935         case $i in
6936         -fsanitize=*)
6937             enable_runtime_optimizations=no
6938             break
6939             ;;
6940         esac
6941     done
6943 if test "$enable_runtime_optimizations" != no; then
6944     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6945     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6946     AC_MSG_RESULT([yes])
6947 else
6948     AC_MSG_RESULT([no])
6950 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6952 dnl ===================================================================
6953 dnl Check if valgrind headers are available
6954 dnl ===================================================================
6955 ENABLE_VALGRIND=
6956 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6957     prev_cppflags=$CPPFLAGS
6958     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6959     # or where does it come from?
6960     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6961     AC_CHECK_HEADER([valgrind/valgrind.h],
6962         [ENABLE_VALGRIND=TRUE])
6963     CPPFLAGS=$prev_cppflags
6965 AC_SUBST([ENABLE_VALGRIND])
6966 if test -z "$ENABLE_VALGRIND"; then
6967     if test "$with_valgrind" = yes; then
6968         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6969     fi
6970     VALGRIND_CFLAGS=
6972 AC_SUBST([VALGRIND_CFLAGS])
6975 dnl ===================================================================
6976 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6977 dnl ===================================================================
6979 # We need at least the sys/sdt.h include header.
6980 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6981 if test "$SDT_H_FOUND" = "TRUE"; then
6982     # Found sys/sdt.h header, now make sure the c++ compiler works.
6983     # Old g++ versions had problems with probes in constructors/destructors.
6984     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6985     AC_LANG_PUSH([C++])
6986     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6987     #include <sys/sdt.h>
6988     class ProbeClass
6989     {
6990     private:
6991       int& ref;
6992       const char *name;
6994     public:
6995       ProbeClass(int& v, const char *n) : ref(v), name(n)
6996       {
6997         DTRACE_PROBE2(_test_, cons, name, ref);
6998       }
7000       void method(int min)
7001       {
7002         DTRACE_PROBE3(_test_, meth, name, ref, min);
7003         ref -= min;
7004       }
7006       ~ProbeClass()
7007       {
7008         DTRACE_PROBE2(_test_, dest, name, ref);
7009       }
7010     };
7011     ]],[[
7012     int i = 64;
7013     DTRACE_PROBE1(_test_, call, i);
7014     ProbeClass inst = ProbeClass(i, "call");
7015     inst.method(24);
7016     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7017           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7018     AC_LANG_POP([C++])
7020 AC_CONFIG_HEADERS([config_host/config_probes.h])
7022 dnl ===================================================================
7023 dnl GCC features
7024 dnl ===================================================================
7025 HAVE_GCC_STACK_CLASH_PROTECTION=
7026 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7027     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7028     save_CFLAGS=$CFLAGS
7029     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7030     AC_LINK_IFELSE(
7031         [AC_LANG_PROGRAM(, [[return 0;]])],
7032         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7033         [AC_MSG_RESULT([no])])
7034     CFLAGS=$save_CFLAGS
7036     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7037     save_CFLAGS=$CFLAGS
7038     CFLAGS="$CFLAGS -Werror -mno-avx"
7039     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7040     CFLAGS=$save_CFLAGS
7041     if test "$HAVE_GCC_AVX" = "TRUE"; then
7042         AC_MSG_RESULT([yes])
7043     else
7044         AC_MSG_RESULT([no])
7045     fi
7047     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7048     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7049     int v = 0;
7050     if (__sync_add_and_fetch(&v, 1) != 1 ||
7051         __sync_sub_and_fetch(&v, 1) != 0)
7052         return 1;
7053     __sync_synchronize();
7054     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7055         v != 1)
7056         return 1;
7057     return 0;
7058 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7059     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7060         AC_MSG_RESULT([yes])
7061         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7062     else
7063         AC_MSG_RESULT([no])
7064     fi
7066     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7067     AC_LANG_PUSH([C++])
7068     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7069             #include <cstddef>
7070             #include <cxxabi.h>
7071             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7072         ])], [
7073             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7074             AC_MSG_RESULT([yes])
7075         ], [AC_MSG_RESULT([no])])
7076     AC_LANG_POP([C++])
7078     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7079     AC_LANG_PUSH([C++])
7080     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7081             #include <cstddef>
7082             #include <cxxabi.h>
7083             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7084         ])], [
7085             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7086             AC_MSG_RESULT([yes])
7087         ], [AC_MSG_RESULT([no])])
7088     AC_LANG_POP([C++])
7090     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7091     AC_LANG_PUSH([C++])
7092     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7093             #include <cxxabi.h>
7094             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7095         ])], [
7096             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7097             AC_MSG_RESULT([yes])
7098         ], [AC_MSG_RESULT([no])])
7099     AC_LANG_POP([C++])
7101     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7102     AC_LANG_PUSH([C++])
7103     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7104             #include <cstddef>
7105             #include <cxxabi.h>
7106             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7107         ])], [
7108             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7109             AC_MSG_RESULT([yes])
7110         ], [AC_MSG_RESULT([no])])
7111     AC_LANG_POP([C++])
7113     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7114     AC_LANG_PUSH([C++])
7115     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7116             #include <cstddef>
7117             #include <cxxabi.h>
7118             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7119         ])], [
7120             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7121             AC_MSG_RESULT([yes])
7122         ], [AC_MSG_RESULT([no])])
7123     AC_LANG_POP([C++])
7125     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7126     AC_LANG_PUSH([C++])
7127     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7128             #include <cxxabi.h>
7129             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7130         ])], [
7131             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7132             AC_MSG_RESULT([yes])
7133         ], [AC_MSG_RESULT([no])])
7134     AC_LANG_POP([C++])
7136     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7137     AC_LANG_PUSH([C++])
7138     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7139             #include <cxxabi.h>
7140             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7141         ])], [
7142             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7143             AC_MSG_RESULT([yes])
7144         ], [AC_MSG_RESULT([no])])
7145     AC_LANG_POP([C++])
7147     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7148     AC_LANG_PUSH([C++])
7149     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7150             #include <cxxabi.h>
7151             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7152         ])], [
7153             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7154             AC_MSG_RESULT([yes])
7155         ], [AC_MSG_RESULT([no])])
7156     AC_LANG_POP([C++])
7158     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7159     AC_LANG_PUSH([C++])
7160     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7161             #include <cstddef>
7162             #include <cxxabi.h>
7163             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7164         ])], [
7165             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7166             AC_MSG_RESULT([yes])
7167         ], [AC_MSG_RESULT([no])])
7168     AC_LANG_POP([C++])
7170     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7171     AC_LANG_PUSH([C++])
7172     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7173             #include <cstddef>
7174             #include <cxxabi.h>
7175             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7176         ])], [
7177             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7178             AC_MSG_RESULT([yes])
7179         ], [AC_MSG_RESULT([no])])
7180     AC_LANG_POP([C++])
7183 AC_SUBST(HAVE_GCC_AVX)
7184 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7185 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7187 dnl ===================================================================
7188 dnl Identify the C++ library
7189 dnl ===================================================================
7191 AC_MSG_CHECKING([what the C++ library is])
7192 AC_LANG_PUSH([C++])
7193 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7194 #include <utility>
7195 #ifndef __GLIBCXX__
7196 foo bar
7197 #endif
7198 ]])],
7199     [CPP_LIBRARY=GLIBCXX
7200      cpp_library_name="GNU libstdc++"
7201     ],
7202     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7203 #include <utility>
7204 #ifndef _LIBCPP_VERSION
7205 foo bar
7206 #endif
7207 ]])],
7208     [CPP_LIBRARY=LIBCPP
7209      cpp_library_name="LLVM libc++"
7210      AC_DEFINE([HAVE_LIBCXX])
7211     ],
7212     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7213 #include <utility>
7214 #ifndef _MSC_VER
7215 foo bar
7216 #endif
7217 ]])],
7218     [CPP_LIBRARY=MSVCRT
7219      cpp_library_name="Microsoft"
7220     ],
7221     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7222 AC_MSG_RESULT([$cpp_library_name])
7223 AC_LANG_POP([C++])
7225 dnl ===================================================================
7226 dnl Check for gperf
7227 dnl ===================================================================
7228 AC_PATH_PROG(GPERF, gperf)
7229 if test -z "$GPERF"; then
7230     AC_MSG_ERROR([gperf not found but needed. Install it.])
7232 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7233     GPERF=`cygpath -m $GPERF`
7235 AC_MSG_CHECKING([whether gperf is new enough])
7236 my_gperf_ver1=$($GPERF --version | head -n 1)
7237 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7238 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7239 if test "$my_gperf_ver3" -ge 301; then
7240     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7241 else
7242     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7244 AC_SUBST(GPERF)
7246 dnl ===================================================================
7247 dnl Check for system libcmis
7248 dnl ===================================================================
7249 # libcmis requires curl and we can't build curl for iOS
7250 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7251     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7252     ENABLE_LIBCMIS=TRUE
7253 else
7254     ENABLE_LIBCMIS=
7256 AC_SUBST(ENABLE_LIBCMIS)
7258 dnl ===================================================================
7259 dnl C++11
7260 dnl ===================================================================
7262 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7263 CXXFLAGS_CXX11=
7264 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7265     if test "$with_latest_c__" = yes; then
7266         CXXFLAGS_CXX11=-std:c++latest
7267     else
7268         CXXFLAGS_CXX11=-std:c++17
7269     fi
7270     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7271 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7272     my_flags='-std=c++17 -std=c++1z'
7273     if test "$with_latest_c__" = yes; then
7274         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7275     fi
7276     for flag in $my_flags; do
7277         if test "$COM" = MSC; then
7278             flag="-Xclang $flag"
7279         fi
7280         save_CXXFLAGS=$CXXFLAGS
7281         CXXFLAGS="$CXXFLAGS $flag -Werror"
7282         if test "$SYSTEM_LIBCMIS" = TRUE; then
7283             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7284         fi
7285         AC_LANG_PUSH([C++])
7286         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7287             #include <algorithm>
7288             #include <functional>
7289             #include <vector>
7291             #if defined SYSTEM_LIBCMIS
7292             // See ucb/source/ucp/cmis/auth_provider.hxx:
7293             #if !defined __clang__
7294             #pragma GCC diagnostic push
7295             #pragma GCC diagnostic ignored "-Wdeprecated"
7296             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7297             #endif
7298             #include <libcmis/libcmis.hxx>
7299             #if !defined __clang__
7300             #pragma GCC diagnostic pop
7301             #endif
7302             #endif
7304             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7305                 std::sort(v.begin(), v.end(), fn);
7306             }
7307             ]])],[CXXFLAGS_CXX11=$flag])
7308         AC_LANG_POP([C++])
7309         CXXFLAGS=$save_CXXFLAGS
7310         if test -n "$CXXFLAGS_CXX11"; then
7311             break
7312         fi
7313     done
7315 if test -n "$CXXFLAGS_CXX11"; then
7316     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7317 else
7318     AC_MSG_ERROR(no)
7320 AC_SUBST(CXXFLAGS_CXX11)
7322 if test "$GCC" = "yes"; then
7323     save_CXXFLAGS=$CXXFLAGS
7324     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7325     CHECK_L_ATOMIC
7326     CXXFLAGS=$save_CXXFLAGS
7327     AC_SUBST(ATOMIC_LIB)
7330 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7331 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7332 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7333 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7334 dnl again towards 4.7.2:
7335 if test $CPP_LIBRARY = GLIBCXX; then
7336     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7337     AC_LANG_PUSH([C++])
7338     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7339 #include <list>
7340 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7341     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7342     //   GCC 4.7.0: 20120322
7343     //   GCC 4.7.1: 20120614
7344     // and using a range check is not possible as the mapping between
7345     // __GLIBCXX__ values and GCC versions is not monotonic
7346 /* ok */
7347 #else
7348 abi broken
7349 #endif
7350         ]])], [AC_MSG_RESULT(no, ok)],
7351         [AC_MSG_ERROR(yes)])
7352     AC_LANG_POP([C++])
7355 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7356 save_CXXFLAGS=$CXXFLAGS
7357 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7358 AC_LANG_PUSH([C++])
7360 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7361 #include <stddef.h>
7363 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7365 namespace
7367         struct b
7368         {
7369                 int i;
7370                 int j;
7371         };
7373 ]], [[
7374 struct a
7376         int i;
7377         int j;
7379 a thinga[]={{0,0}, {1,1}};
7380 b thingb[]={{0,0}, {1,1}};
7381 size_t i = sizeof(sal_n_array_size(thinga));
7382 size_t j = sizeof(sal_n_array_size(thingb));
7383 return !(i != 0 && j != 0);
7385     ], [ AC_MSG_RESULT(yes) ],
7386     [ AC_MSG_ERROR(no)])
7387 AC_LANG_POP([C++])
7388 CXXFLAGS=$save_CXXFLAGS
7390 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7391 if test "$GCC" = yes; then
7392     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7393     AC_LANG_PUSH([C++])
7394     save_CXXFLAGS=$CXXFLAGS
7395     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7396     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7397     CXXFLAGS=$save_CXXFLAGS
7398     AC_LANG_POP([C++])
7399     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7400         AC_MSG_RESULT([yes])
7401     else
7402         AC_MSG_RESULT([no])
7403     fi
7405 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7407 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
7408 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
7409 dnl from consteval constructor initializing const variable",
7410 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
7411 dnl expression' with consteval constructor", or <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
7412 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
7413 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'":
7414 AC_LANG_PUSH([C++])
7415 save_CXXFLAGS=$CXXFLAGS
7416 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7417 AC_RUN_IFELSE([AC_LANG_PROGRAM([
7418         struct S {
7419             consteval S() { i = 1; }
7420             int i = 0;
7421         };
7422         S const s;
7424         struct S1 { consteval S1(int) {} };
7425         struct S2 {
7426             S1 x;
7427             S2(): x(0) {}
7428         };
7430         struct S3 {
7431             consteval S3() {}
7432             union {
7433                 int a;
7434                 unsigned b = 0;
7435             };
7436         };
7437         void f() { S3(); }
7438     ], [
7439         return (s.i == 1) ? 0 : 1;
7440     ])], [
7441         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
7442         AC_MSG_RESULT([yes])
7443     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
7444 CXXFLAGS=$save_CXXFLAGS
7445 AC_LANG_POP([C++])
7447 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7448 AC_LANG_PUSH([C++])
7449 save_CXXFLAGS=$CXXFLAGS
7450 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7451 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7452         #include <algorithm>
7453         #include <initializer_list>
7454         #include <vector>
7455         template<typename T> class S {
7456         private:
7457             std::vector<T> v_;
7458         public:
7459             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7460         };
7461         constinit S<int> s{3, 2, 1};
7462     ])], [
7463         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7464         AC_MSG_RESULT([yes])
7465     ], [AC_MSG_RESULT([no])])
7466 CXXFLAGS=$save_CXXFLAGS
7467 AC_LANG_POP([C++])
7469 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7470 AC_LANG_PUSH([C++])
7471 save_CXXFLAGS=$CXXFLAGS
7472 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7473 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7474         #include <span>
7475         #include <type_traits>
7476         // Don't check size_type directly, as it was called index_type before P1872R0:
7477         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7478     ])], [
7479         AC_DEFINE([HAVE_CPP_SPAN],[1])
7480         AC_MSG_RESULT([yes])
7481     ], [AC_MSG_RESULT([no])])
7482 CXXFLAGS=$save_CXXFLAGS
7483 AC_LANG_POP([C++])
7485 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7486 AC_LANG_PUSH([C++])
7487 save_CXXFLAGS=$CXXFLAGS
7488 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7489 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7490         struct S1 { S1(S1 &&); };
7491         struct S2: S1 {};
7492         S1 f(S2 s) { return s; }
7493     ])], [
7494         AC_DEFINE([HAVE_P1155R3],[1])
7495         AC_MSG_RESULT([yes])
7496     ], [AC_MSG_RESULT([no])])
7497 CXXFLAGS=$save_CXXFLAGS
7498 AC_LANG_POP([C++])
7500 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7501 dnl which is included in -Wextra anyway):
7502 HAVE_WDEPRECATED_COPY_DTOR=
7503 if test "$GCC" = yes; then
7504     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7505     AC_LANG_PUSH([C++])
7506     save_CXXFLAGS=$CXXFLAGS
7507     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7508     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7509             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7510             AC_MSG_RESULT([yes])
7511         ], [AC_MSG_RESULT([no])])
7512     CXXFLAGS=$save_CXXFLAGS
7513     AC_LANG_POP([C++])
7515 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7517 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7518 dnl uninitialized warning for code like
7520 dnl   OString f();
7521 dnl   boost::optional<OString> * g(bool b) {
7522 dnl       boost::optional<OString> o;
7523 dnl       if (b) o = f();
7524 dnl       return new boost::optional<OString>(o);
7525 dnl   }
7527 dnl (as is e.g. present, in a slightly more elaborate form, in
7528 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7529 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7530 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7531 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7532     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7533     AC_LANG_PUSH([C++])
7534     save_CXXFLAGS=$CXXFLAGS
7535     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7536     if test "$ENABLE_OPTIMIZED" = TRUE; then
7537         CXXFLAGS="$CXXFLAGS -O2"
7538     else
7539         CXXFLAGS="$CXXFLAGS -O0"
7540     fi
7541     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7542             #include <new>
7543             void f1(int);
7544             struct S1 {
7545                 ~S1() { f1(n); }
7546                 int n = 0;
7547             };
7548             struct S2 {
7549                 S2() {}
7550                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7551                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7552                 void set(S1 s) {
7553                     new (stg) S1(s);
7554                     init = true;
7555                 }
7556                 bool init = false;
7557                 char stg[sizeof (S1)];
7558             } ;
7559             S1 f2();
7560             S2 * f3(bool b) {
7561                 S2 o;
7562                 if (b) o.set(f2());
7563                 return new S2(o);
7564             }
7565         ]])], [AC_MSG_RESULT([no])], [
7566             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7567             AC_MSG_RESULT([yes])
7568         ])
7569     CXXFLAGS=$save_CXXFLAGS
7570     AC_LANG_POP([C++])
7572 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7574 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7575 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7576 dnl hits us e.g. with GCC 10 and --enable-optimized at
7578 dnl   In file included from include/rtl/string.hxx:49,
7579 dnl                    from include/rtl/ustring.hxx:43,
7580 dnl                    from include/osl/file.hxx:35,
7581 dnl                    from include/codemaker/global.hxx:28,
7582 dnl                    from include/codemaker/options.hxx:23,
7583 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7584 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7585 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,
7586 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,
7587 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,
7588 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7589 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7590 dnl      78 |         memcpy( buffer, data, length );
7591 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7592 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7593 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7594     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7595     AC_LANG_PUSH([C++])
7596     save_CXXFLAGS=$CXXFLAGS
7597     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7598     if test "$ENABLE_OPTIMIZED" = TRUE; then
7599         CXXFLAGS="$CXXFLAGS -O2"
7600     else
7601         CXXFLAGS="$CXXFLAGS -O0"
7602     fi
7603     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7604     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7605             void fill(char const * begin, char const * end, char c);
7606             struct q {
7607                 char ids[4];
7608                 char username[6];
7609             };
7610             void test(q & c) {
7611                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7612                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7613             }
7614         ]])], [AC_MSG_RESULT([no])], [
7615             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7616             AC_MSG_RESULT([yes])
7617         ])
7618     CXXFLAGS=$save_CXXFLAGS
7619     AC_LANG_POP([C++])
7621 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7623 dnl ===================================================================
7624 dnl CPU Intrinsics support - SSE, AVX
7625 dnl ===================================================================
7627 CXXFLAGS_INTRINSICS_SSE2=
7628 CXXFLAGS_INTRINSICS_SSSE3=
7629 CXXFLAGS_INTRINSICS_SSE41=
7630 CXXFLAGS_INTRINSICS_SSE42=
7631 CXXFLAGS_INTRINSICS_AVX=
7632 CXXFLAGS_INTRINSICS_AVX2=
7633 CXXFLAGS_INTRINSICS_AVX512=
7634 CXXFLAGS_INTRINSICS_F16C=
7635 CXXFLAGS_INTRINSICS_FMA=
7637 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7638     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
7639     flag_sse2=-msse2
7640     flag_ssse3=-mssse3
7641     flag_sse41=-msse4.1
7642     flag_sse42=-msse4.2
7643     flag_avx=-mavx
7644     flag_avx2=-mavx2
7645     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
7646     flag_f16c=-mf16c
7647     flag_fma=-mfma
7648 else
7649     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7650     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7651     # SSE2 seems to be SSE2+.
7652     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7653     # is not empty (and can be tested in gbuild).
7654     flag_sse2=-arch:SSE2
7655     flag_ssse3=-arch:SSE2
7656     flag_sse41=-arch:SSE2
7657     flag_sse42=-arch:SSE2
7658     flag_avx=-arch:AVX
7659     flag_avx2=-arch:AVX2
7660     flag_avx512=-arch:AVX512
7661     # These are part of -arch:AVX2
7662     flag_f16c=-arch:AVX2
7663     flag_fma=-arch:AVX2
7666 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7667 AC_LANG_PUSH([C++])
7668 save_CXXFLAGS=$CXXFLAGS
7669 CXXFLAGS="$CXXFLAGS $flag_sse2"
7670 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7671     #include <emmintrin.h>
7672     int main () {
7673         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7674         c = _mm_xor_si128 (a, b);
7675         return 0;
7676     }
7677     ])],
7678     [can_compile_sse2=yes],
7679     [can_compile_sse2=no])
7680 AC_LANG_POP([C++])
7681 CXXFLAGS=$save_CXXFLAGS
7682 AC_MSG_RESULT([${can_compile_sse2}])
7683 if test "${can_compile_sse2}" = "yes" ; then
7684     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7687 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7688 AC_LANG_PUSH([C++])
7689 save_CXXFLAGS=$CXXFLAGS
7690 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7691 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7692     #include <tmmintrin.h>
7693     int main () {
7694         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7695         c = _mm_maddubs_epi16 (a, b);
7696         return 0;
7697     }
7698     ])],
7699     [can_compile_ssse3=yes],
7700     [can_compile_ssse3=no])
7701 AC_LANG_POP([C++])
7702 CXXFLAGS=$save_CXXFLAGS
7703 AC_MSG_RESULT([${can_compile_ssse3}])
7704 if test "${can_compile_ssse3}" = "yes" ; then
7705     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7708 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7709 AC_LANG_PUSH([C++])
7710 save_CXXFLAGS=$CXXFLAGS
7711 CXXFLAGS="$CXXFLAGS $flag_sse41"
7712 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7713     #include <smmintrin.h>
7714     int main () {
7715         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7716         c = _mm_cmpeq_epi64 (a, b);
7717         return 0;
7718     }
7719     ])],
7720     [can_compile_sse41=yes],
7721     [can_compile_sse41=no])
7722 AC_LANG_POP([C++])
7723 CXXFLAGS=$save_CXXFLAGS
7724 AC_MSG_RESULT([${can_compile_sse41}])
7725 if test "${can_compile_sse41}" = "yes" ; then
7726     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7729 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7730 AC_LANG_PUSH([C++])
7731 save_CXXFLAGS=$CXXFLAGS
7732 CXXFLAGS="$CXXFLAGS $flag_sse42"
7733 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7734     #include <nmmintrin.h>
7735     int main () {
7736         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7737         c = _mm_cmpgt_epi64 (a, b);
7738         return 0;
7739     }
7740     ])],
7741     [can_compile_sse42=yes],
7742     [can_compile_sse42=no])
7743 AC_LANG_POP([C++])
7744 CXXFLAGS=$save_CXXFLAGS
7745 AC_MSG_RESULT([${can_compile_sse42}])
7746 if test "${can_compile_sse42}" = "yes" ; then
7747     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7750 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7751 AC_LANG_PUSH([C++])
7752 save_CXXFLAGS=$CXXFLAGS
7753 CXXFLAGS="$CXXFLAGS $flag_avx"
7754 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7755     #include <immintrin.h>
7756     int main () {
7757         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7758         c = _mm256_xor_ps(a, b);
7759         return 0;
7760     }
7761     ])],
7762     [can_compile_avx=yes],
7763     [can_compile_avx=no])
7764 AC_LANG_POP([C++])
7765 CXXFLAGS=$save_CXXFLAGS
7766 AC_MSG_RESULT([${can_compile_avx}])
7767 if test "${can_compile_avx}" = "yes" ; then
7768     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7771 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7772 AC_LANG_PUSH([C++])
7773 save_CXXFLAGS=$CXXFLAGS
7774 CXXFLAGS="$CXXFLAGS $flag_avx2"
7775 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7776     #include <immintrin.h>
7777     int main () {
7778         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7779         c = _mm256_maddubs_epi16(a, b);
7780         return 0;
7781     }
7782     ])],
7783     [can_compile_avx2=yes],
7784     [can_compile_avx2=no])
7785 AC_LANG_POP([C++])
7786 CXXFLAGS=$save_CXXFLAGS
7787 AC_MSG_RESULT([${can_compile_avx2}])
7788 if test "${can_compile_avx2}" = "yes" ; then
7789     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7792 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7793 AC_LANG_PUSH([C++])
7794 save_CXXFLAGS=$CXXFLAGS
7795 CXXFLAGS="$CXXFLAGS $flag_avx512"
7796 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7797     #include <immintrin.h>
7798     int main () {
7799         __m512i a = _mm512_loadu_si512(0);
7800         return 0;
7801     }
7802     ])],
7803     [can_compile_avx512=yes],
7804     [can_compile_avx512=no])
7805 AC_LANG_POP([C++])
7806 CXXFLAGS=$save_CXXFLAGS
7807 AC_MSG_RESULT([${can_compile_avx512}])
7808 if test "${can_compile_avx512}" = "yes" ; then
7809     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7812 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7813 AC_LANG_PUSH([C++])
7814 save_CXXFLAGS=$CXXFLAGS
7815 CXXFLAGS="$CXXFLAGS $flag_f16c"
7816 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7817     #include <immintrin.h>
7818     int main () {
7819         __m128i a = _mm_set1_epi32 (0);
7820         __m128 c;
7821         c = _mm_cvtph_ps(a);
7822         return 0;
7823     }
7824     ])],
7825     [can_compile_f16c=yes],
7826     [can_compile_f16c=no])
7827 AC_LANG_POP([C++])
7828 CXXFLAGS=$save_CXXFLAGS
7829 AC_MSG_RESULT([${can_compile_f16c}])
7830 if test "${can_compile_f16c}" = "yes" ; then
7831     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7834 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7835 AC_LANG_PUSH([C++])
7836 save_CXXFLAGS=$CXXFLAGS
7837 CXXFLAGS="$CXXFLAGS $flag_fma"
7838 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7839     #include <immintrin.h>
7840     int main () {
7841         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7842         d = _mm256_fmadd_ps(a, b, c);
7843         return 0;
7844     }
7845     ])],
7846     [can_compile_fma=yes],
7847     [can_compile_fma=no])
7848 AC_LANG_POP([C++])
7849 CXXFLAGS=$save_CXXFLAGS
7850 AC_MSG_RESULT([${can_compile_fma}])
7851 if test "${can_compile_fma}" = "yes" ; then
7852     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7855 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7856 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7857 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7858 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7859 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7860 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7861 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7862 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7863 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7865 dnl ===================================================================
7866 dnl system stl sanity tests
7867 dnl ===================================================================
7868 if test "$_os" != "WINNT"; then
7870     AC_LANG_PUSH([C++])
7872     save_CPPFLAGS="$CPPFLAGS"
7873     if test -n "$MACOSX_SDK_PATH"; then
7874         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7875     fi
7877     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7878     # only.
7879     if test "$CPP_LIBRARY" = GLIBCXX; then
7880         dnl gcc#19664, gcc#22482, rhbz#162935
7881         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7882         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7883         AC_MSG_RESULT([$stlvisok])
7884         if test "$stlvisok" = "no"; then
7885             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7886         fi
7887     fi
7889     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7890     # when we don't make any dynamic libraries?
7891     if test "$DISABLE_DYNLOADING" = ""; then
7892         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7893         cat > conftestlib1.cc <<_ACEOF
7894 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7895 struct S2: S1<int> { virtual ~S2(); };
7896 S2::~S2() {}
7897 _ACEOF
7898         cat > conftestlib2.cc <<_ACEOF
7899 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7900 struct S2: S1<int> { virtual ~S2(); };
7901 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7902 _ACEOF
7903         gccvisinlineshiddenok=yes
7904         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7905             gccvisinlineshiddenok=no
7906         else
7907             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7908             dnl known to not work with -z defs (unsetting which makes the test
7909             dnl moot, though):
7910             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7911             if test "$COM_IS_CLANG" = TRUE; then
7912                 for i in $CXX $CXXFLAGS; do
7913                     case $i in
7914                     -fsanitize=*)
7915                         my_linkflagsnoundefs=
7916                         break
7917                         ;;
7918                     esac
7919                 done
7920             fi
7921             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7922                 gccvisinlineshiddenok=no
7923             fi
7924         fi
7926         rm -fr libconftest*
7927         AC_MSG_RESULT([$gccvisinlineshiddenok])
7928         if test "$gccvisinlineshiddenok" = "no"; then
7929             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7930         fi
7931     fi
7933    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7934     cat >visibility.cxx <<_ACEOF
7935 #pragma GCC visibility push(hidden)
7936 struct __attribute__ ((visibility ("default"))) TestStruct {
7937   static void Init();
7939 __attribute__ ((visibility ("default"))) void TestFunc() {
7940   TestStruct::Init();
7942 _ACEOF
7943     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7944         gccvisbroken=yes
7945     else
7946         case "$host_cpu" in
7947         i?86|x86_64)
7948             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7949                 gccvisbroken=no
7950             else
7951                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7952                     gccvisbroken=no
7953                 else
7954                     gccvisbroken=yes
7955                 fi
7956             fi
7957             ;;
7958         *)
7959             gccvisbroken=no
7960             ;;
7961         esac
7962     fi
7963     rm -f visibility.s visibility.cxx
7965     AC_MSG_RESULT([$gccvisbroken])
7966     if test "$gccvisbroken" = "yes"; then
7967         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7968     fi
7970     CPPFLAGS="$save_CPPFLAGS"
7972     AC_LANG_POP([C++])
7975 dnl ===================================================================
7976 dnl  Clang++ tests
7977 dnl ===================================================================
7979 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
7980 if test "$GCC" = "yes"; then
7981     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
7982     AC_LANG_PUSH([C++])
7983     save_CXXFLAGS=$CXXFLAGS
7984     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
7985     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
7986     CXXFLAGS=$save_CXXFLAGS
7987     AC_LANG_POP([C++])
7988     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
7989         AC_MSG_RESULT([yes])
7990     else
7991         AC_MSG_RESULT([no])
7992     fi
7994 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
7996 dnl ===================================================================
7997 dnl Compiler plugins
7998 dnl ===================================================================
8000 COMPILER_PLUGINS=
8001 # currently only Clang
8003 if test "$COM_IS_CLANG" != "TRUE"; then
8004     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8005         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8006         enable_compiler_plugins=no
8007     fi
8010 COMPILER_PLUGINS_COM_IS_CLANG=
8011 if test "$COM_IS_CLANG" = "TRUE"; then
8012     if test -n "$enable_compiler_plugins"; then
8013         compiler_plugins="$enable_compiler_plugins"
8014     elif test -n "$ENABLE_DBGUTIL"; then
8015         compiler_plugins=test
8016     else
8017         compiler_plugins=no
8018     fi
8019     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8020         if test "$CLANGVER" -lt 50002; then
8021             if test "$compiler_plugins" = yes; then
8022                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8023             else
8024                 compiler_plugins=no
8025             fi
8026         fi
8027     fi
8028     if test "$compiler_plugins" != "no"; then
8029         dnl The prefix where Clang resides, override to where Clang resides if
8030         dnl using a source build:
8031         if test -z "$CLANGDIR"; then
8032             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8033         fi
8034         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8035         if test -z "$COMPILER_PLUGINS_CXX"; then
8036             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8037         fi
8038         clangbindir=$CLANGDIR/bin
8039         if test "$build_os" = "cygwin"; then
8040             clangbindir=$(cygpath -u "$clangbindir")
8041         fi
8042         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8043         if test -n "$LLVM_CONFIG"; then
8044             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8045             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8046             if test -z "$CLANGLIBDIR"; then
8047                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8048             fi
8049             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8050             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8051             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8052             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8053                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8054             fi
8055             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8056             clangobjdir=$($LLVM_CONFIG --obj-root)
8057             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8058                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8059             fi
8060         fi
8061         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8062         AC_LANG_PUSH([C++])
8063         save_CXX=$CXX
8064         save_CXXCPP=$CXXCPP
8065         save_CPPFLAGS=$CPPFLAGS
8066         save_CXXFLAGS=$CXXFLAGS
8067         save_LDFLAGS=$LDFLAGS
8068         save_LIBS=$LIBS
8069         CXX=$COMPILER_PLUGINS_CXX
8070         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8071         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8072         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8073         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8074             [COMPILER_PLUGINS=TRUE],
8075             [
8076             if test "$compiler_plugins" = "yes"; then
8077                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8078             else
8079                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8080                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8081             fi
8082             ])
8083         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8084         dnl comment in compilerplugins/Makefile-clang.mk:
8085         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8086             LDFLAGS=""
8087             AC_MSG_CHECKING([for clang libraries to use])
8088             if test -z "$CLANGTOOLLIBS"; then
8089                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8090  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8091                 AC_LINK_IFELSE([
8092                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8093                         [[ clang::FullSourceLoc().dump(); ]])
8094                 ],[CLANGTOOLLIBS="$LIBS"],[])
8095             fi
8096             if test -z "$CLANGTOOLLIBS"; then
8097                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8098                 AC_LINK_IFELSE([
8099                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8100                         [[ clang::FullSourceLoc().dump(); ]])
8101                 ],[CLANGTOOLLIBS="$LIBS"],[])
8102             fi
8103             AC_MSG_RESULT([$CLANGTOOLLIBS])
8104             if test -z "$CLANGTOOLLIBS"; then
8105                 if test "$compiler_plugins" = "yes"; then
8106                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8107                 else
8108                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8109                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8110                 fi
8111                 COMPILER_PLUGINS=
8112             fi
8113             if test -n "$COMPILER_PLUGINS"; then
8114                 if test -z "$CLANGSYSINCLUDE"; then
8115                     if test -n "$LLVM_CONFIG"; then
8116                         # Path to the clang system headers (no idea if there's a better way to get it).
8117                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8118                     fi
8119                 fi
8120             fi
8121         fi
8122         CXX=$save_CXX
8123         CXXCPP=$save_CXXCPP
8124         CPPFLAGS=$save_CPPFLAGS
8125         CXXFLAGS=$save_CXXFLAGS
8126         LDFLAGS=$save_LDFLAGS
8127         LIBS="$save_LIBS"
8128         AC_LANG_POP([C++])
8130         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8131         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8132             #ifndef __clang__
8133             you lose
8134             #endif
8135             int foo=42;
8136             ]])],
8137             [AC_MSG_RESULT([yes])
8138              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8139             [AC_MSG_RESULT([no])])
8140         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8141     fi
8142 else
8143     if test "$enable_compiler_plugins" = "yes"; then
8144         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8145     fi
8147 COMPILER_PLUGINS_ANALYZER_PCH=
8148 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8149     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8151 AC_SUBST(COMPILER_PLUGINS)
8152 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8153 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8154 AC_SUBST(COMPILER_PLUGINS_CXX)
8155 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8156 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8157 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8158 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8159 AC_SUBST(CLANGDIR)
8160 AC_SUBST(CLANGLIBDIR)
8161 AC_SUBST(CLANGTOOLLIBS)
8162 AC_SUBST(CLANGSYSINCLUDE)
8164 # Plugin to help linker.
8165 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8166 # This makes --enable-lto build with clang work.
8167 AC_SUBST(LD_PLUGIN)
8169 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8170 AC_SUBST(HAVE_POSIX_FALLOCATE)
8172 JITC_PROCESSOR_TYPE=""
8173 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8174     # IBMs JDK needs this...
8175     JITC_PROCESSOR_TYPE=6
8176     export JITC_PROCESSOR_TYPE
8178 AC_SUBST([JITC_PROCESSOR_TYPE])
8180 # Misc Windows Stuff
8181 AC_ARG_WITH(ucrt-dir,
8182     AS_HELP_STRING([--with-ucrt-dir],
8183         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8184         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8185         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8186             Windows6.1-KB2999226-x64.msu
8187             Windows6.1-KB2999226-x86.msu
8188             Windows8.1-KB2999226-x64.msu
8189             Windows8.1-KB2999226-x86.msu
8190             Windows8-RT-KB2999226-x64.msu
8191             Windows8-RT-KB2999226-x86.msu
8192         A zip archive including those files is available from Microsoft site:
8193         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8196 UCRT_REDISTDIR="$with_ucrt_dir"
8197 if test $_os = "WINNT"; then
8198     find_msvc_x64_dlls
8199     for i in $PKGFORMAT; do
8200         if test "$i" = msi; then
8201             find_msms
8202             break
8203         fi
8204     done
8205     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8206     MSVC_DLLS="$msvcdlls"
8207     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8208     # MSVC 15.3 changed it to VC141
8209     if echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8210         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8211     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8212         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8213     else
8214         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8215     fi
8217     if test "$UCRT_REDISTDIR" = "no"; then
8218         dnl explicitly disabled
8219         UCRT_REDISTDIR=""
8220     else
8221         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8222                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8223                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8224                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8225                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8226                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8227             UCRT_REDISTDIR=""
8228             if test -n "$PKGFORMAT"; then
8229                for i in $PKGFORMAT; do
8230                    case "$i" in
8231                    msi)
8232                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8233                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8234                        ;;
8235                    esac
8236                done
8237             fi
8238         fi
8239     fi
8242 AC_SUBST(UCRT_REDISTDIR)
8243 AC_SUBST(MSVC_DLL_PATH)
8244 AC_SUBST(MSVC_DLLS)
8245 AC_SUBST(MSM_PATH)
8248 dnl ===================================================================
8249 dnl Checks for Java
8250 dnl ===================================================================
8251 if test "$ENABLE_JAVA" != ""; then
8253     # Windows-specific tests
8254     if test "$build_os" = "cygwin"; then
8255         if test -z "$with_jdk_home"; then
8256             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8257             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8258             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8259             if test -n "$regvalue"; then
8260                 ver=$regvalue
8261                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8262                 with_jdk_home=$regvalue
8263             fi
8264             howfound="found automatically"
8265         else
8266             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8267             howfound="you passed"
8268         fi
8270         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8271             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])
8272         fi
8273     fi
8275     # 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.
8276     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8277     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8278         with_jdk_home=`/usr/libexec/java_home`
8279     fi
8281     JAVA_HOME=; export JAVA_HOME
8282     if test -z "$with_jdk_home"; then
8283         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8284     else
8285         _java_path="$with_jdk_home/bin/$with_java"
8286         dnl Check if there is a Java interpreter at all.
8287         if test -x "$_java_path"; then
8288             JAVAINTERPRETER=$_java_path
8289         else
8290             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8291         fi
8292     fi
8294     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8295     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8296     dnl loaded by java to run JunitTests:
8297     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8298         shortjdkhome=`cygpath -d "$with_jdk_home"`
8299         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
8300             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8301             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8302         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
8303             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8304             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8305         fi
8307         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8308             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8309         fi
8310         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8311     elif test "$cross_compiling" != "yes"; then
8312         case $CPUNAME in
8313             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8314                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8315                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8316                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8317                 fi
8318                 ;;
8319             *) # assumption: everything else 32-bit
8320                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8321                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8322                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8323                 fi
8324                 ;;
8325         esac
8326     fi
8329 dnl ===================================================================
8330 dnl Checks for JDK.
8331 dnl ===================================================================
8333 # Whether all the complexity here actually is needed any more or not, no idea.
8335 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8336     _gij_longver=0
8337     AC_MSG_CHECKING([the installed JDK])
8338     if test -n "$JAVAINTERPRETER"; then
8339         dnl java -version sends output to stderr!
8340         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8341             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8342         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8343             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8344         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8345             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8346         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8347             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8348         else
8349             JDK=sun
8351             dnl Sun JDK specific tests
8352             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8353             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8355             if test "$_jdk_ver" -lt 10900; then
8356                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8357             fi
8358             if test "$_jdk_ver" -gt 10900; then
8359                 JAVA_CLASSPATH_NOT_SET=TRUE
8360             fi
8362             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8363             if test "$_os" = "WINNT"; then
8364                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8365             fi
8366             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8368             # set to limit VM usage for JunitTests
8369             JAVAIFLAGS=-Xmx64M
8370             # set to limit VM usage for javac
8371             JAVACFLAGS=-J-Xmx128M
8372         fi
8373     else
8374         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8375     fi
8376 else
8377     if test -z "$ENABLE_JAVA"; then
8378         dnl Java disabled
8379         JAVA_HOME=
8380         export JAVA_HOME
8381     elif test "$cross_compiling" = "yes"; then
8382         # Just assume compatibility of build and host JDK
8383         JDK=$JDK_FOR_BUILD
8384         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8385     fi
8388 dnl ===================================================================
8389 dnl Checks for javac
8390 dnl ===================================================================
8391 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8392     javacompiler="javac"
8393     : ${JAVA_SOURCE_VER=8}
8394     : ${JAVA_TARGET_VER=8}
8395     if test -z "$with_jdk_home"; then
8396         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8397     else
8398         _javac_path="$with_jdk_home/bin/$javacompiler"
8399         dnl Check if there is a Java compiler at all.
8400         if test -x "$_javac_path"; then
8401             JAVACOMPILER=$_javac_path
8402         fi
8403     fi
8404     if test -z "$JAVACOMPILER"; then
8405         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8406     fi
8407     if test "$build_os" = "cygwin"; then
8408         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8409             JAVACOMPILER="${JAVACOMPILER}.exe"
8410         fi
8411         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8412     fi
8415 dnl ===================================================================
8416 dnl Checks for javadoc
8417 dnl ===================================================================
8418 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8419     if test -z "$with_jdk_home"; then
8420         AC_PATH_PROG(JAVADOC, javadoc)
8421     else
8422         _javadoc_path="$with_jdk_home/bin/javadoc"
8423         dnl Check if there is a javadoc at all.
8424         if test -x "$_javadoc_path"; then
8425             JAVADOC=$_javadoc_path
8426         else
8427             AC_PATH_PROG(JAVADOC, javadoc)
8428         fi
8429     fi
8430     if test -z "$JAVADOC"; then
8431         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8432     fi
8433     if test "$build_os" = "cygwin"; then
8434         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8435             JAVADOC="${JAVADOC}.exe"
8436         fi
8437         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8438     fi
8440     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8441     JAVADOCISGJDOC="yes"
8442     fi
8444 AC_SUBST(JAVADOC)
8445 AC_SUBST(JAVADOCISGJDOC)
8447 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8448     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8449     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8450         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8451            # try to recover first by looking whether we have an alternative
8452            # system as in Debian or newer SuSEs where following /usr/bin/javac
8453            # over /etc/alternatives/javac leads to the right bindir where we
8454            # just need to strip a bit away to get a valid JAVA_HOME
8455            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8456         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8457             # maybe only one level of symlink (e.g. on Mac)
8458             JAVA_HOME=$(readlink $JAVACOMPILER)
8459             if test "$(dirname $JAVA_HOME)" = "."; then
8460                 # we've got no path to trim back
8461                 JAVA_HOME=""
8462             fi
8463         else
8464             # else warn
8465             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8466             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8467             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8468             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8469         fi
8470         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8471         if test "$JAVA_HOME" != "/usr"; then
8472             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8473                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8474                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8475                 dnl Tiger already returns a JDK path...
8476                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8477             else
8478                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8479                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8480                 dnl that checks which version to run
8481                 if test -f "$JAVA_HOME"; then
8482                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8483                 fi
8484             fi
8485         fi
8486     fi
8487     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8489     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8490     if test -z "$JAVA_HOME"; then
8491         if test "x$with_jdk_home" = "x"; then
8492             cat > findhome.java <<_ACEOF
8493 [import java.io.File;
8495 class findhome
8497     public static void main(String args[])
8498     {
8499         String jrelocation = System.getProperty("java.home");
8500         File jre = new File(jrelocation);
8501         System.out.println(jre.getParent());
8502     }
8504 _ACEOF
8505             AC_MSG_CHECKING([if javac works])
8506             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8507             AC_TRY_EVAL(javac_cmd)
8508             if test $? = 0 -a -f ./findhome.class; then
8509                 AC_MSG_RESULT([javac works])
8510             else
8511                 echo "configure: javac test failed" >&5
8512                 cat findhome.java >&5
8513                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8514             fi
8515             AC_MSG_CHECKING([if gij knows its java.home])
8516             JAVA_HOME=`$JAVAINTERPRETER findhome`
8517             if test $? = 0 -a "$JAVA_HOME" != ""; then
8518                 AC_MSG_RESULT([$JAVA_HOME])
8519             else
8520                 echo "configure: java test failed" >&5
8521                 cat findhome.java >&5
8522                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8523             fi
8524             # clean-up after ourselves
8525             rm -f ./findhome.java ./findhome.class
8526         else
8527             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8528         fi
8529     fi
8531     # now check if $JAVA_HOME is really valid
8532     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8533         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8534             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8535             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8536             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8537             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8538             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8539             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8540         fi
8541     fi
8542     PathFormat "$JAVA_HOME"
8543     JAVA_HOME="$formatted_path"
8546 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8547     "$_os" != Darwin
8548 then
8549     AC_MSG_CHECKING([for JAWT lib])
8550     if test "$_os" = WINNT; then
8551         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8552         JAWTLIB=jawt.lib
8553     else
8554         case "$host_cpu" in
8555         arm*)
8556             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8557             JAVA_ARCH=$my_java_arch
8558             ;;
8559         i*86)
8560             my_java_arch=i386
8561             ;;
8562         m68k)
8563             my_java_arch=m68k
8564             ;;
8565         powerpc)
8566             my_java_arch=ppc
8567             ;;
8568         powerpc64)
8569             my_java_arch=ppc64
8570             ;;
8571         powerpc64le)
8572             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8573             JAVA_ARCH=$my_java_arch
8574             ;;
8575         sparc64)
8576             my_java_arch=sparcv9
8577             ;;
8578         x86_64)
8579             my_java_arch=amd64
8580             ;;
8581         *)
8582             my_java_arch=$host_cpu
8583             ;;
8584         esac
8585         # This is where JDK9 puts the library
8586         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8587             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8588         else
8589             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8590         fi
8591         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8592     fi
8593     AC_MSG_RESULT([$JAWTLIB])
8595 AC_SUBST(JAWTLIB)
8597 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8598     case "$host_os" in
8600     aix*)
8601         JAVAINC="-I$JAVA_HOME/include"
8602         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8603         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8604         ;;
8606     cygwin*|wsl*)
8607         JAVAINC="-I$JAVA_HOME/include/win32"
8608         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8609         ;;
8611     darwin*|macos*)
8612         if test -d "$JAVA_HOME/include/darwin"; then
8613             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8614         else
8615             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8616         fi
8617         ;;
8619     dragonfly*)
8620         JAVAINC="-I$JAVA_HOME/include"
8621         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8622         ;;
8624     freebsd*)
8625         JAVAINC="-I$JAVA_HOME/include"
8626         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8627         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
8628         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8629         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8630         ;;
8632     k*bsd*-gnu*)
8633         JAVAINC="-I$JAVA_HOME/include"
8634         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8635         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8636         ;;
8638     linux-gnu*)
8639         JAVAINC="-I$JAVA_HOME/include"
8640         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8641         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8642         ;;
8644     *netbsd*)
8645         JAVAINC="-I$JAVA_HOME/include"
8646         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8647         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8648        ;;
8650     openbsd*)
8651         JAVAINC="-I$JAVA_HOME/include"
8652         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8653         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8654         ;;
8656     solaris*)
8657         JAVAINC="-I$JAVA_HOME/include"
8658         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8659         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8660         ;;
8661     esac
8663 SOLARINC="$SOLARINC $JAVAINC"
8665 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8666     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8667     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8668     JDK_FOR_BUILD=$JDK
8671 AC_SUBST(JAVACFLAGS)
8672 AC_SUBST(JAVACOMPILER)
8673 AC_SUBST(JAVAINTERPRETER)
8674 AC_SUBST(JAVAIFLAGS)
8675 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8676 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8677 AC_SUBST(JAVA_HOME)
8678 AC_SUBST(JAVA_HOME_FOR_BUILD)
8679 AC_SUBST(JDK)
8680 AC_SUBST(JDK_FOR_BUILD)
8681 AC_SUBST(JAVA_SOURCE_VER)
8682 AC_SUBST(JAVA_TARGET_VER)
8685 dnl ===================================================================
8686 dnl Export file validation
8687 dnl ===================================================================
8688 AC_MSG_CHECKING([whether to enable export file validation])
8689 if test "$with_export_validation" != "no"; then
8690     if test -z "$ENABLE_JAVA"; then
8691         if test "$with_export_validation" = "yes"; then
8692             AC_MSG_ERROR([requested, but Java is disabled])
8693         else
8694             AC_MSG_RESULT([no, as Java is disabled])
8695         fi
8696     elif ! test -d "${SRC_ROOT}/schema"; then
8697         if test "$with_export_validation" = "yes"; then
8698             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8699         else
8700             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8701         fi
8702     else
8703         AC_MSG_RESULT([yes])
8704         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8706         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8707         if test -z "$ODFVALIDATOR"; then
8708             # remember to download the ODF toolkit with validator later
8709             AC_MSG_NOTICE([no odfvalidator found, will download it])
8710             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8711             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8713             # and fetch name of odfvalidator jar name from download.lst
8714             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8715             AC_SUBST(ODFVALIDATOR_JAR)
8717             if test -z "$ODFVALIDATOR_JAR"; then
8718                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8719             fi
8720         fi
8721         if test "$build_os" = "cygwin"; then
8722             # In case of Cygwin it will be executed from Windows,
8723             # so we need to run bash and absolute path to validator
8724             # so instead of "odfvalidator" it will be
8725             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8726             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8727         else
8728             ODFVALIDATOR="sh $ODFVALIDATOR"
8729         fi
8730         AC_SUBST(ODFVALIDATOR)
8733         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8734         if test -z "$OFFICEOTRON"; then
8735             # remember to download the officeotron with validator later
8736             AC_MSG_NOTICE([no officeotron found, will download it])
8737             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8738             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8740             # and fetch name of officeotron jar name from download.lst
8741             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8742             AC_SUBST(OFFICEOTRON_JAR)
8744             if test -z "$OFFICEOTRON_JAR"; then
8745                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8746             fi
8747         else
8748             # check version of existing officeotron
8749             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8750             if test 0"$OFFICEOTRON_VER" -lt 704; then
8751                 AC_MSG_ERROR([officeotron too old])
8752             fi
8753         fi
8754         if test "$build_os" = "cygwin"; then
8755             # In case of Cygwin it will be executed from Windows,
8756             # so we need to run bash and absolute path to validator
8757             # so instead of "odfvalidator" it will be
8758             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8759             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8760         else
8761             OFFICEOTRON="sh $OFFICEOTRON"
8762         fi
8763     fi
8764     AC_SUBST(OFFICEOTRON)
8765 else
8766     AC_MSG_RESULT([no])
8769 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8770 if test "$with_bffvalidator" != "no"; then
8771     AC_DEFINE(HAVE_BFFVALIDATOR)
8773     if test "$with_export_validation" = "no"; then
8774         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8775     fi
8777     if test "$with_bffvalidator" = "yes"; then
8778         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8779     else
8780         BFFVALIDATOR="$with_bffvalidator"
8781     fi
8783     if test "$build_os" = "cygwin"; then
8784         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8785             AC_MSG_RESULT($BFFVALIDATOR)
8786         else
8787             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8788         fi
8789     elif test -n "$BFFVALIDATOR"; then
8790         # We are not in Cygwin but need to run Windows binary with wine
8791         AC_PATH_PROGS(WINE, wine)
8793         # so swap in a shell wrapper that converts paths transparently
8794         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8795         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8796         AC_SUBST(BFFVALIDATOR_EXE)
8797         AC_MSG_RESULT($BFFVALIDATOR)
8798     else
8799         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8800     fi
8801     AC_SUBST(BFFVALIDATOR)
8802 else
8803     AC_MSG_RESULT([no])
8806 dnl ===================================================================
8807 dnl Check for C preprocessor to use
8808 dnl ===================================================================
8809 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8810 if test -n "$with_idlc_cpp"; then
8811     AC_MSG_RESULT([$with_idlc_cpp])
8812     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8813 else
8814     AC_MSG_RESULT([ucpp])
8815     AC_MSG_CHECKING([which ucpp tp use])
8816     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8817         AC_MSG_RESULT([external])
8818         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8819     else
8820         AC_MSG_RESULT([internal])
8821         BUILD_TYPE="$BUILD_TYPE UCPP"
8822     fi
8824 AC_SUBST(SYSTEM_UCPP)
8826 dnl ===================================================================
8827 dnl Check for epm (not needed for Windows)
8828 dnl ===================================================================
8829 AC_MSG_CHECKING([whether to enable EPM for packing])
8830 if test "$enable_epm" = "yes"; then
8831     AC_MSG_RESULT([yes])
8832     if test "$_os" != "WINNT"; then
8833         if test $_os = Darwin; then
8834             EPM=internal
8835         elif test -n "$with_epm"; then
8836             EPM=$with_epm
8837         else
8838             AC_PATH_PROG(EPM, epm, no)
8839         fi
8840         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8841             AC_MSG_NOTICE([EPM will be built.])
8842             BUILD_TYPE="$BUILD_TYPE EPM"
8843             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8844         else
8845             # Gentoo has some epm which is something different...
8846             AC_MSG_CHECKING([whether the found epm is the right epm])
8847             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8848                 AC_MSG_RESULT([yes])
8849             else
8850                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8851             fi
8852             AC_MSG_CHECKING([epm version])
8853             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8854             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8855                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8856                 AC_MSG_RESULT([OK, >= 3.7])
8857             else
8858                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8859                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8860             fi
8861         fi
8862     fi
8864     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8865         AC_MSG_CHECKING([for rpm])
8866         for a in "$RPM" rpmbuild rpm; do
8867             $a --usage >/dev/null 2> /dev/null
8868             if test $? -eq 0; then
8869                 RPM=$a
8870                 break
8871             else
8872                 $a --version >/dev/null 2> /dev/null
8873                 if test $? -eq 0; then
8874                     RPM=$a
8875                     break
8876                 fi
8877             fi
8878         done
8879         if test -z "$RPM"; then
8880             AC_MSG_ERROR([not found])
8881         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8882             RPM_PATH=`which $RPM`
8883             AC_MSG_RESULT([$RPM_PATH])
8884             SCPDEFS="$SCPDEFS -DWITH_RPM"
8885         else
8886             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8887         fi
8888     fi
8889     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8890         AC_PATH_PROG(DPKG, dpkg, no)
8891         if test "$DPKG" = "no"; then
8892             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8893         fi
8894     fi
8895     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8896        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8897         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8898             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8899                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8900                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8901                     AC_MSG_RESULT([yes])
8902                 else
8903                     AC_MSG_RESULT([no])
8904                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8905                         _pt="rpm"
8906                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8907                         add_warning "the rpms will need to be installed with --nodeps"
8908                     else
8909                         _pt="pkg"
8910                     fi
8911                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8912                     add_warning "the ${_pt}s will not be relocatable"
8913                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8914                                  relocation will work, you need to patch your epm with the
8915                                  patch in epm/epm-3.7.patch or build with
8916                                  --with-epm=internal which will build a suitable epm])
8917                 fi
8918             fi
8919         fi
8920     fi
8921     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8922         AC_PATH_PROG(PKGMK, pkgmk, no)
8923         if test "$PKGMK" = "no"; then
8924             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8925         fi
8926     fi
8927     AC_SUBST(RPM)
8928     AC_SUBST(DPKG)
8929     AC_SUBST(PKGMK)
8930 else
8931     for i in $PKGFORMAT; do
8932         case "$i" in
8933         aix | bsd | deb | pkg | rpm | native | portable)
8934             AC_MSG_ERROR(
8935                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8936             ;;
8937         esac
8938     done
8939     AC_MSG_RESULT([no])
8940     EPM=NO
8942 AC_SUBST(EPM)
8944 ENABLE_LWP=
8945 if test "$enable_lotuswordpro" = "yes"; then
8946     ENABLE_LWP="TRUE"
8948 AC_SUBST(ENABLE_LWP)
8950 dnl ===================================================================
8951 dnl Check for building ODK
8952 dnl ===================================================================
8953 if test "$enable_odk" != yes; then
8954     unset DOXYGEN
8955 else
8956     if test "$with_doxygen" = no; then
8957         AC_MSG_CHECKING([for doxygen])
8958         unset DOXYGEN
8959         AC_MSG_RESULT([no])
8960     else
8961         if test "$with_doxygen" = yes; then
8962             AC_PATH_PROG([DOXYGEN], [doxygen])
8963             if test -z "$DOXYGEN"; then
8964                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
8965             fi
8966             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
8967                 if ! dot -V 2>/dev/null; then
8968                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
8969                 fi
8970             fi
8971         else
8972             AC_MSG_CHECKING([for doxygen])
8973             DOXYGEN=$with_doxygen
8974             AC_MSG_RESULT([$DOXYGEN])
8975         fi
8976         if test -n "$DOXYGEN"; then
8977             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
8978             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
8979             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
8980                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
8981             fi
8982         fi
8983     fi
8985 AC_SUBST([DOXYGEN])
8987 AC_MSG_CHECKING([whether to build the ODK])
8988 if test "$enable_odk" = yes; then
8989     AC_MSG_RESULT([yes])
8990     BUILD_TYPE="$BUILD_TYPE ODK"
8991 else
8992     AC_MSG_RESULT([no])
8995 dnl ===================================================================
8996 dnl Check for system zlib
8997 dnl ===================================================================
8998 if test "$with_system_zlib" = "auto"; then
8999     case "$_os" in
9000     WINNT)
9001         with_system_zlib="$with_system_libs"
9002         ;;
9003     *)
9004         if test "$enable_fuzzers" != "yes"; then
9005             with_system_zlib=yes
9006         else
9007             with_system_zlib=no
9008         fi
9009         ;;
9010     esac
9013 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9014 dnl and has no pkg-config for it at least on some tinderboxes,
9015 dnl so leaving that out for now
9016 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9017 AC_MSG_CHECKING([which zlib to use])
9018 if test "$with_system_zlib" = "yes"; then
9019     AC_MSG_RESULT([external])
9020     SYSTEM_ZLIB=TRUE
9021     AC_CHECK_HEADER(zlib.h, [],
9022         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9023     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9024         [AC_MSG_ERROR(zlib not found or functional)], [])
9025 else
9026     AC_MSG_RESULT([internal])
9027     SYSTEM_ZLIB=
9028     BUILD_TYPE="$BUILD_TYPE ZLIB"
9029     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9030     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9032 AC_SUBST(ZLIB_CFLAGS)
9033 AC_SUBST(ZLIB_LIBS)
9034 AC_SUBST(SYSTEM_ZLIB)
9036 dnl ===================================================================
9037 dnl Check for system jpeg
9038 dnl ===================================================================
9039 AC_MSG_CHECKING([which libjpeg to use])
9040 if test "$with_system_jpeg" = "yes"; then
9041     AC_MSG_RESULT([external])
9042     SYSTEM_LIBJPEG=TRUE
9043     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9044         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9045     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9046         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9047 else
9048     SYSTEM_LIBJPEG=
9049     AC_MSG_RESULT([internal, libjpeg-turbo])
9050     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9051     LIBJPEG_CFLAGS="-I${WORKDIR}/UnpackedTarball/libjpeg-turbo"
9052     if test "$COM" = "MSC"; then
9053         LIBJPEG_LIBS="${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs/libjpeg.lib"
9054     else
9055         LIBJPEG_LIBS="-L${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs -ljpeg"
9056     fi
9058     case "$host_cpu" in
9059     x86_64 | amd64 | i*86 | x86 | ia32)
9060         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9061         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9062             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9063                 NASM="$LODE_HOME/opt/bin/nasm"
9064             elif test -x "/opt/lo/bin/nasm"; then
9065                 NASM="/opt/lo/bin/nasm"
9066             fi
9067         fi
9069         if test -n "$NASM"; then
9070             AC_MSG_CHECKING([for object file format of host system])
9071             case "$host_os" in
9072               cygwin* | mingw* | pw32* | wsl*)
9073                 case "$host_cpu" in
9074                   x86_64)
9075                     objfmt='Win64-COFF'
9076                     ;;
9077                   *)
9078                     objfmt='Win32-COFF'
9079                     ;;
9080                 esac
9081               ;;
9082               msdosdjgpp* | go32*)
9083                 objfmt='COFF'
9084               ;;
9085               os2-emx*) # not tested
9086                 objfmt='MSOMF' # obj
9087               ;;
9088               linux*coff* | linux*oldld*)
9089                 objfmt='COFF' # ???
9090               ;;
9091               linux*aout*)
9092                 objfmt='a.out'
9093               ;;
9094               linux*)
9095                 case "$host_cpu" in
9096                   x86_64)
9097                     objfmt='ELF64'
9098                     ;;
9099                   *)
9100                     objfmt='ELF'
9101                     ;;
9102                 esac
9103               ;;
9104               kfreebsd* | freebsd* | netbsd* | openbsd*)
9105                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9106                   objfmt='BSD-a.out'
9107                 else
9108                   case "$host_cpu" in
9109                     x86_64 | amd64)
9110                       objfmt='ELF64'
9111                       ;;
9112                     *)
9113                       objfmt='ELF'
9114                       ;;
9115                   esac
9116                 fi
9117               ;;
9118               solaris* | sunos* | sysv* | sco*)
9119                 case "$host_cpu" in
9120                   x86_64)
9121                     objfmt='ELF64'
9122                     ;;
9123                   *)
9124                     objfmt='ELF'
9125                     ;;
9126                 esac
9127               ;;
9128               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9129                 case "$host_cpu" in
9130                   x86_64)
9131                     objfmt='Mach-O64'
9132                     ;;
9133                   *)
9134                     objfmt='Mach-O'
9135                     ;;
9136                 esac
9137               ;;
9138               *)
9139                 objfmt='ELF ?'
9140               ;;
9141             esac
9143             AC_MSG_RESULT([$objfmt])
9144             if test "$objfmt" = 'ELF ?'; then
9145               objfmt='ELF'
9146               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9147             fi
9149             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9150             case "$objfmt" in
9151               MSOMF)      NAFLAGS='-fobj -DOBJ32';;
9152               Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
9153               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
9154               COFF)       NAFLAGS='-fcoff -DCOFF';;
9155               a.out)      NAFLAGS='-faout -DAOUT';;
9156               BSD-a.out)  NAFLAGS='-faoutb -DAOUT';;
9157               ELF)        NAFLAGS='-felf -DELF';;
9158               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__';;
9159               RDF)        NAFLAGS='-frdf -DRDF';;
9160               Mach-O)     NAFLAGS='-fmacho -DMACHO';;
9161               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
9162             esac
9163             AC_MSG_RESULT([$NAFLAGS])
9165             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9166             cat > conftest.asm << EOF
9167             [%line __oline__ "configure"
9168                     section .text
9169                     global  _main,main
9170             _main:
9171             main:   xor     eax,eax
9172                     ret
9173             ]
9175             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9176             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9177               AC_MSG_RESULT(yes)
9178             else
9179               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9180               cat conftest.asm >&AS_MESSAGE_LOG_FD
9181               rm -rf conftest*
9182               AC_MSG_RESULT(no)
9183               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9184               NASM=""
9185             fi
9187         fi
9189         if test -z "$NASM"; then
9190 cat << _EOS
9191 ****************************************************************************
9192 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9193 To get one please:
9195 _EOS
9196             if test "$build_os" = "cygwin"; then
9197 cat << _EOS
9198 install a pre-compiled binary for Win32
9200 mkdir -p /opt/lo/bin
9201 cd /opt/lo/bin
9202 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9203 chmod +x nasm
9205 or get and install one from http://www.nasm.us/
9207 Then re-run autogen.sh
9209 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9210 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9212 _EOS
9213             else
9214 cat << _EOS
9215 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9217 _EOS
9218             fi
9219             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9220             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9221         fi
9222       ;;
9223     esac
9226 AC_SUBST(NASM)
9227 AC_SUBST(LIBJPEG_CFLAGS)
9228 AC_SUBST(LIBJPEG_LIBS)
9229 AC_SUBST(SYSTEM_LIBJPEG)
9231 dnl ===================================================================
9232 dnl Check for system clucene
9233 dnl ===================================================================
9234 dnl we should rather be using
9235 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9236 dnl but the contribs-lib check seems tricky
9237 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9238 AC_MSG_CHECKING([which clucene to use])
9239 if test "$with_system_clucene" = "yes"; then
9240     AC_MSG_RESULT([external])
9241     SYSTEM_CLUCENE=TRUE
9242     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9243     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9244     FilterLibs "${CLUCENE_LIBS}"
9245     CLUCENE_LIBS="${filteredlibs}"
9246     AC_LANG_PUSH([C++])
9247     save_CXXFLAGS=$CXXFLAGS
9248     save_CPPFLAGS=$CPPFLAGS
9249     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9250     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9251     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9252     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9253     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9254                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9255     CXXFLAGS=$save_CXXFLAGS
9256     CPPFLAGS=$save_CPPFLAGS
9257     AC_LANG_POP([C++])
9259     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9260 else
9261     AC_MSG_RESULT([internal])
9262     SYSTEM_CLUCENE=
9263     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9266 AC_SUBST(SYSTEM_CLUCENE)
9267 AC_SUBST(CLUCENE_CFLAGS)
9268 AC_SUBST(CLUCENE_LIBS)
9270 dnl ===================================================================
9271 dnl Check for system expat
9272 dnl ===================================================================
9273 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9275 dnl ===================================================================
9276 dnl Check for system xmlsec
9277 dnl ===================================================================
9278 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9280 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9281 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9282     ENABLE_EOT="TRUE"
9283     AC_DEFINE([ENABLE_EOT])
9284     AC_MSG_RESULT([yes])
9286     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9287 else
9288     ENABLE_EOT=
9289     AC_MSG_RESULT([no])
9291 AC_SUBST([ENABLE_EOT])
9293 dnl ===================================================================
9294 dnl Check for DLP libs
9295 dnl ===================================================================
9296 AS_IF([test "$COM" = "MSC"],
9297       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9298       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9300 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9302 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9304 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9306 AS_IF([test "$COM" = "MSC"],
9307       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9308       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9310 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9312 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9314 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9315 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9317 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9319 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9321 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9323 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9324 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.19])
9326 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9327 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9329 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9331 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9332 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9334 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9336 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9338 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9340 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9342 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9343 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9345 dnl ===================================================================
9346 dnl Check for system lcms2
9347 dnl ===================================================================
9348 if test "$with_system_lcms2" != "yes"; then
9349     SYSTEM_LCMS2=
9351 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9352 if test "$GCC" = "yes"; then
9353     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9355 if test "$COM" = "MSC"; then # override the above
9356     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9359 dnl ===================================================================
9360 dnl Check for system cppunit
9361 dnl ===================================================================
9362 if test "$_os" != "Android" ; then
9363     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9366 dnl ===================================================================
9367 dnl Check whether freetype is available
9368 dnl ===================================================================
9369 if test "$using_freetype_fontconfig" = yes; then
9370     AC_MSG_CHECKING([which freetype to use])
9372 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9373     AC_MSG_RESULT([external])
9374     # FreeType has 3 different kinds of versions
9375     # * release, like 2.4.10
9376     # * libtool, like 13.0.7 (this what pkg-config returns)
9377     # * soname
9378     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9379     #
9380     # 9.9.3 is 2.2.0
9381     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9382     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9383     FilterLibs "${FREETYPE_LIBS}"
9384     FREETYPE_LIBS="${filteredlibs}"
9385     SYSTEM_FREETYPE=TRUE
9386 elif test "$using_freetype_fontconfig" = yes; then
9387     AC_MSG_RESULT([internal])
9388     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9389     if test "x$ac_config_site_64bit_host" = xYES; then
9390         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9391     else
9392         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9393     fi
9394     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9396 AC_SUBST(FREETYPE_CFLAGS)
9397 AC_SUBST(FREETYPE_LIBS)
9398 AC_SUBST([SYSTEM_FREETYPE])
9400 # ===================================================================
9401 # Check for system libxslt
9402 # to prevent incompatibilities between internal libxml2 and external libxslt,
9403 # or vice versa, use with_system_libxml here
9404 # ===================================================================
9405 if test "$with_system_libxml" = "auto"; then
9406     case "$_os" in
9407     WINNT|iOS|Android)
9408         with_system_libxml="$with_system_libs"
9409         ;;
9410     Emscripten)
9411         with_system_libxml=no
9412         ;;
9413     *)
9414         if test "$enable_fuzzers" != "yes"; then
9415             with_system_libxml=yes
9416         else
9417             with_system_libxml=no
9418         fi
9419         ;;
9420     esac
9423 AC_MSG_CHECKING([which libxslt to use])
9424 if test "$with_system_libxml" = "yes"; then
9425     AC_MSG_RESULT([external])
9426     SYSTEM_LIBXSLT=TRUE
9427     if test "$_os" = "Darwin"; then
9428         dnl make sure to use SDK path
9429         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9430         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9431         dnl omit -L/usr/lib
9432         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9433         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9434     else
9435         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9436         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9437         FilterLibs "${LIBXSLT_LIBS}"
9438         LIBXSLT_LIBS="${filteredlibs}"
9439         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9440         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9441         FilterLibs "${LIBEXSLT_LIBS}"
9442         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9443     fi
9445     dnl Check for xsltproc
9446     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9447     if test "$XSLTPROC" = "no"; then
9448         AC_MSG_ERROR([xsltproc is required])
9449     fi
9450 else
9451     AC_MSG_RESULT([internal])
9452     SYSTEM_LIBXSLT=
9453     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9455 AC_SUBST(SYSTEM_LIBXSLT)
9456 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9457     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9459 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9461 AC_SUBST(LIBEXSLT_CFLAGS)
9462 AC_SUBST(LIBEXSLT_LIBS)
9463 AC_SUBST(LIBXSLT_CFLAGS)
9464 AC_SUBST(LIBXSLT_LIBS)
9465 AC_SUBST(XSLTPROC)
9467 # ===================================================================
9468 # Check for system libxml
9469 # ===================================================================
9470 AC_MSG_CHECKING([which libxml to use])
9471 if test "$with_system_libxml" = "yes"; then
9472     AC_MSG_RESULT([external])
9473     SYSTEM_LIBXML=TRUE
9474     if test "$_os" = "Darwin"; then
9475         dnl make sure to use SDK path
9476         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9477         dnl omit -L/usr/lib
9478         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9479     elif test $_os = iOS; then
9480         dnl make sure to use SDK path
9481         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9482         LIBXML_CFLAGS="-I$usr/include/libxml2"
9483         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9484     else
9485         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9486         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9487         FilterLibs "${LIBXML_LIBS}"
9488         LIBXML_LIBS="${filteredlibs}"
9489     fi
9491     dnl Check for xmllint
9492     AC_PATH_PROG(XMLLINT, xmllint, no)
9493     if test "$XMLLINT" = "no"; then
9494         AC_MSG_ERROR([xmllint is required])
9495     fi
9496 else
9497     AC_MSG_RESULT([internal])
9498     SYSTEM_LIBXML=
9499     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9500     if test "$COM" = "MSC"; then
9501         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9502     fi
9503     if test "$COM" = "MSC"; then
9504         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9505     else
9506         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9507         if test "$_os" = Android; then
9508             LIBXML_LIBS="$LIBXML_LIBS -lm"
9509         fi
9510     fi
9511     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9513 AC_SUBST(SYSTEM_LIBXML)
9514 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9515     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9517 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9518 AC_SUBST(LIBXML_CFLAGS)
9519 AC_SUBST(LIBXML_LIBS)
9520 AC_SUBST(XMLLINT)
9522 # =====================================================================
9523 # Checking for a Python interpreter with version >= 3.3.
9524 # Optionally user can pass an option to configure, i. e.
9525 # ./configure PYTHON=/usr/bin/python
9526 # =====================================================================
9527 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9528     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9529     # unless PYTHON is defined as above which allows 'system'
9530     enable_python=internal
9532 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9533     if test -n "$PYTHON"; then
9534         PYTHON_FOR_BUILD=$PYTHON
9535     else
9536         # This allows a lack of system python with no error, we use internal one in that case.
9537         AM_PATH_PYTHON([3.3],, [:])
9538         # Clean PYTHON_VERSION checked below if cross-compiling
9539         PYTHON_VERSION=""
9540         if test "$PYTHON" != ":"; then
9541             PYTHON_FOR_BUILD=$PYTHON
9542         fi
9543     fi
9545 AC_SUBST(PYTHON_FOR_BUILD)
9547 # Checks for Python to use for Pyuno
9548 AC_MSG_CHECKING([which Python to use for Pyuno])
9549 case "$enable_python" in
9550 no|disable)
9551     if test -z $PYTHON_FOR_BUILD; then
9552         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9553         # requirement from the choice whether to include Python stuff in the installer, but why
9554         # bother?
9555         if test "$cross_compiling" = yes; then
9556             enable_python=system
9557         else
9558             AC_MSG_ERROR([Python is required at build time.])
9559         fi
9560     fi
9561     enable_python=no
9562     AC_MSG_RESULT([none])
9563     ;;
9564 ""|yes|auto)
9565     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9566         AC_MSG_RESULT([no, overridden by --disable-scripting])
9567         enable_python=no
9568     elif test $build_os = cygwin; then
9569         dnl When building on Windows we don't attempt to use any installed
9570         dnl "system"  Python.
9571         AC_MSG_RESULT([fully internal])
9572         enable_python=internal
9573     elif test "$cross_compiling" = yes; then
9574         AC_MSG_RESULT([system])
9575         enable_python=system
9576     else
9577         # Unset variables set by the above AM_PATH_PYTHON so that
9578         # we actually do check anew.
9579         AC_MSG_RESULT([])
9580         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
9581         AM_PATH_PYTHON([3.3],, [:])
9582         AC_MSG_CHECKING([which Python to use for Pyuno])
9583         if test "$PYTHON" = ":"; then
9584             if test -z "$PYTHON_FOR_BUILD"; then
9585                 AC_MSG_RESULT([fully internal])
9586             else
9587                 AC_MSG_RESULT([internal])
9588             fi
9589             enable_python=internal
9590         else
9591             AC_MSG_RESULT([system])
9592             enable_python=system
9593         fi
9594     fi
9595     ;;
9596 internal)
9597     AC_MSG_RESULT([internal])
9598     ;;
9599 fully-internal)
9600     AC_MSG_RESULT([fully internal])
9601     enable_python=internal
9602     ;;
9603 system)
9604     AC_MSG_RESULT([system])
9605     if test "$_os" = Darwin -a -z "$PYTHON"; then
9606         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9607     fi
9608     ;;
9610     AC_MSG_ERROR([Incorrect --enable-python option])
9611     ;;
9612 esac
9614 if test $enable_python != no; then
9615     BUILD_TYPE="$BUILD_TYPE PYUNO"
9618 if test $enable_python = system; then
9619     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9620         # Fallback: Accept these in the environment, or as set above
9621         # for MacOSX.
9622         :
9623     elif test "$cross_compiling" != yes; then
9624         # Unset variables set by the above AM_PATH_PYTHON so that
9625         # we actually do check anew.
9626         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
9627         # This causes an error if no python command is found
9628         AM_PATH_PYTHON([3.3])
9629         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9630         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9631         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9632         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9633         if test -z "$PKG_CONFIG"; then
9634             PYTHON_CFLAGS="-I$python_include"
9635             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9636         elif $PKG_CONFIG --exists python-$python_version-embed; then
9637             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9638             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9639         elif $PKG_CONFIG --exists python-$python_version; then
9640             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9641             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9642         else
9643             PYTHON_CFLAGS="-I$python_include"
9644             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9645         fi
9646         FilterLibs "${PYTHON_LIBS}"
9647         PYTHON_LIBS="${filteredlibs}"
9648     else
9649         dnl How to find out the cross-compilation Python installation path?
9650         AC_MSG_CHECKING([for python version])
9651         AS_IF([test -n "$PYTHON_VERSION"],
9652               [AC_MSG_RESULT([$PYTHON_VERSION])],
9653               [AC_MSG_RESULT([not found])
9654                AC_MSG_ERROR([no usable python found])])
9655         test -n "$PYTHON_CFLAGS" && break
9656     fi
9658     dnl Check if the headers really work
9659     save_CPPFLAGS="$CPPFLAGS"
9660     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9661     AC_CHECK_HEADER(Python.h)
9662     CPPFLAGS="$save_CPPFLAGS"
9664     # let the PYTHON_FOR_BUILD match the same python installation that
9665     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9666     # better for PythonTests.
9667     PYTHON_FOR_BUILD=$PYTHON
9670 if test "$with_lxml" != no; then
9671     if test -z "$PYTHON_FOR_BUILD"; then
9672         case $build_os in
9673             cygwin)
9674                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9675                 ;;
9676             *)
9677                 if test "$cross_compiling" != yes ; then
9678                     BUILD_TYPE="$BUILD_TYPE LXML"
9679                 fi
9680                 ;;
9681         esac
9682     else
9683         AC_MSG_CHECKING([for python lxml])
9684         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9685             AC_MSG_RESULT([yes])
9686         else
9687             case $build_os in
9688                 cygwin)
9689                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9690                     ;;
9691                 *)
9692                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9693                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9694                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9695                         else
9696                             BUILD_TYPE="$BUILD_TYPE LXML"
9697                             AC_MSG_RESULT([no, using internal lxml])
9698                         fi
9699                     else
9700                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9701                     fi
9702                     ;;
9703             esac
9704         fi
9705     fi
9708 dnl By now enable_python should be "system", "internal" or "no"
9709 case $enable_python in
9710 system)
9711     SYSTEM_PYTHON=TRUE
9713     if test "x$ac_cv_header_Python_h" != "xyes"; then
9714        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9715     fi
9717     AC_LANG_PUSH(C)
9718     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9719     AC_MSG_CHECKING([for correct python library version])
9720        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9721 #include <Python.h>
9723 int main(int argc, char **argv) {
9724    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9725    else return 1;
9727        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9728     AC_LANG_POP(C)
9730     dnl FIXME Check if the Python library can be linked with, too?
9731     ;;
9733 internal)
9734     SYSTEM_PYTHON=
9735     PYTHON_VERSION_MAJOR=3
9736     PYTHON_VERSION_MINOR=8
9737     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9738     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9739         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9740     fi
9741     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9742     BUILD_TYPE="$BUILD_TYPE PYTHON"
9743     if test "$OS" = LINUX -o "$OS" = WNT ; then
9744         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9745     fi
9746     # Embedded Python dies without Home set
9747     if test "$HOME" = ""; then
9748         export HOME=""
9749     fi
9750     ;;
9752     DISABLE_PYTHON=TRUE
9753     SYSTEM_PYTHON=
9754     ;;
9756     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9757     ;;
9758 esac
9760 AC_SUBST(DISABLE_PYTHON)
9761 AC_SUBST(SYSTEM_PYTHON)
9762 AC_SUBST(PYTHON_CFLAGS)
9763 AC_SUBST(PYTHON_LIBS)
9764 AC_SUBST(PYTHON_VERSION)
9765 AC_SUBST(PYTHON_VERSION_MAJOR)
9766 AC_SUBST(PYTHON_VERSION_MINOR)
9768 AC_MSG_CHECKING([whether to build LibreLogo])
9769 case "$enable_python" in
9770 no|disable)
9771     AC_MSG_RESULT([no; Python disabled])
9772     ;;
9774     if test "${enable_librelogo}" = "no"; then
9775         AC_MSG_RESULT([no])
9776     else
9777         AC_MSG_RESULT([yes])
9778         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9779         AC_DEFINE([ENABLE_LIBRELOGO],1)
9780     fi
9781     ;;
9782 esac
9783 AC_SUBST(ENABLE_LIBRELOGO)
9785 ENABLE_MARIADBC=
9786 MARIADBC_MAJOR=1
9787 MARIADBC_MINOR=0
9788 MARIADBC_MICRO=2
9789 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9790 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9791     ENABLE_MARIADBC=TRUE
9792     AC_MSG_RESULT([yes])
9793     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9794 else
9795     AC_MSG_RESULT([no])
9797 AC_SUBST(ENABLE_MARIADBC)
9798 AC_SUBST(MARIADBC_MAJOR)
9799 AC_SUBST(MARIADBC_MINOR)
9800 AC_SUBST(MARIADBC_MICRO)
9802 if test "$ENABLE_MARIADBC" = "TRUE"; then
9803     dnl ===================================================================
9804     dnl Check for system MariaDB
9805     dnl ===================================================================
9806     AC_MSG_CHECKING([which MariaDB to use])
9807     if test "$with_system_mariadb" = "yes"; then
9808         AC_MSG_RESULT([external])
9809         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9810         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9811         if test -z "$MARIADBCONFIG"; then
9812             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9813             if test -z "$MARIADBCONFIG"; then
9814                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9815                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9816             fi
9817         fi
9818         AC_MSG_CHECKING([MariaDB version])
9819         MARIADB_VERSION=`$MARIADBCONFIG --version`
9820         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9821         if test "$MARIADB_MAJOR" -ge "5"; then
9822             AC_MSG_RESULT([OK])
9823         else
9824             AC_MSG_ERROR([too old, use 5.0.x or later])
9825         fi
9826         AC_MSG_CHECKING([for MariaDB Client library])
9827         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9828         if test "$COM_IS_CLANG" = TRUE; then
9829             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9830         fi
9831         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9832         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9833         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9834         dnl linux32:
9835         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9836             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9837             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9838                 | sed -e 's|/lib64/|/lib/|')
9839         fi
9840         FilterLibs "${MARIADB_LIBS}"
9841         MARIADB_LIBS="${filteredlibs}"
9842         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9843         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9844         if test "$enable_bundle_mariadb" = "yes"; then
9845             AC_MSG_RESULT([yes])
9846             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9847             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9849 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9851 /g' | grep -E '(mysqlclient|mariadb)')
9852             if test "$_os" = "Darwin"; then
9853                 LIBMARIADB=${LIBMARIADB}.dylib
9854             elif test "$_os" = "WINNT"; then
9855                 LIBMARIADB=${LIBMARIADB}.dll
9856             else
9857                 LIBMARIADB=${LIBMARIADB}.so
9858             fi
9859             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9860             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9861             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9862                 AC_MSG_RESULT([found.])
9863                 PathFormat "$LIBMARIADB_PATH"
9864                 LIBMARIADB_PATH="$formatted_path"
9865             else
9866                 AC_MSG_ERROR([not found.])
9867             fi
9868         else
9869             AC_MSG_RESULT([no])
9870             BUNDLE_MARIADB_CONNECTOR_C=
9871         fi
9872     else
9873         AC_MSG_RESULT([internal])
9874         SYSTEM_MARIADB_CONNECTOR_C=
9875         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9876         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9877         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9878     fi
9880     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9881     AC_SUBST(MARIADB_CFLAGS)
9882     AC_SUBST(MARIADB_LIBS)
9883     AC_SUBST(LIBMARIADB)
9884     AC_SUBST(LIBMARIADB_PATH)
9885     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9888 dnl ===================================================================
9889 dnl Check for system hsqldb
9890 dnl ===================================================================
9891 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9892     HSQLDB_USE_JDBC_4_1=
9893     AC_MSG_CHECKING([which hsqldb to use])
9894     if test "$with_system_hsqldb" = "yes"; then
9895         AC_MSG_RESULT([external])
9896         SYSTEM_HSQLDB=TRUE
9897         if test -z $HSQLDB_JAR; then
9898             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9899         fi
9900         if ! test -f $HSQLDB_JAR; then
9901                AC_MSG_ERROR(hsqldb.jar not found.)
9902         fi
9903         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9904         export HSQLDB_JAR
9905         if $PERL -e \
9906            'use Archive::Zip;
9907             my $file = "$ENV{'HSQLDB_JAR'}";
9908             my $zip = Archive::Zip->new( $file );
9909             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9910             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9911             {
9912                 push @l, split(/\n/, $mf);
9913                 foreach my $line (@l)
9914                 {
9915                     if ($line =~ m/Specification-Version:/)
9916                     {
9917                         ($t, $version) = split (/:/,$line);
9918                         $version =~ s/^\s//;
9919                         ($a, $b, $c, $d) = split (/\./,$version);
9920                         if ($c == "0" && $d > "8")
9921                         {
9922                             exit 0;
9923                         }
9924                         else
9925                         {
9926                             exit 1;
9927                         }
9928                     }
9929                 }
9930             }
9931             else
9932             {
9933                 exit 1;
9934             }'; then
9935             AC_MSG_RESULT([yes])
9936         else
9937             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9938         fi
9939     else
9940         AC_MSG_RESULT([internal])
9941         SYSTEM_HSQLDB=
9942         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9943         NEED_ANT=TRUE
9944         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9945         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9946         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9947             AC_MSG_RESULT([yes])
9948             HSQLDB_USE_JDBC_4_1=TRUE
9949         else
9950             AC_MSG_RESULT([no])
9951         fi
9952     fi
9953 else
9954     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9955         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9956     fi
9958 AC_SUBST(SYSTEM_HSQLDB)
9959 AC_SUBST(HSQLDB_JAR)
9960 AC_SUBST([HSQLDB_USE_JDBC_4_1])
9962 dnl ===================================================================
9963 dnl Check for PostgreSQL stuff
9964 dnl ===================================================================
9965 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
9966 if test "x$enable_postgresql_sdbc" != "xno"; then
9967     AC_MSG_RESULT([yes])
9968     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
9970     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
9971         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
9972     fi
9973     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
9974         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
9975     fi
9977     postgres_interface=""
9978     if test "$with_system_postgresql" = "yes"; then
9979         postgres_interface="external PostgreSQL"
9980         SYSTEM_POSTGRESQL=TRUE
9981         if test "$_os" = Darwin; then
9982             supp_path=''
9983             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
9984                 pg_supp_path="$P_SEP$d$pg_supp_path"
9985             done
9986         fi
9987         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
9988         if test -n "$PGCONFIG"; then
9989             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
9990             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
9991         else
9992             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
9993               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
9994               POSTGRESQL_LIB=$POSTGRESQL_LIBS
9995             ],[
9996               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
9997             ])
9998         fi
9999         FilterLibs "${POSTGRESQL_LIB}"
10000         POSTGRESQL_LIB="${filteredlibs}"
10001     else
10002         # if/when anything else than PostgreSQL uses Kerberos,
10003         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10004         WITH_KRB5=
10005         WITH_GSSAPI=
10006         case "$_os" in
10007         Darwin)
10008             # macOS has system MIT Kerberos 5 since 10.4
10009             if test "$with_krb5" != "no"; then
10010                 WITH_KRB5=TRUE
10011                 save_LIBS=$LIBS
10012                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10013                 # that the libraries where these functions are located on macOS will change, is it?
10014                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10015                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10016                 KRB5_LIBS=$LIBS
10017                 LIBS=$save_LIBS
10018                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10019                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10020                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10021                 LIBS=$save_LIBS
10022             fi
10023             if test "$with_gssapi" != "no"; then
10024                 WITH_GSSAPI=TRUE
10025                 save_LIBS=$LIBS
10026                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10027                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10028                 GSSAPI_LIBS=$LIBS
10029                 LIBS=$save_LIBS
10030             fi
10031             ;;
10032         WINNT)
10033             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10034                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10035             fi
10036             ;;
10037         Linux|GNU|*BSD|DragonFly)
10038             if test "$with_krb5" != "no"; then
10039                 WITH_KRB5=TRUE
10040                 save_LIBS=$LIBS
10041                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10042                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10043                 KRB5_LIBS=$LIBS
10044                 LIBS=$save_LIBS
10045                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10046                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10047                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10048                 LIBS=$save_LIBS
10049             fi
10050             if test "$with_gssapi" != "no"; then
10051                 WITH_GSSAPI=TRUE
10052                 save_LIBS=$LIBS
10053                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10054                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10055                 GSSAPI_LIBS=$LIBS
10056                 LIBS=$save_LIBS
10057             fi
10058             ;;
10059         *)
10060             if test "$with_krb5" = "yes"; then
10061                 WITH_KRB5=TRUE
10062                 save_LIBS=$LIBS
10063                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10064                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10065                 KRB5_LIBS=$LIBS
10066                 LIBS=$save_LIBS
10067                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10068                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10069                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10070                 LIBS=$save_LIBS
10071             fi
10072             if test "$with_gssapi" = "yes"; then
10073                 WITH_GSSAPI=TRUE
10074                 save_LIBS=$LIBS
10075                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10076                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10077                 LIBS=$save_LIBS
10078                 GSSAPI_LIBS=$LIBS
10079             fi
10080         esac
10082         if test -n "$with_libpq_path"; then
10083             SYSTEM_POSTGRESQL=TRUE
10084             postgres_interface="external libpq"
10085             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10086             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10087         else
10088             SYSTEM_POSTGRESQL=
10089             postgres_interface="internal"
10090             POSTGRESQL_LIB=""
10091             POSTGRESQL_INC="%OVERRIDE_ME%"
10092             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10093         fi
10094     fi
10096     AC_MSG_CHECKING([PostgreSQL C interface])
10097     AC_MSG_RESULT([$postgres_interface])
10099     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10100         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10101         save_CFLAGS=$CFLAGS
10102         save_CPPFLAGS=$CPPFLAGS
10103         save_LIBS=$LIBS
10104         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10105         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10106         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10107         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10108             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10109         CFLAGS=$save_CFLAGS
10110         CPPFLAGS=$save_CPPFLAGS
10111         LIBS=$save_LIBS
10112     fi
10113     BUILD_POSTGRESQL_SDBC=TRUE
10114 else
10115     AC_MSG_RESULT([no])
10117 AC_SUBST(WITH_KRB5)
10118 AC_SUBST(WITH_GSSAPI)
10119 AC_SUBST(GSSAPI_LIBS)
10120 AC_SUBST(KRB5_LIBS)
10121 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10122 AC_SUBST(SYSTEM_POSTGRESQL)
10123 AC_SUBST(POSTGRESQL_INC)
10124 AC_SUBST(POSTGRESQL_LIB)
10126 dnl ===================================================================
10127 dnl Check for Firebird stuff
10128 dnl ===================================================================
10129 ENABLE_FIREBIRD_SDBC=
10130 if test "$enable_firebird_sdbc" = "yes" ; then
10131     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10133     dnl ===================================================================
10134     dnl Check for system Firebird
10135     dnl ===================================================================
10136     AC_MSG_CHECKING([which Firebird to use])
10137     if test "$with_system_firebird" = "yes"; then
10138         AC_MSG_RESULT([external])
10139         SYSTEM_FIREBIRD=TRUE
10140         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10141         if test -z "$FIREBIRDCONFIG"; then
10142             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10143             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10144                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10145             ])
10146             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10147         else
10148             AC_MSG_NOTICE([fb_config found])
10149             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10150             AC_MSG_CHECKING([for Firebird Client library])
10151             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10152             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10153             FilterLibs "${FIREBIRD_LIBS}"
10154             FIREBIRD_LIBS="${filteredlibs}"
10155         fi
10156         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10157         AC_MSG_CHECKING([Firebird version])
10158         if test -n "${FIREBIRD_VERSION}"; then
10159             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10160             if test "$FIREBIRD_MAJOR" -ge "3"; then
10161                 AC_MSG_RESULT([OK])
10162             else
10163                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10164             fi
10165         else
10166             save_CFLAGS="${CFLAGS}"
10167             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10168             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10169 #if defined(FB_API_VER) && FB_API_VER == 30
10170 int fb_api_is_30(void) { return 0; }
10171 #else
10172 #error "Wrong Firebird API version"
10173 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10174             CFLAGS="$save_CFLAGS"
10175         fi
10176         ENABLE_FIREBIRD_SDBC=TRUE
10177         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10178     elif test "$enable_database_connectivity" = no; then
10179         AC_MSG_RESULT([none])
10180     elif test "$cross_compiling" = "yes"; then
10181         AC_MSG_RESULT([none])
10182     else
10183         dnl Embedded Firebird has version 3.0
10184         dnl We need libatomic_ops for any non X86/X64 system
10185         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10186             dnl ===================================================================
10187             dnl Check for system libatomic_ops
10188             dnl ===================================================================
10189             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10190             if test "$with_system_libatomic_ops" = "yes"; then
10191                 SYSTEM_LIBATOMIC_OPS=TRUE
10192                 AC_CHECK_HEADERS(atomic_ops.h, [],
10193                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10194             else
10195                 SYSTEM_LIBATOMIC_OPS=
10196                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10197                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10198                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10199             fi
10200         fi
10202         AC_MSG_RESULT([internal])
10203         SYSTEM_FIREBIRD=
10204         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10205         FIREBIRD_LIBS="-lfbclient"
10207         if test "$with_system_libtommath" = "yes"; then
10208             SYSTEM_LIBTOMMATH=TRUE
10209             dnl check for tommath presence
10210             save_LIBS=$LIBS
10211             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10212             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10213             LIBS=$save_LIBS
10214         else
10215             SYSTEM_LIBTOMMATH=
10216             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10217             LIBTOMMATH_LIBS="-ltommath"
10218             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10219         fi
10221         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10222         ENABLE_FIREBIRD_SDBC=TRUE
10223         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10224     fi
10226 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10227 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10228 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10229 AC_SUBST(LIBATOMIC_OPS_LIBS)
10230 AC_SUBST(SYSTEM_FIREBIRD)
10231 AC_SUBST(FIREBIRD_CFLAGS)
10232 AC_SUBST(FIREBIRD_LIBS)
10233 AC_SUBST(SYSTEM_LIBTOMMATH)
10234 AC_SUBST(LIBTOMMATH_CFLAGS)
10235 AC_SUBST(LIBTOMMATH_LIBS)
10237 dnl ===================================================================
10238 dnl Check for system curl
10239 dnl ===================================================================
10240 AC_MSG_CHECKING([which libcurl to use])
10241 if test "$with_system_curl" = "auto"; then
10242     with_system_curl="$with_system_libs"
10245 if test "$test_curl" = "yes" -a "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10246     AC_MSG_RESULT([external])
10247     SYSTEM_CURL=TRUE
10249     # First try PKGCONFIG and then fall back
10250     PKG_CHECK_MODULES(CURL, libcurl >= 7.19.4,, [:])
10252     if test -n "$CURL_PKG_ERRORS"; then
10253         AC_PATH_PROG(CURLCONFIG, curl-config)
10254         if test -z "$CURLCONFIG"; then
10255             AC_MSG_ERROR([curl development files not found])
10256         fi
10257         CURL_LIBS=`$CURLCONFIG --libs`
10258         FilterLibs "${CURL_LIBS}"
10259         CURL_LIBS="${filteredlibs}"
10260         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10261         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10263         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10264         case $curl_version in
10265         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10266         dnl so they need to be doubled to end up in the configure script
10267         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10268             AC_MSG_RESULT([yes])
10269             ;;
10270         *)
10271             AC_MSG_ERROR([no, you have $curl_version])
10272             ;;
10273         esac
10274     fi
10276     ENABLE_CURL=TRUE
10277 elif test "$test_curl" = "no"; then
10278     AC_MSG_RESULT([none])
10279 else
10280     AC_MSG_RESULT([internal])
10281     SYSTEM_CURL=
10282     BUILD_TYPE="$BUILD_TYPE CURL"
10283     ENABLE_CURL=TRUE
10285 AC_SUBST(SYSTEM_CURL)
10286 AC_SUBST(CURL_CFLAGS)
10287 AC_SUBST(CURL_LIBS)
10288 AC_SUBST(ENABLE_CURL)
10290 dnl ===================================================================
10291 dnl Check for system boost
10292 dnl ===================================================================
10293 AC_MSG_CHECKING([which boost to use])
10294 if test "$with_system_boost" = "yes"; then
10295     AC_MSG_RESULT([external])
10296     SYSTEM_BOOST=TRUE
10297     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10298     AX_BOOST_DATE_TIME
10299     AX_BOOST_FILESYSTEM
10300     AX_BOOST_IOSTREAMS
10301     AX_BOOST_LOCALE
10302     AC_LANG_PUSH([C++])
10303     save_CXXFLAGS=$CXXFLAGS
10304     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10305     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10306        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10307     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10308        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10309     CXXFLAGS=$save_CXXFLAGS
10310     AC_LANG_POP([C++])
10311     # this is in m4/ax_boost_base.m4
10312     FilterLibs "${BOOST_LDFLAGS}"
10313     BOOST_LDFLAGS="${filteredlibs}"
10314 else
10315     AC_MSG_RESULT([internal])
10316     BUILD_TYPE="$BUILD_TYPE BOOST"
10317     SYSTEM_BOOST=
10318     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10319         # use warning-suppressing wrapper headers
10320         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10321     else
10322         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10323     fi
10325 AC_SUBST(SYSTEM_BOOST)
10327 dnl ===================================================================
10328 dnl Check for system mdds
10329 dnl ===================================================================
10330 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10332 dnl ===================================================================
10333 dnl Check for system glm
10334 dnl ===================================================================
10335 AC_MSG_CHECKING([which glm to use])
10336 if test "$with_system_glm" = "yes"; then
10337     AC_MSG_RESULT([external])
10338     SYSTEM_GLM=TRUE
10339     AC_LANG_PUSH([C++])
10340     AC_CHECK_HEADER([glm/glm.hpp], [],
10341        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10342     AC_LANG_POP([C++])
10343 else
10344     AC_MSG_RESULT([internal])
10345     BUILD_TYPE="$BUILD_TYPE GLM"
10346     SYSTEM_GLM=
10347     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10349 AC_SUBST([GLM_CFLAGS])
10350 AC_SUBST([SYSTEM_GLM])
10352 dnl ===================================================================
10353 dnl Check for system odbc
10354 dnl ===================================================================
10355 AC_MSG_CHECKING([which odbc headers to use])
10356 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
10357     AC_MSG_RESULT([external])
10358     SYSTEM_ODBC_HEADERS=TRUE
10360     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10361         save_CPPFLAGS=$CPPFLAGS
10362         find_winsdk
10363         PathFormat "$winsdktest"
10364         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"
10365         AC_CHECK_HEADER(sqlext.h, [],
10366             [AC_MSG_ERROR(odbc not found. install odbc)],
10367             [#include <windows.h>])
10368         CPPFLAGS=$save_CPPFLAGS
10369     else
10370         AC_CHECK_HEADER(sqlext.h, [],
10371             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10372     fi
10373 elif test "$enable_database_connectivity" = no; then
10374     AC_MSG_RESULT([none])
10375 else
10376     AC_MSG_RESULT([internal])
10377     SYSTEM_ODBC_HEADERS=
10379 AC_SUBST(SYSTEM_ODBC_HEADERS)
10381 dnl ===================================================================
10382 dnl Check for system NSS
10383 dnl ===================================================================
10384 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10385     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10386     AC_DEFINE(HAVE_FEATURE_NSS)
10387     ENABLE_NSS=TRUE
10388 elif test $_os != iOS ; then
10389     with_tls=openssl
10391 AC_SUBST(ENABLE_NSS)
10393 dnl ===================================================================
10394 dnl Enable LDAP support
10395 dnl ===================================================================
10397 if test "$test_openldap" = yes; then
10398     AC_MSG_CHECKING([whether to enable LDAP support])
10399     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10400         AC_MSG_RESULT([yes])
10401         ENABLE_LDAP=TRUE
10402     else
10403         if test "$enable_ldap" != "yes"; then
10404             AC_MSG_RESULT([no])
10405         else
10406             AC_MSG_RESULT([no (needs NSS or system openldap)])
10407         fi
10408     fi
10410 dnl ===================================================================
10411 dnl Check for system openldap
10412 dnl ===================================================================
10414     if test "$ENABLE_LDAP" = TRUE; then
10415         AC_MSG_CHECKING([which openldap library to use])
10416         if test "$with_system_openldap" = yes; then
10417             AC_MSG_RESULT([external])
10418             SYSTEM_OPENLDAP=TRUE
10419             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10420             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10421             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10422         else
10423             AC_MSG_RESULT([internal])
10424             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10425         fi
10426     fi
10429 AC_SUBST(ENABLE_LDAP)
10430 AC_SUBST(SYSTEM_OPENLDAP)
10432 dnl ===================================================================
10433 dnl Check for TLS/SSL and cryptographic implementation to use
10434 dnl ===================================================================
10435 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10436 if test -n "$with_tls"; then
10437     case $with_tls in
10438     openssl)
10439         AC_DEFINE(USE_TLS_OPENSSL)
10440         TLS=OPENSSL
10441         AC_MSG_RESULT([$TLS])
10443         if test "$enable_openssl" != "yes"; then
10444             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10445         fi
10447         # warn that OpenSSL has been selected but not all TLS code has this option
10448         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10449         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10450         ;;
10451     nss)
10452         AC_DEFINE(USE_TLS_NSS)
10453         TLS=NSS
10454         AC_MSG_RESULT([$TLS])
10455         ;;
10456     no)
10457         AC_MSG_RESULT([none])
10458         AC_MSG_WARN([Skipping TLS/SSL])
10459         ;;
10460     *)
10461         AC_MSG_RESULT([])
10462         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10463 openssl - OpenSSL
10464 nss - Mozilla's Network Security Services (NSS)
10465     ])
10466         ;;
10467     esac
10468 else
10469     # default to using NSS, it results in smaller oox lib
10470     AC_DEFINE(USE_TLS_NSS)
10471     TLS=NSS
10472     AC_MSG_RESULT([$TLS])
10474 AC_SUBST(TLS)
10476 dnl ===================================================================
10477 dnl Check for system sane
10478 dnl ===================================================================
10479 AC_MSG_CHECKING([which sane header to use])
10480 if test "$with_system_sane" = "yes"; then
10481     AC_MSG_RESULT([external])
10482     AC_CHECK_HEADER(sane/sane.h, [],
10483       [AC_MSG_ERROR(sane not found. install sane)], [])
10484 else
10485     AC_MSG_RESULT([internal])
10486     BUILD_TYPE="$BUILD_TYPE SANE"
10489 dnl ===================================================================
10490 dnl Check for system icu
10491 dnl ===================================================================
10492 SYSTEM_GENBRK=
10493 SYSTEM_GENCCODE=
10494 SYSTEM_GENCMN=
10496 ICU_MAJOR=69
10497 ICU_MINOR=1
10498 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10499 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10500 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10501 AC_MSG_CHECKING([which icu to use])
10502 if test "$with_system_icu" = "yes"; then
10503     AC_MSG_RESULT([external])
10504     SYSTEM_ICU=TRUE
10505     AC_LANG_PUSH([C++])
10506     AC_MSG_CHECKING([for unicode/rbbi.h])
10507     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10508     AC_LANG_POP([C++])
10510     if test "$cross_compiling" != "yes"; then
10511         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10512         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10513         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10514         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10515     fi
10517     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10518         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10519         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10520         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10521         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10522         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10523             AC_MSG_RESULT([yes])
10524         else
10525             AC_MSG_RESULT([no])
10526             if test "$with_system_icu_for_build" != "force"; then
10527                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10528 You can use --with-system-icu-for-build=force to use it anyway.])
10529             fi
10530         fi
10531     fi
10533     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10534         # using the system icu tools can lead to version confusion, use the
10535         # ones from the build environment when cross-compiling
10536         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10537         if test -z "$SYSTEM_GENBRK"; then
10538             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10539         fi
10540         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10541         if test -z "$SYSTEM_GENCCODE"; then
10542             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10543         fi
10544         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10545         if test -z "$SYSTEM_GENCMN"; then
10546             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10547         fi
10548         if test "$ICU_MAJOR" -ge "49"; then
10549             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10550             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10551             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10552         else
10553             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10554             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10555             ICU_RECLASSIFIED_HEBREW_LETTER=
10556         fi
10557     fi
10559     if test "$cross_compiling" = "yes"; then
10560         if test "$ICU_MAJOR" -ge "50"; then
10561             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10562             ICU_MINOR=""
10563         fi
10564     fi
10565 else
10566     AC_MSG_RESULT([internal])
10567     SYSTEM_ICU=
10568     BUILD_TYPE="$BUILD_TYPE ICU"
10569     # surprisingly set these only for "internal" (to be used by various other
10570     # external libs): the system icu-config is quite unhelpful and spits out
10571     # dozens of weird flags and also default path -I/usr/include
10572     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10573     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10575 if test "$ICU_MAJOR" -ge "59"; then
10576     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10577     # with -std=c++11 but not all external libraries can be built with that,
10578     # for those use a bit-compatible typedef uint16_t UChar; see
10579     # icu/source/common/unicode/umachine.h
10580     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10581 else
10582     ICU_UCHAR_TYPE=""
10584 AC_SUBST(SYSTEM_ICU)
10585 AC_SUBST(SYSTEM_GENBRK)
10586 AC_SUBST(SYSTEM_GENCCODE)
10587 AC_SUBST(SYSTEM_GENCMN)
10588 AC_SUBST(ICU_MAJOR)
10589 AC_SUBST(ICU_MINOR)
10590 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10591 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10592 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10593 AC_SUBST(ICU_CFLAGS)
10594 AC_SUBST(ICU_LIBS)
10595 AC_SUBST(ICU_UCHAR_TYPE)
10597 dnl ==================================================================
10598 dnl Breakpad
10599 dnl ==================================================================
10600 DEFAULT_CRASHDUMP_VALUE="true"
10601 AC_MSG_CHECKING([whether to enable breakpad])
10602 if test "$enable_breakpad" != yes; then
10603     AC_MSG_RESULT([no])
10604 else
10605     AC_MSG_RESULT([yes])
10606     ENABLE_BREAKPAD="TRUE"
10607     AC_DEFINE(ENABLE_BREAKPAD)
10608     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10609     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10611     AC_MSG_CHECKING([for disable crash dump])
10612     if test "$enable_crashdump" = no; then
10613         DEFAULT_CRASHDUMP_VALUE="false"
10614         AC_MSG_RESULT([yes])
10615     else
10616        AC_MSG_RESULT([no])
10617     fi
10619     AC_MSG_CHECKING([for crashreport config])
10620     if test "$with_symbol_config" = "no"; then
10621         BREAKPAD_SYMBOL_CONFIG="invalid"
10622         AC_MSG_RESULT([no])
10623     else
10624         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10625         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10626         AC_MSG_RESULT([yes])
10627     fi
10628     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10630 AC_SUBST(ENABLE_BREAKPAD)
10631 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10633 dnl ==================================================================
10634 dnl libfuzzer
10635 dnl ==================================================================
10636 AC_MSG_CHECKING([whether to enable fuzzers])
10637 if test "$enable_fuzzers" != yes; then
10638     AC_MSG_RESULT([no])
10639 else
10640     if test $LIB_FUZZING_ENGINE == ""; then
10641       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10642     fi
10643     AC_MSG_RESULT([yes])
10644     ENABLE_FUZZERS="TRUE"
10645     AC_DEFINE([ENABLE_FUZZERS],1)
10646     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10648 AC_SUBST(LIB_FUZZING_ENGINE)
10649 AC_SUBST(ENABLE_FUZZERS)
10651 dnl ===================================================================
10652 dnl Orcus
10653 dnl ===================================================================
10654 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
10655 if test "$with_system_orcus" != "yes"; then
10656     if test "$SYSTEM_BOOST" = "TRUE"; then
10657         # ===========================================================
10658         # Determine if we are going to need to link with Boost.System
10659         # ===========================================================
10660         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10661         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10662         dnl in documentation has no effect.
10663         AC_MSG_CHECKING([if we need to link with Boost.System])
10664         AC_LANG_PUSH([C++])
10665         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10666                 @%:@include <boost/version.hpp>
10667             ]],[[
10668                 #if BOOST_VERSION >= 105000
10669                 #   error yes, we need to link with Boost.System
10670                 #endif
10671             ]])],[
10672                 AC_MSG_RESULT([no])
10673             ],[
10674                 AC_MSG_RESULT([yes])
10675                 AX_BOOST_SYSTEM
10676         ])
10677         AC_LANG_POP([C++])
10678     fi
10680 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10681 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10682 AC_SUBST([BOOST_SYSTEM_LIB])
10683 AC_SUBST(SYSTEM_LIBORCUS)
10685 dnl ===================================================================
10686 dnl HarfBuzz
10687 dnl ===================================================================
10688 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10689                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10690                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10692 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10693                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10694                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10696 if test "$COM" = "MSC"; then # override the above
10697     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10698     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10701 if test "$with_system_harfbuzz" = "yes"; then
10702     if test "$with_system_graphite" = "no"; then
10703         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10704     fi
10705     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10706     save_LIBS="$LIBS"
10707     save_CFLAGS="$CFLAGS"
10708     LIBS="$LIBS $HARFBUZZ_LIBS"
10709     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10710     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10711     LIBS="$save_LIBS"
10712     CFLAGS="$save_CFLAGS"
10713 else
10714     if test "$with_system_graphite" = "yes"; then
10715         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10716     fi
10719 if test "$USING_X11" = TRUE; then
10720     AC_PATH_X
10721     AC_PATH_XTRA
10722     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10724     if test -z "$x_includes"; then
10725         x_includes="default_x_includes"
10726     fi
10727     if test -z "$x_libraries"; then
10728         x_libraries="default_x_libraries"
10729     fi
10730     CFLAGS="$CFLAGS $X_CFLAGS"
10731     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10732     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10733 else
10734     x_includes="no_x_includes"
10735     x_libraries="no_x_libraries"
10738 if test "$USING_X11" = TRUE; then
10739     dnl ===================================================================
10740     dnl Check for extension headers
10741     dnl ===================================================================
10742     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10743      [#include <X11/extensions/shape.h>])
10745     # vcl needs ICE and SM
10746     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10747     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10748         [AC_MSG_ERROR(ICE library not found)])
10749     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10750     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10751         [AC_MSG_ERROR(SM library not found)])
10754 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10755     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10756     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10759 dnl ===================================================================
10760 dnl Check for system Xrender
10761 dnl ===================================================================
10762 AC_MSG_CHECKING([whether to use Xrender])
10763 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10764     AC_MSG_RESULT([yes])
10765     PKG_CHECK_MODULES(XRENDER, xrender)
10766     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10767     FilterLibs "${XRENDER_LIBS}"
10768     XRENDER_LIBS="${filteredlibs}"
10769     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10770       [AC_MSG_ERROR(libXrender not found or functional)], [])
10771     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10772       [AC_MSG_ERROR(Xrender not found. install X)], [])
10773 else
10774     AC_MSG_RESULT([no])
10776 AC_SUBST(XRENDER_CFLAGS)
10777 AC_SUBST(XRENDER_LIBS)
10779 dnl ===================================================================
10780 dnl Check for XRandr
10781 dnl ===================================================================
10782 AC_MSG_CHECKING([whether to enable RandR support])
10783 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10784     AC_MSG_RESULT([yes])
10785     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10786     if test "$ENABLE_RANDR" != "TRUE"; then
10787         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10788                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10789         XRANDR_CFLAGS=" "
10790         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10791           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10792         XRANDR_LIBS="-lXrandr "
10793         ENABLE_RANDR="TRUE"
10794     fi
10795     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10796     FilterLibs "${XRANDR_LIBS}"
10797     XRANDR_LIBS="${filteredlibs}"
10798 else
10799     ENABLE_RANDR=""
10800     AC_MSG_RESULT([no])
10802 AC_SUBST(XRANDR_CFLAGS)
10803 AC_SUBST(XRANDR_LIBS)
10804 AC_SUBST(ENABLE_RANDR)
10806 if test "$test_webdav" = yes; then
10807     if test -z "$with_webdav"; then
10808         WITH_WEBDAV=neon
10809         if test "$enable_mpl_subset" = yes; then
10810             WITH_WEBDAV=serf
10811         fi
10812     else
10813         WITH_WEBDAV="$with_webdav"
10814     fi
10817 AC_MSG_CHECKING([for webdav library])
10818 case "$WITH_WEBDAV" in
10819 serf)
10820     AC_MSG_RESULT([serf])
10821     # Check for system apr-util
10822     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10823                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10824                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10825     if test "$COM" = "MSC"; then
10826         APR_LIB_DIR="LibR"
10827         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10828         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10829     fi
10831     # Check for system serf
10832     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10833     ;;
10834 neon)
10835     AC_MSG_RESULT([neon])
10836     # Check for system neon
10837     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10838     if test "$with_system_neon" = "yes"; then
10839         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10840     else
10841         NEON_VERSION=0312
10842     fi
10843     AC_SUBST(NEON_VERSION)
10844     ;;
10846     AC_MSG_RESULT([none, disabled])
10847     WITH_WEBDAV=""
10848     ;;
10849 esac
10850 AC_SUBST(WITH_WEBDAV)
10852 dnl ===================================================================
10853 dnl Check for disabling cve_tests
10854 dnl ===================================================================
10855 AC_MSG_CHECKING([whether to execute CVE tests])
10856 # If not explicitly enabled or disabled, default
10857 if test -z "$enable_cve_tests"; then
10858     case "$OS" in
10859     WNT)
10860         # Default cves off for Windows with its wild and wonderful
10861         # variety of AV software kicking in and panicking
10862         enable_cve_tests=no
10863         ;;
10864     *)
10865         # otherwise yes
10866         enable_cve_tests=yes
10867         ;;
10868     esac
10870 if test "$enable_cve_tests" = "no"; then
10871     AC_MSG_RESULT([no])
10872     DISABLE_CVE_TESTS=TRUE
10873     AC_SUBST(DISABLE_CVE_TESTS)
10874 else
10875     AC_MSG_RESULT([yes])
10878 dnl ===================================================================
10879 dnl Check for enabling chart XShape tests
10880 dnl ===================================================================
10881 AC_MSG_CHECKING([whether to execute chart XShape tests])
10882 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10883     AC_MSG_RESULT([yes])
10884     ENABLE_CHART_TESTS=TRUE
10885     AC_SUBST(ENABLE_CHART_TESTS)
10886 else
10887     AC_MSG_RESULT([no])
10890 dnl ===================================================================
10891 dnl Check for system openssl
10892 dnl ===================================================================
10893 ENABLE_OPENSSL=
10894 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10895 if test "$enable_openssl" = "yes"; then
10896     AC_MSG_RESULT([no])
10897     ENABLE_OPENSSL=TRUE
10898     if test "$_os" = Darwin ; then
10899         # OpenSSL is deprecated when building for 10.7 or later.
10900         #
10901         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10902         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10904         with_system_openssl=no
10905         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10906     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10907             && test "$with_system_openssl" != "no"; then
10908         with_system_openssl=yes
10909         SYSTEM_OPENSSL=TRUE
10910         OPENSSL_CFLAGS=
10911         OPENSSL_LIBS="-lssl -lcrypto"
10912     else
10913         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10914     fi
10915     if test "$with_system_openssl" = "yes"; then
10916         AC_MSG_CHECKING([whether openssl supports SHA512])
10917         AC_LANG_PUSH([C])
10918         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10919             SHA512_CTX context;
10920 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10921         AC_LANG_POP(C)
10922     fi
10923 else
10924     AC_MSG_RESULT([yes])
10926     # warn that although OpenSSL is disabled, system libraries may depend on it
10927     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10928     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10931 AC_SUBST([ENABLE_OPENSSL])
10933 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10934     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10935         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10936         enable_cipher_openssl_backend=no
10937     else
10938         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10939     fi
10941 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10942 ENABLE_CIPHER_OPENSSL_BACKEND=
10943 if test "$enable_cipher_openssl_backend" = yes; then
10944     AC_MSG_RESULT([yes])
10945     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10946 else
10947     AC_MSG_RESULT([no])
10949 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
10951 dnl ===================================================================
10952 dnl Select the crypto backends used by LO
10953 dnl ===================================================================
10955 if test "$build_crypto" = yes; then
10956     if test "$OS" = WNT; then
10957         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
10958         AC_DEFINE([USE_CRYPTO_MSCAPI])
10959     elif test "$ENABLE_NSS" = TRUE; then
10960         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
10961         AC_DEFINE([USE_CRYPTO_NSS])
10962     fi
10965 dnl ===================================================================
10966 dnl Check for building gnutls
10967 dnl ===================================================================
10968 AC_MSG_CHECKING([whether to use gnutls])
10969 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
10970     AC_MSG_RESULT([yes])
10971     AM_PATH_LIBGCRYPT()
10972     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
10973         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
10974                       available in the system to use as replacement.]]))
10975     FilterLibs "${LIBGCRYPT_LIBS}"
10976     LIBGCRYPT_LIBS="${filteredlibs}"
10977 else
10978     AC_MSG_RESULT([no])
10981 AC_SUBST([LIBGCRYPT_CFLAGS])
10982 AC_SUBST([LIBGCRYPT_LIBS])
10984 dnl ===================================================================
10985 dnl Check for system redland
10986 dnl ===================================================================
10987 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
10988 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
10989 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
10990 if test "$with_system_redland" = "yes"; then
10991     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
10992             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
10993 else
10994     RAPTOR_MAJOR="0"
10995     RASQAL_MAJOR="3"
10996     REDLAND_MAJOR="0"
10998 AC_SUBST(RAPTOR_MAJOR)
10999 AC_SUBST(RASQAL_MAJOR)
11000 AC_SUBST(REDLAND_MAJOR)
11002 dnl ===================================================================
11003 dnl Check for system hunspell
11004 dnl ===================================================================
11005 AC_MSG_CHECKING([which libhunspell to use])
11006 if test "$with_system_hunspell" = "yes"; then
11007     AC_MSG_RESULT([external])
11008     SYSTEM_HUNSPELL=TRUE
11009     AC_LANG_PUSH([C++])
11010     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11011     if test "$HUNSPELL_PC" != "TRUE"; then
11012         AC_CHECK_HEADER(hunspell.hxx, [],
11013             [
11014             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11015             [AC_MSG_ERROR(hunspell headers not found.)], [])
11016             ], [])
11017         AC_CHECK_LIB([hunspell], [main], [:],
11018            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11019         HUNSPELL_LIBS=-lhunspell
11020     fi
11021     AC_LANG_POP([C++])
11022     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11023     FilterLibs "${HUNSPELL_LIBS}"
11024     HUNSPELL_LIBS="${filteredlibs}"
11025 else
11026     AC_MSG_RESULT([internal])
11027     SYSTEM_HUNSPELL=
11028     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11029     if test "$COM" = "MSC"; then
11030         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11031     else
11032         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11033     fi
11034     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11036 AC_SUBST(SYSTEM_HUNSPELL)
11037 AC_SUBST(HUNSPELL_CFLAGS)
11038 AC_SUBST(HUNSPELL_LIBS)
11040 dnl ===================================================================
11041 dnl Check for system zxing
11042 dnl ===================================================================
11043 AC_MSG_CHECKING([whether to use zxing])
11044 if test "$enable_zxing" = "no"; then
11045     AC_MSG_RESULT([no])
11046     ENABLE_ZXING=
11047     SYSTEM_ZXING=
11048 else
11049     AC_MSG_RESULT([yes])
11050     ENABLE_ZXING=TRUE
11051     AC_MSG_CHECKING([which libzxing to use])
11052     if test "$with_system_zxing" = "yes"; then
11053         AC_MSG_RESULT([external])
11054         SYSTEM_ZXING=TRUE
11055         AC_LANG_PUSH([C++])
11056         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11057             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11058         ZXING_CFLAGS=-I/usr/include/ZXing
11059         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11060             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11061             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11062         AC_LANG_POP([C++])
11063         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11064         FilterLibs "${ZXING_LIBS}"
11065         ZXING_LIBS="${filteredlibs}"
11066     else
11067         AC_MSG_RESULT([internal])
11068         SYSTEM_ZXING=
11069         BUILD_TYPE="$BUILD_TYPE ZXING"
11070     fi
11071     if test "$ENABLE_ZXING" = TRUE; then
11072         AC_DEFINE(ENABLE_ZXING)
11073     fi
11075 AC_SUBST(SYSTEM_ZXING)
11076 AC_SUBST(ENABLE_ZXING)
11077 AC_SUBST(ZXING_CFLAGS)
11078 AC_SUBST(ZXING_LIBS)
11080 dnl ===================================================================
11081 dnl Check for system box2d
11082 dnl ===================================================================
11083 AC_MSG_CHECKING([which box2d to use])
11084 if test "$with_system_box2d" = "yes"; then
11085     AC_MSG_RESULT([external])
11086     SYSTEM_BOX2D=TRUE
11087     AC_LANG_PUSH([C++])
11088     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11089         [BOX2D_H_FOUND='FALSE'])
11090     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11091         _BOX2D_LIB=box2d
11092         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11093     else
11094         # fail this. there's no other alternative to check when we are here.
11095         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11096             [AC_MSG_ERROR(box2d headers not found.)])
11097         _BOX2D_LIB=Box2D
11098         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11099     fi
11100     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11101         [ AC_MSG_ERROR(box2d library not found.) ], [])
11102     BOX2D_LIBS=-l$_BOX2D_LIB
11103     AC_LANG_POP([C++])
11104     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11105     FilterLibs "${BOX2D_LIBS}"
11106     BOX2D_LIBS="${filteredlibs}"
11107 else
11108     AC_MSG_RESULT([internal])
11109     SYSTEM_BOX2D=
11110     BUILD_TYPE="$BUILD_TYPE BOX2D"
11112 AC_SUBST(SYSTEM_BOX2D)
11113 AC_SUBST(BOX2D_CFLAGS)
11114 AC_SUBST(BOX2D_LIBS)
11116 dnl ===================================================================
11117 dnl Checking for altlinuxhyph
11118 dnl ===================================================================
11119 AC_MSG_CHECKING([which altlinuxhyph to use])
11120 if test "$with_system_altlinuxhyph" = "yes"; then
11121     AC_MSG_RESULT([external])
11122     SYSTEM_HYPH=TRUE
11123     AC_CHECK_HEADER(hyphen.h, [],
11124        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11125     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11126        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11127        [#include <hyphen.h>])
11128     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11129         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11130     if test -z "$HYPHEN_LIB"; then
11131         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11132            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11133     fi
11134     if test -z "$HYPHEN_LIB"; then
11135         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11136            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11137     fi
11138 else
11139     AC_MSG_RESULT([internal])
11140     SYSTEM_HYPH=
11141     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11142     if test "$COM" = "MSC"; then
11143         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11144     else
11145         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11146     fi
11148 AC_SUBST(SYSTEM_HYPH)
11149 AC_SUBST(HYPHEN_LIB)
11151 dnl ===================================================================
11152 dnl Checking for mythes
11153 dnl ===================================================================
11154 AC_MSG_CHECKING([which mythes to use])
11155 if test "$with_system_mythes" = "yes"; then
11156     AC_MSG_RESULT([external])
11157     SYSTEM_MYTHES=TRUE
11158     AC_LANG_PUSH([C++])
11159     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11160     if test "$MYTHES_PKGCONFIG" = "no"; then
11161         AC_CHECK_HEADER(mythes.hxx, [],
11162             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11163         AC_CHECK_LIB([mythes-1.2], [main], [:],
11164             [ MYTHES_FOUND=no], [])
11165     if test "$MYTHES_FOUND" = "no"; then
11166         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11167                 [ MYTHES_FOUND=no], [])
11168     fi
11169     if test "$MYTHES_FOUND" = "no"; then
11170         AC_MSG_ERROR([mythes library not found!.])
11171     fi
11172     fi
11173     AC_LANG_POP([C++])
11174     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11175     FilterLibs "${MYTHES_LIBS}"
11176     MYTHES_LIBS="${filteredlibs}"
11177 else
11178     AC_MSG_RESULT([internal])
11179     SYSTEM_MYTHES=
11180     BUILD_TYPE="$BUILD_TYPE MYTHES"
11181     if test "$COM" = "MSC"; then
11182         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11183     else
11184         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11185     fi
11187 AC_SUBST(SYSTEM_MYTHES)
11188 AC_SUBST(MYTHES_CFLAGS)
11189 AC_SUBST(MYTHES_LIBS)
11191 dnl ===================================================================
11192 dnl How should we build the linear programming solver ?
11193 dnl ===================================================================
11195 ENABLE_COINMP=
11196 AC_MSG_CHECKING([whether to build with CoinMP])
11197 if test "$enable_coinmp" != "no"; then
11198     ENABLE_COINMP=TRUE
11199     AC_MSG_RESULT([yes])
11200     if test "$with_system_coinmp" = "yes"; then
11201         SYSTEM_COINMP=TRUE
11202         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11203         FilterLibs "${COINMP_LIBS}"
11204         COINMP_LIBS="${filteredlibs}"
11205     else
11206         BUILD_TYPE="$BUILD_TYPE COINMP"
11207     fi
11208 else
11209     AC_MSG_RESULT([no])
11211 AC_SUBST(ENABLE_COINMP)
11212 AC_SUBST(SYSTEM_COINMP)
11213 AC_SUBST(COINMP_CFLAGS)
11214 AC_SUBST(COINMP_LIBS)
11216 ENABLE_LPSOLVE=
11217 AC_MSG_CHECKING([whether to build with lpsolve])
11218 if test "$enable_lpsolve" != "no"; then
11219     ENABLE_LPSOLVE=TRUE
11220     AC_MSG_RESULT([yes])
11221 else
11222     AC_MSG_RESULT([no])
11224 AC_SUBST(ENABLE_LPSOLVE)
11226 if test "$ENABLE_LPSOLVE" = TRUE; then
11227     AC_MSG_CHECKING([which lpsolve to use])
11228     if test "$with_system_lpsolve" = "yes"; then
11229         AC_MSG_RESULT([external])
11230         SYSTEM_LPSOLVE=TRUE
11231         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11232            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11233         save_LIBS=$LIBS
11234         # some systems need this. Like Ubuntu...
11235         AC_CHECK_LIB(m, floor)
11236         AC_CHECK_LIB(dl, dlopen)
11237         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11238             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11239         LIBS=$save_LIBS
11240     else
11241         AC_MSG_RESULT([internal])
11242         SYSTEM_LPSOLVE=
11243         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11244     fi
11246 AC_SUBST(SYSTEM_LPSOLVE)
11248 dnl ===================================================================
11249 dnl Checking for libexttextcat
11250 dnl ===================================================================
11251 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11252 if test "$with_system_libexttextcat" = "yes"; then
11253     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11255 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11257 dnl ===================================================================
11258 dnl Checking for libnumbertext
11259 dnl ===================================================================
11260 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11261 if test "$with_system_libnumbertext" = "yes"; then
11262     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11263     SYSTEM_LIBNUMBERTEXT=YES
11264 else
11265     SYSTEM_LIBNUMBERTEXT=
11266     AC_LANG_PUSH([C++])
11267     save_CPPFLAGS=$CPPFLAGS
11268     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11269     AC_CHECK_HEADERS([codecvt regex])
11270     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11271             [ LIBNUMBERTEXT_CFLAGS=''
11272               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11273                            Enable libnumbertext fallback (missing number to number name conversion).])
11274             ])
11275     CPPFLAGS=$save_CPPFLAGS
11276     AC_LANG_POP([C++])
11278 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11279 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11280 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11282 dnl ***************************************
11283 dnl testing libc version for Linux...
11284 dnl ***************************************
11285 if test "$_os" = "Linux"; then
11286     AC_MSG_CHECKING([whether libc is >= 2.1.1])
11287     exec 6>/dev/null # no output
11288     AC_CHECK_LIB(c, gnu_get_libc_version, HAVE_LIBC=yes; export HAVE_LIBC)
11289     exec 6>&1 # output on again
11290     if test "$HAVE_LIBC"; then
11291         AC_MSG_RESULT([yes])
11292     else
11293         AC_MSG_ERROR([no, upgrade libc])
11294     fi
11297 dnl =========================================
11298 dnl Check for uuidgen
11299 dnl =========================================
11300 if test "$_os" = "WINNT"; then
11301     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11302     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11303     UUIDGEN=uuidgen.exe
11304     AC_SUBST(UUIDGEN)
11305 else
11306     AC_PATH_PROG([UUIDGEN], [uuidgen])
11307     if test -z "$UUIDGEN"; then
11308         AC_MSG_WARN([uuid is needed for building installation sets])
11309     fi
11312 dnl ***************************************
11313 dnl Checking for bison and flex
11314 dnl ***************************************
11315 AC_PATH_PROG(BISON, bison)
11316 if test -z "$BISON"; then
11317     AC_MSG_ERROR([no bison found in \$PATH, install it])
11318 else
11319     AC_MSG_CHECKING([the bison version])
11320     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11321     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11322     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11323     dnl cause
11324     dnl
11325     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]
11326     dnl   typedef union YYSTYPE
11327     dnl           ~~~~~~^~~~~~~
11328     dnl
11329     dnl while at least 3.4.1 is know to be good:
11330     if test "$COMPILER_PLUGINS" = TRUE; then
11331         if test "$_bison_longver" -lt 2004; then
11332             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11333         fi
11334     else
11335         if test "$_bison_longver" -lt 2000; then
11336             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11337         fi
11338     fi
11340 AC_SUBST([BISON])
11342 AC_PATH_PROG(FLEX, flex)
11343 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11344     FLEX=`cygpath -m $FLEX`
11346 if test -z "$FLEX"; then
11347     AC_MSG_ERROR([no flex found in \$PATH, install it])
11348 else
11349     AC_MSG_CHECKING([the flex version])
11350     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11351     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11352         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11353     fi
11355 AC_SUBST([FLEX])
11356 dnl ***************************************
11357 dnl Checking for patch
11358 dnl ***************************************
11359 AC_PATH_PROG(PATCH, patch)
11360 if test -z "$PATCH"; then
11361     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11364 dnl On Solaris or macOS, check if --with-gnu-patch was used
11365 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11366     if test -z "$with_gnu_patch"; then
11367         GNUPATCH=$PATCH
11368     else
11369         if test -x "$with_gnu_patch"; then
11370             GNUPATCH=$with_gnu_patch
11371         else
11372             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11373         fi
11374     fi
11376     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11377     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11378         AC_MSG_RESULT([yes])
11379     else
11380         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11381     fi
11382 else
11383     GNUPATCH=$PATCH
11386 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11387     GNUPATCH=`cygpath -m $GNUPATCH`
11390 dnl We also need to check for --with-gnu-cp
11392 if test -z "$with_gnu_cp"; then
11393     # check the place where the good stuff is hidden on Solaris...
11394     if test -x /usr/gnu/bin/cp; then
11395         GNUCP=/usr/gnu/bin/cp
11396     else
11397         AC_PATH_PROGS(GNUCP, gnucp cp)
11398     fi
11399     if test -z $GNUCP; then
11400         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11401     fi
11402 else
11403     if test -x "$with_gnu_cp"; then
11404         GNUCP=$with_gnu_cp
11405     else
11406         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11407     fi
11410 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11411     GNUCP=`cygpath -m $GNUCP`
11414 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11415 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11416     AC_MSG_RESULT([yes])
11417 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11418     AC_MSG_RESULT([yes])
11419 else
11420     case "$build_os" in
11421     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11422         x_GNUCP=[\#]
11423         GNUCP=''
11424         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11425         ;;
11426     *)
11427         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11428         ;;
11429     esac
11432 AC_SUBST(GNUPATCH)
11433 AC_SUBST(GNUCP)
11434 AC_SUBST(x_GNUCP)
11436 dnl ***************************************
11437 dnl testing assembler path
11438 dnl ***************************************
11439 ML_EXE=""
11440 if test "$_os" = "WINNT"; then
11441     case "$WIN_HOST_ARCH" in
11442     x86) assembler=ml.exe ;;
11443     x64) assembler=ml64.exe ;;
11444     arm64) assembler=armasm64.exe ;;
11445     esac
11447     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11448     if test -f "$MSVC_HOST_PATH/$assembler"; then
11449         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11450         AC_MSG_RESULT([$ML_EXE])
11451     else
11452         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11453     fi
11456 AC_SUBST(ML_EXE)
11458 dnl ===================================================================
11459 dnl We need zip and unzip
11460 dnl ===================================================================
11461 AC_PATH_PROG(ZIP, zip)
11462 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11463 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11464     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],,)
11467 AC_PATH_PROG(UNZIP, unzip)
11468 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11470 dnl ===================================================================
11471 dnl Zip must be a specific type for different build types.
11472 dnl ===================================================================
11473 if test $build_os = cygwin; then
11474     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11475         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11476     fi
11479 dnl ===================================================================
11480 dnl We need touch with -h option support.
11481 dnl ===================================================================
11482 AC_PATH_PROG(TOUCH, touch)
11483 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11484 touch "$WARNINGS_FILE"
11485 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11486     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],,)
11489 dnl ===================================================================
11490 dnl Check for system epoxy
11491 dnl ===================================================================
11492 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11494 dnl ===================================================================
11495 dnl Set vcl option: coordinate device in double or sal_Int32
11496 dnl ===================================================================
11498 dnl disabled for now, we don't want subtle differences between OSs
11499 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11500 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11501 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11502 dnl     AC_MSG_RESULT([double])
11503 dnl else
11504 dnl     AC_MSG_RESULT([sal_Int32])
11505 dnl fi
11507 dnl ===================================================================
11508 dnl Show which vclplugs will be built.
11509 dnl ===================================================================
11510 R=""
11511 if test "$USING_X11" != TRUE; then
11512     enable_gtk3=no
11515 ENABLE_GTK3=""
11516 if test "x$enable_gtk3" = "xyes"; then
11517     ENABLE_GTK3="TRUE"
11518     AC_DEFINE(ENABLE_GTK3)
11519     R="$R gtk3"
11521 AC_SUBST(ENABLE_GTK3)
11523 ENABLE_GTK3_KDE5=""
11524 if test "x$enable_gtk3_kde5" = "xyes"; then
11525     ENABLE_GTK3_KDE5="TRUE"
11526     AC_DEFINE(ENABLE_GTK3_KDE5)
11527     R="$R gtk3_kde5"
11529 AC_SUBST(ENABLE_GTK3_KDE5)
11531 ENABLE_GTK4=""
11532 if test "x$enable_gtk4" = "xyes"; then
11533     ENABLE_GTK4="TRUE"
11534     AC_DEFINE(ENABLE_GTK4)
11535     R="$R gtk4"
11537 AC_SUBST(ENABLE_GTK4)
11539 ENABLE_QT5=""
11540 if test "x$enable_qt5" = "xyes"; then
11541     ENABLE_QT5="TRUE"
11542     AC_DEFINE(ENABLE_QT5)
11543     R="$R qt5"
11545 AC_SUBST(ENABLE_QT5)
11547 ENABLE_KF5=""
11548 if test "x$enable_kf5" = "xyes"; then
11549     ENABLE_KF5="TRUE"
11550     AC_DEFINE(ENABLE_KF5)
11551     R="$R kf5"
11553 AC_SUBST(ENABLE_KF5)
11555 if test "x$USING_X11" = "xyes"; then
11556     R="$R gen"
11559 if test "$_os" = "WINNT"; then
11560     R="$R win"
11561 elif test "$_os" = "Darwin"; then
11562     R="$R osx"
11563 elif test "$_os" = "iOS"; then
11564     R="ios"
11565 elif test "$_os" = Android; then
11566     R="android"
11569 build_vcl_plugins="$R"
11570 if test -z "$build_vcl_plugins"; then
11571     build_vcl_plugins=" none"
11573 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11574 VCL_PLUGIN_INFO=$R
11575 AC_SUBST([VCL_PLUGIN_INFO])
11577 dnl ===================================================================
11578 dnl Check for GTK libraries
11579 dnl ===================================================================
11581 GTK3_CFLAGS=""
11582 GTK3_LIBS=""
11583 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11584     if test "$with_system_cairo" = no; then
11585         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11586     fi
11587     : ${with_system_cairo:=yes}
11588     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)
11589     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11590     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11591     FilterLibs "${GTK3_LIBS}"
11592     GTK3_LIBS="${filteredlibs}"
11594     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11595     if test "$with_system_epoxy" != "yes"; then
11596         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11597         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11598                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11599     fi
11601 AC_SUBST(GTK3_LIBS)
11602 AC_SUBST(GTK3_CFLAGS)
11604 GTK4_CFLAGS=""
11605 GTK4_LIBS=""
11606 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11607     if test "$with_system_cairo" = no; then
11608         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11609     fi
11610     : ${with_system_cairo:=yes}
11611     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11612     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11613     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11614     FilterLibs "${GTK4_LIBS}"
11615     GTK4_LIBS="${filteredlibs}"
11617     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11618     if test "$with_system_epoxy" != "yes"; then
11619         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11620         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11621                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11622     fi
11624 AC_SUBST(GTK4_LIBS)
11625 AC_SUBST(GTK4_CFLAGS)
11627 if test "$enable_introspection" = yes; then
11628     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11629         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11630     else
11631         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11632     fi
11635 dnl ===================================================================
11636 dnl check for dbus support
11637 dnl ===================================================================
11638 ENABLE_DBUS=""
11639 DBUS_CFLAGS=""
11640 DBUS_LIBS=""
11641 DBUS_GLIB_CFLAGS=""
11642 DBUS_GLIB_LIBS=""
11643 DBUS_HAVE_GLIB=""
11645 if test "$enable_dbus" = "no"; then
11646     test_dbus=no
11649 AC_MSG_CHECKING([whether to enable DBUS support])
11650 if test "$test_dbus" = "yes"; then
11651     ENABLE_DBUS="TRUE"
11652     AC_MSG_RESULT([yes])
11653     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11654     AC_DEFINE(ENABLE_DBUS)
11655     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11656     FilterLibs "${DBUS_LIBS}"
11657     DBUS_LIBS="${filteredlibs}"
11659     # Glib is needed for BluetoothServer
11660     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11661     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11662         [
11663             DBUS_HAVE_GLIB="TRUE"
11664             AC_DEFINE(DBUS_HAVE_GLIB,1)
11665         ],
11666         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11667     )
11668 else
11669     AC_MSG_RESULT([no])
11672 AC_SUBST(ENABLE_DBUS)
11673 AC_SUBST(DBUS_CFLAGS)
11674 AC_SUBST(DBUS_LIBS)
11675 AC_SUBST(DBUS_GLIB_CFLAGS)
11676 AC_SUBST(DBUS_GLIB_LIBS)
11677 AC_SUBST(DBUS_HAVE_GLIB)
11679 AC_MSG_CHECKING([whether to enable Impress remote control])
11680 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11681     AC_MSG_RESULT([yes])
11682     ENABLE_SDREMOTE=TRUE
11683     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11685     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11686         # The Bluetooth code doesn't compile with macOS SDK 10.15
11687         if test "$enable_sdremote_bluetooth" = yes; then
11688             AC_MSG_ERROR([macOS SDK $with_macosx_sdk does not currently support --enable-sdremote-bluetooth])
11689         fi
11690         enable_sdremote_bluetooth=no
11691     fi
11692     # If not explicitly enabled or disabled, default
11693     if test -z "$enable_sdremote_bluetooth"; then
11694         case "$OS" in
11695         LINUX|MACOSX|WNT)
11696             # Default to yes for these
11697             enable_sdremote_bluetooth=yes
11698             ;;
11699         *)
11700             # otherwise no
11701             enable_sdremote_bluetooth=no
11702             ;;
11703         esac
11704     fi
11705     # $enable_sdremote_bluetooth is guaranteed non-empty now
11707     if test "$enable_sdremote_bluetooth" != "no"; then
11708         if test "$OS" = "LINUX"; then
11709             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11710                 AC_MSG_RESULT([yes])
11711                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11712                 dnl ===================================================================
11713                 dnl Check for system bluez
11714                 dnl ===================================================================
11715                 AC_MSG_CHECKING([which Bluetooth header to use])
11716                 if test "$with_system_bluez" = "yes"; then
11717                     AC_MSG_RESULT([external])
11718                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11719                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11720                     SYSTEM_BLUEZ=TRUE
11721                 else
11722                     AC_MSG_RESULT([internal])
11723                     SYSTEM_BLUEZ=
11724                 fi
11725             else
11726                 AC_MSG_RESULT([no, dbus disabled])
11727                 ENABLE_SDREMOTE_BLUETOOTH=
11728                 SYSTEM_BLUEZ=
11729             fi
11730         else
11731             AC_MSG_RESULT([yes])
11732             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11733             SYSTEM_BLUEZ=
11734         fi
11735     else
11736         AC_MSG_RESULT([no])
11737         ENABLE_SDREMOTE_BLUETOOTH=
11738         SYSTEM_BLUEZ=
11739     fi
11740 else
11741     ENABLE_SDREMOTE=
11742     SYSTEM_BLUEZ=
11743     AC_MSG_RESULT([no])
11745 AC_SUBST(ENABLE_SDREMOTE)
11746 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11747 AC_SUBST(SYSTEM_BLUEZ)
11749 dnl ===================================================================
11750 dnl Check whether to enable GIO support
11751 dnl ===================================================================
11752 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11753     AC_MSG_CHECKING([whether to enable GIO support])
11754     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11755         dnl Need at least 2.26 for the dbus support.
11756         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11757                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11758         if test "$ENABLE_GIO" = "TRUE"; then
11759             AC_DEFINE(ENABLE_GIO)
11760             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11761             FilterLibs "${GIO_LIBS}"
11762             GIO_LIBS="${filteredlibs}"
11763         fi
11764     else
11765         AC_MSG_RESULT([no])
11766     fi
11768 AC_SUBST(ENABLE_GIO)
11769 AC_SUBST(GIO_CFLAGS)
11770 AC_SUBST(GIO_LIBS)
11773 dnl ===================================================================
11775 SPLIT_APP_MODULES=""
11776 if test "$enable_split_app_modules" = "yes"; then
11777     SPLIT_APP_MODULES="TRUE"
11779 AC_SUBST(SPLIT_APP_MODULES)
11781 SPLIT_OPT_FEATURES=""
11782 if test "$enable_split_opt_features" = "yes"; then
11783     SPLIT_OPT_FEATURES="TRUE"
11785 AC_SUBST(SPLIT_OPT_FEATURES)
11787 dnl ===================================================================
11788 dnl Check whether the GStreamer libraries are available.
11789 dnl ===================================================================
11791 ENABLE_GSTREAMER_1_0=""
11793 if test "$test_gstreamer_1_0" = yes; then
11795     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11796     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11797         ENABLE_GSTREAMER_1_0="TRUE"
11798         AC_MSG_RESULT([yes])
11799         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11800         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11801         FilterLibs "${GSTREAMER_1_0_LIBS}"
11802         GSTREAMER_1_0_LIBS="${filteredlibs}"
11803         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11804     else
11805         AC_MSG_RESULT([no])
11806     fi
11808 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11809 AC_SUBST(GSTREAMER_1_0_LIBS)
11810 AC_SUBST(ENABLE_GSTREAMER_1_0)
11812 ENABLE_OPENGL_TRANSITIONS=
11813 ENABLE_OPENGL_CANVAS=
11814 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11815    : # disable
11816 elif test "$_os" = "Darwin"; then
11817     # We use frameworks on macOS, no need for detail checks
11818     ENABLE_OPENGL_TRANSITIONS=TRUE
11819     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11820     ENABLE_OPENGL_CANVAS=TRUE
11821 elif test $_os = WINNT; then
11822     ENABLE_OPENGL_TRANSITIONS=TRUE
11823     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11824     ENABLE_OPENGL_CANVAS=TRUE
11825 else
11826     if test "$USING_X11" = TRUE; then
11827         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11828         ENABLE_OPENGL_TRANSITIONS=TRUE
11829         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11830         ENABLE_OPENGL_CANVAS=TRUE
11831     fi
11834 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11835 AC_SUBST(ENABLE_OPENGL_CANVAS)
11837 dnl =================================================
11838 dnl Check whether to build with OpenCL support.
11839 dnl =================================================
11841 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11842     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11843     # platform (optional at run-time, used through clew).
11844     BUILD_TYPE="$BUILD_TYPE OPENCL"
11845     AC_DEFINE(HAVE_FEATURE_OPENCL)
11848 dnl =================================================
11849 dnl Check whether to build with dconf support.
11850 dnl =================================================
11852 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11853     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11854         if test "$enable_dconf" = yes; then
11855             AC_MSG_ERROR([dconf not found])
11856         else
11857             enable_dconf=no
11858         fi])
11860 AC_MSG_CHECKING([whether to enable dconf])
11861 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11862     DCONF_CFLAGS=
11863     DCONF_LIBS=
11864     ENABLE_DCONF=
11865     AC_MSG_RESULT([no])
11866 else
11867     ENABLE_DCONF=TRUE
11868     AC_DEFINE(ENABLE_DCONF)
11869     AC_MSG_RESULT([yes])
11871 AC_SUBST([DCONF_CFLAGS])
11872 AC_SUBST([DCONF_LIBS])
11873 AC_SUBST([ENABLE_DCONF])
11875 # pdf import?
11876 AC_MSG_CHECKING([whether to build the PDF import feature])
11877 ENABLE_PDFIMPORT=
11878 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11879     AC_MSG_RESULT([yes])
11880     ENABLE_PDFIMPORT=TRUE
11881     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11882 else
11883     AC_MSG_RESULT([no])
11886 # Pdfium?
11887 AC_MSG_CHECKING([whether to build PDFium])
11888 ENABLE_PDFIUM=
11889 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11890     AC_MSG_RESULT([yes])
11891     ENABLE_PDFIUM=TRUE
11892     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11893 else
11894     AC_MSG_RESULT([no])
11896 AC_SUBST(ENABLE_PDFIUM)
11898 dnl ===================================================================
11899 dnl Check for poppler
11900 dnl ===================================================================
11901 ENABLE_POPPLER=
11902 AC_MSG_CHECKING([whether to build Poppler])
11903 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11904     AC_MSG_RESULT([yes])
11905     ENABLE_POPPLER=TRUE
11906     AC_DEFINE(HAVE_FEATURE_POPPLER)
11907 else
11908     AC_MSG_RESULT([no])
11910 AC_SUBST(ENABLE_POPPLER)
11912 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
11913     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
11916 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
11917     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
11920 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
11921     dnl ===================================================================
11922     dnl Check for system poppler
11923     dnl ===================================================================
11924     AC_MSG_CHECKING([which PDF import poppler to use])
11925     if test "$with_system_poppler" = "yes"; then
11926         AC_MSG_RESULT([external])
11927         SYSTEM_POPPLER=TRUE
11928         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
11929         AC_LANG_PUSH([C++])
11930         save_CXXFLAGS=$CXXFLAGS
11931         save_CPPFLAGS=$CPPFLAGS
11932         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
11933         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
11934         AC_CHECK_HEADER([cpp/poppler-version.h],
11935             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
11936             [])
11937         CXXFLAGS=$save_CXXFLAGS
11938         CPPFLAGS=$save_CPPFLAGS
11939         AC_LANG_POP([C++])
11940         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11942         FilterLibs "${POPPLER_LIBS}"
11943         POPPLER_LIBS="${filteredlibs}"
11944     else
11945         AC_MSG_RESULT([internal])
11946         SYSTEM_POPPLER=
11947         BUILD_TYPE="$BUILD_TYPE POPPLER"
11948         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
11949     fi
11950     AC_DEFINE([ENABLE_PDFIMPORT],1)
11952 AC_SUBST(ENABLE_PDFIMPORT)
11953 AC_SUBST(SYSTEM_POPPLER)
11954 AC_SUBST(POPPLER_CFLAGS)
11955 AC_SUBST(POPPLER_LIBS)
11957 # Skia?
11958 AC_MSG_CHECKING([whether to build Skia])
11959 ENABLE_SKIA=
11960 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
11961     if test "$enable_skia" = "debug"; then
11962         AC_MSG_RESULT([yes (debug)])
11963         ENABLE_SKIA_DEBUG=TRUE
11964     else
11965         AC_MSG_RESULT([yes])
11966         ENABLE_SKIA_DEBUG=
11967     fi
11968     ENABLE_SKIA=TRUE
11969     AC_DEFINE(HAVE_FEATURE_SKIA)
11970     BUILD_TYPE="$BUILD_TYPE SKIA"
11971 else
11972     AC_MSG_RESULT([no])
11974 AC_SUBST(ENABLE_SKIA)
11975 AC_SUBST(ENABLE_SKIA_DEBUG)
11977 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
11978 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
11979 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
11980 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
11981 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
11982 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
11983 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
11984 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
11985 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
11987 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE -a ! \( "$_os" = "WINNT" -a "$CPUNAME" = "AARCH64" \); then
11988     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
11989         AC_MSG_CHECKING([for Clang])
11990         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
11991     else
11992         if test "$_os" = "WINNT"; then
11993             AC_MSG_CHECKING([for clang-cl])
11994             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
11995                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
11996                 dnl explicitly set -m32/-m64
11997                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
11998                 LO_CLANG_CXX="$LO_CLANG_CC"
11999                 AC_MSG_RESULT([$LO_CLANG_CC])
12000             else
12001                 AC_MSG_RESULT([no])
12002             fi
12003         else
12004             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12005             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12006         fi
12007     fi
12008     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12009         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12010         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12011         if test "$clang2_ver" -lt 50002; then
12012             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12013             LO_CLANG_CC=
12014             LO_CLANG_CXX=
12015         fi
12016     fi
12017     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12018         # Skia is the default on Windows, so hard-require Clang.
12019         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12020         if test "$_os" = "WINNT"; then
12021             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang.])
12022         else
12023             AC_MSG_WARN([Clang compiler not found.])
12024         fi
12025     else
12027         save_CXX="$CXX"
12028         CXX="$LO_CLANG_CXX"
12029         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12030         flag_sse2=-msse2
12031         flag_ssse3=-mssse3
12032         flag_sse41=-msse4.1
12033         flag_sse42=-msse4.2
12034         flag_avx=-mavx
12035         flag_avx2=-mavx2
12036         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12037         flag_f16c=-mf16c
12038         flag_fma=-mfma
12040         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12041         AC_LANG_PUSH([C++])
12042         save_CXXFLAGS=$CXXFLAGS
12043         CXXFLAGS="$CXXFLAGS $flag_sse2"
12044         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12045             #include <emmintrin.h>
12046             int main () {
12047                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12048                 c = _mm_xor_si128 (a, b);
12049                 return 0;
12050             }
12051             ])],
12052             [can_compile_sse2=yes],
12053             [can_compile_sse2=no])
12054         AC_LANG_POP([C++])
12055         CXXFLAGS=$save_CXXFLAGS
12056         AC_MSG_RESULT([${can_compile_sse2}])
12057         if test "${can_compile_sse2}" = "yes" ; then
12058             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12059         fi
12061         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12062         AC_LANG_PUSH([C++])
12063         save_CXXFLAGS=$CXXFLAGS
12064         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12065         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12066             #include <tmmintrin.h>
12067             int main () {
12068                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12069                 c = _mm_maddubs_epi16 (a, b);
12070                 return 0;
12071             }
12072             ])],
12073             [can_compile_ssse3=yes],
12074             [can_compile_ssse3=no])
12075         AC_LANG_POP([C++])
12076         CXXFLAGS=$save_CXXFLAGS
12077         AC_MSG_RESULT([${can_compile_ssse3}])
12078         if test "${can_compile_ssse3}" = "yes" ; then
12079             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12080         fi
12082         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12083         AC_LANG_PUSH([C++])
12084         save_CXXFLAGS=$CXXFLAGS
12085         CXXFLAGS="$CXXFLAGS $flag_sse41"
12086         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12087             #include <smmintrin.h>
12088             int main () {
12089                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12090                 c = _mm_cmpeq_epi64 (a, b);
12091                 return 0;
12092             }
12093             ])],
12094             [can_compile_sse41=yes],
12095             [can_compile_sse41=no])
12096         AC_LANG_POP([C++])
12097         CXXFLAGS=$save_CXXFLAGS
12098         AC_MSG_RESULT([${can_compile_sse41}])
12099         if test "${can_compile_sse41}" = "yes" ; then
12100             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12101         fi
12103         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12104         AC_LANG_PUSH([C++])
12105         save_CXXFLAGS=$CXXFLAGS
12106         CXXFLAGS="$CXXFLAGS $flag_sse42"
12107         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12108             #include <nmmintrin.h>
12109             int main () {
12110                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12111                 c = _mm_cmpgt_epi64 (a, b);
12112                 return 0;
12113             }
12114             ])],
12115             [can_compile_sse42=yes],
12116             [can_compile_sse42=no])
12117         AC_LANG_POP([C++])
12118         CXXFLAGS=$save_CXXFLAGS
12119         AC_MSG_RESULT([${can_compile_sse42}])
12120         if test "${can_compile_sse42}" = "yes" ; then
12121             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12122         fi
12124         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12125         AC_LANG_PUSH([C++])
12126         save_CXXFLAGS=$CXXFLAGS
12127         CXXFLAGS="$CXXFLAGS $flag_avx"
12128         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12129             #include <immintrin.h>
12130             int main () {
12131                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12132                 c = _mm256_xor_ps(a, b);
12133                 return 0;
12134             }
12135             ])],
12136             [can_compile_avx=yes],
12137             [can_compile_avx=no])
12138         AC_LANG_POP([C++])
12139         CXXFLAGS=$save_CXXFLAGS
12140         AC_MSG_RESULT([${can_compile_avx}])
12141         if test "${can_compile_avx}" = "yes" ; then
12142             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12143         fi
12145         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12146         AC_LANG_PUSH([C++])
12147         save_CXXFLAGS=$CXXFLAGS
12148         CXXFLAGS="$CXXFLAGS $flag_avx2"
12149         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12150             #include <immintrin.h>
12151             int main () {
12152                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12153                 c = _mm256_maddubs_epi16(a, b);
12154                 return 0;
12155             }
12156             ])],
12157             [can_compile_avx2=yes],
12158             [can_compile_avx2=no])
12159         AC_LANG_POP([C++])
12160         CXXFLAGS=$save_CXXFLAGS
12161         AC_MSG_RESULT([${can_compile_avx2}])
12162         if test "${can_compile_avx2}" = "yes" ; then
12163             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12164         fi
12166         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12167         AC_LANG_PUSH([C++])
12168         save_CXXFLAGS=$CXXFLAGS
12169         CXXFLAGS="$CXXFLAGS $flag_avx512"
12170         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12171             #include <immintrin.h>
12172             int main () {
12173                 __m512i a = _mm512_loadu_si512(0);
12174                 return 0;
12175             }
12176             ])],
12177             [can_compile_avx512=yes],
12178             [can_compile_avx512=no])
12179         AC_LANG_POP([C++])
12180         CXXFLAGS=$save_CXXFLAGS
12181         AC_MSG_RESULT([${can_compile_avx512}])
12182         if test "${can_compile_avx512}" = "yes" ; then
12183             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12184         fi
12186         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12187         AC_LANG_PUSH([C++])
12188         save_CXXFLAGS=$CXXFLAGS
12189         CXXFLAGS="$CXXFLAGS $flag_f16c"
12190         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12191             #include <immintrin.h>
12192             int main () {
12193                 __m128i a = _mm_set1_epi32 (0);
12194                 __m128 c;
12195                 c = _mm_cvtph_ps(a);
12196                 return 0;
12197             }
12198             ])],
12199             [can_compile_f16c=yes],
12200             [can_compile_f16c=no])
12201         AC_LANG_POP([C++])
12202         CXXFLAGS=$save_CXXFLAGS
12203         AC_MSG_RESULT([${can_compile_f16c}])
12204         if test "${can_compile_f16c}" = "yes" ; then
12205             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12206         fi
12208         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12209         AC_LANG_PUSH([C++])
12210         save_CXXFLAGS=$CXXFLAGS
12211         CXXFLAGS="$CXXFLAGS $flag_fma"
12212         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12213             #include <immintrin.h>
12214             int main () {
12215                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12216                 d = _mm256_fmadd_ps(a, b, c);
12217                 return 0;
12218             }
12219             ])],
12220             [can_compile_fma=yes],
12221             [can_compile_fma=no])
12222         AC_LANG_POP([C++])
12223         CXXFLAGS=$save_CXXFLAGS
12224         AC_MSG_RESULT([${can_compile_fma}])
12225         if test "${can_compile_fma}" = "yes" ; then
12226             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12227         fi
12229         CXX="$save_CXX"
12230     fi
12233 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12235 UNCACHED_CLANG_CC="$LO_CLANG_CC"
12236 UNCACHED_CLANG_CXX="$LO_CLANG_CXX"
12237 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12238     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12239     AC_LANG_PUSH([C])
12240     save_CC="$CC"
12241     CC="$LO_CLANG_CC"
12242     save_CFLAGS=$CFLAGS
12243     CFLAGS="$CFLAGS --ccache-skip -O2"
12244     dnl an empty program will do, we're checking the compiler flags
12245     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12246                       [use_ccache=yes], [use_ccache=no])
12247     CFLAGS=$save_CFLAGS
12248     CC=$save_CC
12249     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12250         AC_MSG_RESULT([yes])
12251     else
12252         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12253         AC_MSG_RESULT([no])
12254     fi
12255     AC_LANG_POP([C])
12257     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12258     AC_LANG_PUSH([C++])
12259     save_CXX="$CXX"
12260     CXX="$LO_CLANG_CXX"
12261     save_CXXFLAGS=$CXXFLAGS
12262     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
12263     dnl an empty program will do, we're checking the compiler flags
12264     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12265                       [use_ccache=yes], [use_ccache=no])
12266     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12267         AC_MSG_RESULT([yes])
12268     else
12269         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12270         AC_MSG_RESULT([no])
12271     fi
12272     CXXFLAGS=$save_CXXFLAGS
12273     CXX=$save_CXX
12274     AC_LANG_POP([C++])
12277 AC_SUBST(UNCACHED_CC)
12278 AC_SUBST(UNCACHED_CXX)
12279 AC_SUBST(LO_CLANG_CC)
12280 AC_SUBST(LO_CLANG_CXX)
12281 AC_SUBST(UNCACHED_CLANG_CC)
12282 AC_SUBST(UNCACHED_CLANG_CXX)
12283 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12284 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12285 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12286 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12287 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12288 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12289 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12290 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12291 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12292 AC_SUBST(CLANG_USE_LD)
12294 SYSTEM_GPGMEPP=
12296 if test "$enable_gpgmepp" = no; then
12297     AC_MSG_CHECKING([whether to enable gpgmepp])
12298     AC_MSG_RESULT([no])
12299 elif test "$enable_mpl_subset" = "yes"; then
12300     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12301     AC_MSG_RESULT([yes])
12302 elif test "$enable_fuzzers" = "yes"; then
12303     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12304     AC_MSG_RESULT([yes])
12305 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12306     dnl ===================================================================
12307     dnl Check for system gpgme
12308     dnl ===================================================================
12309     AC_MSG_CHECKING([which gpgmepp to use])
12310     if test "$with_system_gpgmepp" = "yes"; then
12311         AC_MSG_RESULT([external])
12312         SYSTEM_GPGMEPP=TRUE
12314         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12315         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12316             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12317         # progress_callback is the only func with plain C linkage
12318         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12319         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12320             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12321         AC_CHECK_HEADER(gpgme.h, [],
12322             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12323     else
12324         AC_MSG_RESULT([internal])
12325         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12326         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12328         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12329         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12330         if test "$_os" != "WINNT"; then
12331             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12332             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12333         fi
12334     fi
12335     ENABLE_GPGMEPP=TRUE
12336     AC_DEFINE([HAVE_FEATURE_GPGME])
12337     AC_PATH_PROG(GPG, gpg)
12338     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12339     # so let's exclude that manually for the moment
12340     if test -n "$GPG" -a "$_os" != "WINNT"; then
12341         # make sure we not only have a working gpgme, but a full working
12342         # gpg installation to run OpenPGP signature verification
12343         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12344     fi
12345     if test "$_os" = "Linux"; then
12346       uid=`id -u`
12347       AC_MSG_CHECKING([for /run/user/$uid])
12348       if test -d /run/user/$uid; then
12349         AC_MSG_RESULT([yes])
12350         AC_PATH_PROG(GPGCONF, gpgconf)
12352         # Older versions of gpgconf are not working as expected, since
12353         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12354         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12355         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12356         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12357         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12358         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12359         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12360           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12361           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12362           if $GPGCONF --dump-options > /dev/null ; then
12363             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12364               AC_MSG_RESULT([yes])
12365               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12366               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12367             else
12368               AC_MSG_RESULT([no])
12369             fi
12370           else
12371             AC_MSG_RESULT([no. missing or broken gpgconf?])
12372           fi
12373         else
12374           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12375         fi
12376       else
12377         AC_MSG_RESULT([no])
12378      fi
12379    fi
12381 AC_SUBST(ENABLE_GPGMEPP)
12382 AC_SUBST(SYSTEM_GPGMEPP)
12383 AC_SUBST(GPG_ERROR_CFLAGS)
12384 AC_SUBST(GPG_ERROR_LIBS)
12385 AC_SUBST(LIBASSUAN_CFLAGS)
12386 AC_SUBST(LIBASSUAN_LIBS)
12387 AC_SUBST(GPGMEPP_CFLAGS)
12388 AC_SUBST(GPGMEPP_LIBS)
12390 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12391 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12392     AC_MSG_RESULT([yes])
12393     ENABLE_MEDIAWIKI=TRUE
12394     BUILD_TYPE="$BUILD_TYPE XSLTML"
12395     if test  "x$with_java" = "xno"; then
12396         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12397     fi
12398 else
12399     AC_MSG_RESULT([no])
12400     ENABLE_MEDIAWIKI=
12401     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12403 AC_SUBST(ENABLE_MEDIAWIKI)
12405 AC_MSG_CHECKING([whether to build the Report Builder])
12406 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12407     AC_MSG_RESULT([yes])
12408     ENABLE_REPORTBUILDER=TRUE
12409     AC_MSG_CHECKING([which jfreereport libs to use])
12410     if test "$with_system_jfreereport" = "yes"; then
12411         SYSTEM_JFREEREPORT=TRUE
12412         AC_MSG_RESULT([external])
12413         if test -z $SAC_JAR; then
12414             SAC_JAR=/usr/share/java/sac.jar
12415         fi
12416         if ! test -f $SAC_JAR; then
12417              AC_MSG_ERROR(sac.jar not found.)
12418         fi
12420         if test -z $LIBXML_JAR; then
12421             if test -f /usr/share/java/libxml-1.0.0.jar; then
12422                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12423             elif test -f /usr/share/java/libxml.jar; then
12424                 LIBXML_JAR=/usr/share/java/libxml.jar
12425             else
12426                 AC_MSG_ERROR(libxml.jar replacement not found.)
12427             fi
12428         elif ! test -f $LIBXML_JAR; then
12429             AC_MSG_ERROR(libxml.jar not found.)
12430         fi
12432         if test -z $FLUTE_JAR; then
12433             if test -f /usr/share/java/flute-1.3.0.jar; then
12434                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12435             elif test -f /usr/share/java/flute.jar; then
12436                 FLUTE_JAR=/usr/share/java/flute.jar
12437             else
12438                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12439             fi
12440         elif ! test -f $FLUTE_JAR; then
12441             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12442         fi
12444         if test -z $JFREEREPORT_JAR; then
12445             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12446                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12447             elif test -f /usr/share/java/flow-engine.jar; then
12448                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12449             else
12450                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12451             fi
12452         elif ! test -f  $JFREEREPORT_JAR; then
12453                 AC_MSG_ERROR(jfreereport.jar not found.)
12454         fi
12456         if test -z $LIBLAYOUT_JAR; then
12457             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12458                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12459             elif test -f /usr/share/java/liblayout.jar; then
12460                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12461             else
12462                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12463             fi
12464         elif ! test -f $LIBLAYOUT_JAR; then
12465                 AC_MSG_ERROR(liblayout.jar not found.)
12466         fi
12468         if test -z $LIBLOADER_JAR; then
12469             if test -f /usr/share/java/libloader-1.0.0.jar; then
12470                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12471             elif test -f /usr/share/java/libloader.jar; then
12472                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12473             else
12474                 AC_MSG_ERROR(libloader.jar replacement not found.)
12475             fi
12476         elif ! test -f  $LIBLOADER_JAR; then
12477             AC_MSG_ERROR(libloader.jar not found.)
12478         fi
12480         if test -z $LIBFORMULA_JAR; then
12481             if test -f /usr/share/java/libformula-0.2.0.jar; then
12482                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12483             elif test -f /usr/share/java/libformula.jar; then
12484                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12485             else
12486                 AC_MSG_ERROR(libformula.jar replacement not found.)
12487             fi
12488         elif ! test -f $LIBFORMULA_JAR; then
12489                 AC_MSG_ERROR(libformula.jar not found.)
12490         fi
12492         if test -z $LIBREPOSITORY_JAR; then
12493             if test -f /usr/share/java/librepository-1.0.0.jar; then
12494                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12495             elif test -f /usr/share/java/librepository.jar; then
12496                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12497             else
12498                 AC_MSG_ERROR(librepository.jar replacement not found.)
12499             fi
12500         elif ! test -f $LIBREPOSITORY_JAR; then
12501             AC_MSG_ERROR(librepository.jar not found.)
12502         fi
12504         if test -z $LIBFONTS_JAR; then
12505             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12506                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12507             elif test -f /usr/share/java/libfonts.jar; then
12508                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12509             else
12510                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12511             fi
12512         elif ! test -f $LIBFONTS_JAR; then
12513                 AC_MSG_ERROR(libfonts.jar not found.)
12514         fi
12516         if test -z $LIBSERIALIZER_JAR; then
12517             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12518                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12519             elif test -f /usr/share/java/libserializer.jar; then
12520                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12521             else
12522                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12523             fi
12524         elif ! test -f $LIBSERIALIZER_JAR; then
12525                 AC_MSG_ERROR(libserializer.jar not found.)
12526         fi
12528         if test -z $LIBBASE_JAR; then
12529             if test -f /usr/share/java/libbase-1.0.0.jar; then
12530                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12531             elif test -f /usr/share/java/libbase.jar; then
12532                 LIBBASE_JAR=/usr/share/java/libbase.jar
12533             else
12534                 AC_MSG_ERROR(libbase.jar replacement not found.)
12535             fi
12536         elif ! test -f $LIBBASE_JAR; then
12537             AC_MSG_ERROR(libbase.jar not found.)
12538         fi
12540     else
12541         AC_MSG_RESULT([internal])
12542         SYSTEM_JFREEREPORT=
12543         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12544         NEED_ANT=TRUE
12545     fi
12546 else
12547     AC_MSG_RESULT([no])
12548     ENABLE_REPORTBUILDER=
12549     SYSTEM_JFREEREPORT=
12551 AC_SUBST(ENABLE_REPORTBUILDER)
12552 AC_SUBST(SYSTEM_JFREEREPORT)
12553 AC_SUBST(SAC_JAR)
12554 AC_SUBST(LIBXML_JAR)
12555 AC_SUBST(FLUTE_JAR)
12556 AC_SUBST(JFREEREPORT_JAR)
12557 AC_SUBST(LIBBASE_JAR)
12558 AC_SUBST(LIBLAYOUT_JAR)
12559 AC_SUBST(LIBLOADER_JAR)
12560 AC_SUBST(LIBFORMULA_JAR)
12561 AC_SUBST(LIBREPOSITORY_JAR)
12562 AC_SUBST(LIBFONTS_JAR)
12563 AC_SUBST(LIBSERIALIZER_JAR)
12565 # scripting provider for BeanShell?
12566 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12567 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12568     AC_MSG_RESULT([yes])
12569     ENABLE_SCRIPTING_BEANSHELL=TRUE
12571     dnl ===================================================================
12572     dnl Check for system beanshell
12573     dnl ===================================================================
12574     AC_MSG_CHECKING([which beanshell to use])
12575     if test "$with_system_beanshell" = "yes"; then
12576         AC_MSG_RESULT([external])
12577         SYSTEM_BSH=TRUE
12578         if test -z $BSH_JAR; then
12579             BSH_JAR=/usr/share/java/bsh.jar
12580         fi
12581         if ! test -f $BSH_JAR; then
12582             AC_MSG_ERROR(bsh.jar not found.)
12583         fi
12584     else
12585         AC_MSG_RESULT([internal])
12586         SYSTEM_BSH=
12587         BUILD_TYPE="$BUILD_TYPE BSH"
12588     fi
12589 else
12590     AC_MSG_RESULT([no])
12591     ENABLE_SCRIPTING_BEANSHELL=
12592     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12594 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12595 AC_SUBST(SYSTEM_BSH)
12596 AC_SUBST(BSH_JAR)
12598 # scripting provider for JavaScript?
12599 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12600 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12601     AC_MSG_RESULT([yes])
12602     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12604     dnl ===================================================================
12605     dnl Check for system rhino
12606     dnl ===================================================================
12607     AC_MSG_CHECKING([which rhino to use])
12608     if test "$with_system_rhino" = "yes"; then
12609         AC_MSG_RESULT([external])
12610         SYSTEM_RHINO=TRUE
12611         if test -z $RHINO_JAR; then
12612             RHINO_JAR=/usr/share/java/js.jar
12613         fi
12614         if ! test -f $RHINO_JAR; then
12615             AC_MSG_ERROR(js.jar not found.)
12616         fi
12617     else
12618         AC_MSG_RESULT([internal])
12619         SYSTEM_RHINO=
12620         BUILD_TYPE="$BUILD_TYPE RHINO"
12621         NEED_ANT=TRUE
12622     fi
12623 else
12624     AC_MSG_RESULT([no])
12625     ENABLE_SCRIPTING_JAVASCRIPT=
12626     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12628 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12629 AC_SUBST(SYSTEM_RHINO)
12630 AC_SUBST(RHINO_JAR)
12632 # This is only used in Qt5/KF5 checks to determine if /usr/lib64
12633 # paths should be added to library search path. So lets put all 64-bit
12634 # platforms there.
12635 supports_multilib=
12636 case "$host_cpu" in
12637 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12638     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12639         supports_multilib="yes"
12640     fi
12641     ;;
12643     ;;
12644 esac
12646 dnl ===================================================================
12647 dnl QT5 Integration
12648 dnl ===================================================================
12650 QT5_CFLAGS=""
12651 QT5_LIBS=""
12652 QMAKE5="qmake"
12653 MOC5="moc"
12654 QT5_GOBJECT_CFLAGS=""
12655 QT5_GOBJECT_LIBS=""
12656 QT5_HAVE_GOBJECT=""
12657 QT5_PLATFORMS_SRCDIR=""
12658 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12659         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12660         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12661 then
12662     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12663     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12665     if test -n "$supports_multilib"; then
12666         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12667     fi
12669     qt5_test_include="QtWidgets/qapplication.h"
12670     if test "$_os" = "Emscripten"; then
12671         qt5_test_library="libQt5Widgets.a"
12672     else
12673         qt5_test_library="libQt5Widgets.so"
12674     fi
12676     dnl Check for qmake5
12677     if test -n "$QT5DIR"; then
12678         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12679     else
12680         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12681     fi
12682     if test "$QMAKE5" = "no"; then
12683         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12684     else
12685         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12686         if test -z "$qmake5_test_ver"; then
12687             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12688         fi
12689         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12690         qt5_minimal_minor="6"
12691         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12692             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12693         else
12694             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12695         fi
12696     fi
12698     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12699     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12700     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12701     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12703     AC_MSG_CHECKING([for Qt5 headers])
12704     qt5_incdir="no"
12705     for inc_dir in $qt5_incdirs; do
12706         if test -r "$inc_dir/$qt5_test_include"; then
12707             qt5_incdir="$inc_dir"
12708             break
12709         fi
12710     done
12711     AC_MSG_RESULT([$qt5_incdir])
12712     if test "x$qt5_incdir" = "xno"; then
12713         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12714     fi
12715     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12716     AC_LANG_PUSH([C++])
12717     save_CPPFLAGS=$CPPFLAGS
12718     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12719     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12720         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12721     CPPFLAGS=$save_CPPFLAGS
12722     AC_LANG_POP([C++])
12724     AC_MSG_CHECKING([for Qt5 libraries])
12725     qt5_libdir="no"
12726     for lib_dir in $qt5_libdirs; do
12727         if test -r "$lib_dir/$qt5_test_library"; then
12728             qt5_libdir="$lib_dir"
12729             break
12730         fi
12731     done
12732     AC_MSG_RESULT([$qt5_libdir])
12733     if test "x$qt5_libdir" = "xno"; then
12734         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12735     fi
12737     if test "$_os" = "Emscripten"; then
12738         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12739             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12740         fi
12741         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12742             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12743         fi
12744     fi
12746     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12747     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12748     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12749     if test "$_os" = "Emscripten"; then
12750         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12751     fi
12753     if test "$USING_X11" = TRUE; then
12754         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12755         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12756             QT5_HAVE_XCB_ICCCM=1
12757             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12758         ],[
12759             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)])
12760             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12761         ])
12762         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12763         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12764         QT5_USING_X11=1
12765         AC_DEFINE(QT5_USING_X11)
12766     fi
12768     dnl Check for Meta Object Compiler
12770     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12771     if test "$MOC5" = "no"; then
12772         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12773 the root of your Qt installation by exporting QT5DIR before running "configure".])
12774     fi
12776     if test "$test_gstreamer_1_0" = yes; then
12777         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12778                 QT5_HAVE_GOBJECT=1
12779                 AC_DEFINE(QT5_HAVE_GOBJECT)
12780             ],
12781             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12782         )
12783     fi
12785 AC_SUBST(QT5_CFLAGS)
12786 AC_SUBST(QT5_LIBS)
12787 AC_SUBST(MOC5)
12788 AC_SUBST(QT5_GOBJECT_CFLAGS)
12789 AC_SUBST(QT5_GOBJECT_LIBS)
12790 AC_SUBST(QT5_HAVE_GOBJECT)
12791 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12793 dnl ===================================================================
12794 dnl KF5 Integration
12795 dnl ===================================================================
12797 KF5_CFLAGS=""
12798 KF5_LIBS=""
12799 KF5_CONFIG="kf5-config"
12800 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12801         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12802 then
12803     if test "$OS" = "HAIKU"; then
12804         haiku_arch="`echo $RTL_ARCH | tr X x`"
12805         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
12806         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
12807     fi
12809     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
12810     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
12811     if test -n "$supports_multilib"; then
12812         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
12813     fi
12815     kf5_test_include="KF5/kcoreaddons_version.h"
12816     kf5_test_library="libKF5CoreAddons.so"
12817     kf5_libdirs="$qt5_libdir $kf5_libdirs"
12819     dnl kf5 KDE4 support compatibility installed
12820     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
12821     if test "$KF5_CONFIG" != "no"; then
12822         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
12823         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
12824     fi
12826     dnl Check for KF5 headers
12827     AC_MSG_CHECKING([for KF5 headers])
12828     kf5_incdir="no"
12829     for kf5_check in $kf5_incdirs; do
12830         if test -r "$kf5_check/$kf5_test_include"; then
12831             kf5_incdir="$kf5_check/KF5"
12832             break
12833         fi
12834     done
12835     AC_MSG_RESULT([$kf5_incdir])
12836     if test "x$kf5_incdir" = "xno"; then
12837         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12838     fi
12840     dnl Check for KF5 libraries
12841     AC_MSG_CHECKING([for KF5 libraries])
12842     kf5_libdir="no"
12843     for kf5_check in $kf5_libdirs; do
12844         if test -r "$kf5_check/$kf5_test_library"; then
12845             kf5_libdir="$kf5_check"
12846             break
12847         fi
12848     done
12850     AC_MSG_RESULT([$kf5_libdir])
12851     if test "x$kf5_libdir" = "xno"; then
12852         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
12853     fi
12855     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"
12856     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12857     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12859     if test "$USING_X11" = TRUE; then
12860         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
12861     fi
12863     AC_LANG_PUSH([C++])
12864     save_CXXFLAGS=$CXXFLAGS
12865     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
12866     AC_MSG_CHECKING([whether KDE is >= 5.0])
12867        AC_RUN_IFELSE([AC_LANG_SOURCE([[
12868 #include <kcoreaddons_version.h>
12870 int main(int argc, char **argv) {
12871        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
12872        else return 1;
12874        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
12875     CXXFLAGS=$save_CXXFLAGS
12876     AC_LANG_POP([C++])
12878 AC_SUBST(KF5_CFLAGS)
12879 AC_SUBST(KF5_LIBS)
12881 dnl ===================================================================
12882 dnl Test whether to include Evolution 2 support
12883 dnl ===================================================================
12884 AC_MSG_CHECKING([whether to enable evolution 2 support])
12885 if test "$enable_evolution2" = yes; then
12886     AC_MSG_RESULT([yes])
12887     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
12888     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12889     FilterLibs "${GOBJECT_LIBS}"
12890     GOBJECT_LIBS="${filteredlibs}"
12891     ENABLE_EVOAB2="TRUE"
12892 else
12893     AC_MSG_RESULT([no])
12895 AC_SUBST(ENABLE_EVOAB2)
12896 AC_SUBST(GOBJECT_CFLAGS)
12897 AC_SUBST(GOBJECT_LIBS)
12899 dnl ===================================================================
12900 dnl Test which themes to include
12901 dnl ===================================================================
12902 AC_MSG_CHECKING([which themes to include])
12903 # if none given use default subset of available themes
12904 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
12905     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"
12908 WITH_THEMES=""
12909 if test "x$with_theme" != "xno"; then
12910     for theme in $with_theme; do
12911         case $theme in
12912         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" ;;
12913         default) real_theme=colibre ;;
12914         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
12915         esac
12916         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
12917     done
12919 AC_MSG_RESULT([$WITH_THEMES])
12920 AC_SUBST([WITH_THEMES])
12921 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
12922 for theme in $with_theme; do
12923     case $theme in
12924     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
12925     *) ;;
12926     esac
12927 done
12929 ###############################################################################
12930 # Extensions checking
12931 ###############################################################################
12932 AC_MSG_CHECKING([for extensions integration])
12933 if test "x$enable_extension_integration" != "xno"; then
12934     WITH_EXTENSION_INTEGRATION=TRUE
12935     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
12936     AC_MSG_RESULT([yes, use integration])
12937 else
12938     WITH_EXTENSION_INTEGRATION=
12939     AC_MSG_RESULT([no, do not integrate])
12941 AC_SUBST(WITH_EXTENSION_INTEGRATION)
12943 dnl Should any extra extensions be included?
12944 dnl There are standalone tests for each of these below.
12945 WITH_EXTRA_EXTENSIONS=
12946 AC_SUBST([WITH_EXTRA_EXTENSIONS])
12948 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
12949 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
12950 if test "x$with_java" != "xno"; then
12951     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
12952     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
12955 AC_MSG_CHECKING([whether to build opens___.ttf])
12956 if test "$enable_build_opensymbol" = "yes"; then
12957     AC_MSG_RESULT([yes])
12958     AC_PATH_PROG(FONTFORGE, fontforge)
12959     if test -z "$FONTFORGE"; then
12960         AC_MSG_ERROR([fontforge not installed])
12961     fi
12962 else
12963     AC_MSG_RESULT([no])
12964     OPENSYMBOL_TTF=f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
12965     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
12967 AC_SUBST(OPENSYMBOL_TTF)
12968 AC_SUBST(FONTFORGE)
12970 dnl ===================================================================
12971 dnl Test whether to include fonts
12972 dnl ===================================================================
12973 AC_MSG_CHECKING([whether to include third-party fonts])
12974 if test "$with_fonts" != "no"; then
12975     AC_MSG_RESULT([yes])
12976     WITH_FONTS=TRUE
12977     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
12978     AC_DEFINE(HAVE_MORE_FONTS)
12979 else
12980     AC_MSG_RESULT([no])
12981     WITH_FONTS=
12982     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
12984 AC_SUBST(WITH_FONTS)
12987 dnl ===================================================================
12988 dnl Test whether to enable online update service
12989 dnl ===================================================================
12990 AC_MSG_CHECKING([whether to enable online update])
12991 ENABLE_ONLINE_UPDATE=
12992 ENABLE_ONLINE_UPDATE_MAR=
12993 UPDATE_CONFIG=
12994 if test "$enable_online_update" = ""; then
12995     if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12996         AC_MSG_RESULT([yes])
12997         ENABLE_ONLINE_UPDATE="TRUE"
12998     else
12999         AC_MSG_RESULT([no])
13000     fi
13001 else
13002     if test "$enable_online_update" = "mar"; then
13003         AC_MSG_RESULT([yes - MAR-based online update])
13004         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13005         if test "$with_update_config" = ""; then
13006             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13007         fi
13008         UPDATE_CONFIG="$with_update_config"
13009         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13010     elif test "$enable_online_update" = "yes"; then
13011         AC_MSG_RESULT([yes])
13012         ENABLE_ONLINE_UPDATE="TRUE"
13013     else
13014         AC_MSG_RESULT([no])
13015     fi
13017 AC_SUBST(ENABLE_ONLINE_UPDATE)
13018 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13019 AC_SUBST(UPDATE_CONFIG)
13022 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13023 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13024     if test "x$with_privacy_policy_url" = "xundefined"; then
13025         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13026     fi
13028 AC_SUBST(PRIVACY_POLICY_URL)
13029 dnl ===================================================================
13030 dnl Test whether we need bzip2
13031 dnl ===================================================================
13032 SYSTEM_BZIP2=
13033 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13034     AC_MSG_CHECKING([whether to use system bzip2])
13035     if test "$with_system_bzip2" = yes; then
13036         SYSTEM_BZIP2=TRUE
13037         AC_MSG_RESULT([yes])
13038         PKG_CHECK_MODULES(BZIP2, bzip2)
13039         FilterLibs "${BZIP2_LIBS}"
13040         BZIP2_LIBS="${filteredlibs}"
13041     else
13042         AC_MSG_RESULT([no])
13043         BUILD_TYPE="$BUILD_TYPE BZIP2"
13044     fi
13046 AC_SUBST(SYSTEM_BZIP2)
13047 AC_SUBST(BZIP2_CFLAGS)
13048 AC_SUBST(BZIP2_LIBS)
13050 dnl ===================================================================
13051 dnl Test whether to enable extension update
13052 dnl ===================================================================
13053 AC_MSG_CHECKING([whether to enable extension update])
13054 ENABLE_EXTENSION_UPDATE=
13055 if test "x$enable_extension_update" = "xno"; then
13056     AC_MSG_RESULT([no])
13057 else
13058     AC_MSG_RESULT([yes])
13059     ENABLE_EXTENSION_UPDATE="TRUE"
13060     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13061     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13063 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13066 dnl ===================================================================
13067 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13068 dnl ===================================================================
13069 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13070 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13071     AC_MSG_RESULT([no])
13072     ENABLE_SILENT_MSI=
13073 else
13074     AC_MSG_RESULT([yes])
13075     ENABLE_SILENT_MSI=TRUE
13076     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13078 AC_SUBST(ENABLE_SILENT_MSI)
13080 AC_MSG_CHECKING([whether and how to use Xinerama])
13081 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13082     if test "$x_libraries" = "default_x_libraries"; then
13083         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13084         if test "x$XINERAMALIB" = x; then
13085            XINERAMALIB="/usr/lib"
13086         fi
13087     else
13088         XINERAMALIB="$x_libraries"
13089     fi
13090     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13091         # we have both versions, let the user decide but use the dynamic one
13092         # per default
13093         USE_XINERAMA=TRUE
13094         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13095             XINERAMA_LINK=dynamic
13096         else
13097             XINERAMA_LINK=static
13098         fi
13099     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13100         # we have only the dynamic version
13101         USE_XINERAMA=TRUE
13102         XINERAMA_LINK=dynamic
13103     elif test -e "$XINERAMALIB/libXinerama.a"; then
13104         # static version
13105         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13106             USE_XINERAMA=TRUE
13107             XINERAMA_LINK=static
13108         else
13109             USE_XINERAMA=
13110             XINERAMA_LINK=none
13111         fi
13112     else
13113         # no Xinerama
13114         USE_XINERAMA=
13115         XINERAMA_LINK=none
13116     fi
13117     if test "$USE_XINERAMA" = "TRUE"; then
13118         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13119         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13120             [AC_MSG_ERROR(Xinerama header not found.)], [])
13121         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13122         if test "x$XEXTLIB" = x; then
13123            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13124         fi
13125         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13126         if test "$_os" = "FreeBSD"; then
13127             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13128         fi
13129         if test "$_os" = "Linux"; then
13130             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13131         fi
13132         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13133             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13134     else
13135         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13136     fi
13137 else
13138     USE_XINERAMA=
13139     XINERAMA_LINK=none
13140     AC_MSG_RESULT([no])
13142 AC_SUBST(USE_XINERAMA)
13143 AC_SUBST(XINERAMA_LINK)
13145 dnl ===================================================================
13146 dnl Test whether to build cairo or rely on the system version
13147 dnl ===================================================================
13149 if test "$test_cairo" = "yes"; then
13150     AC_MSG_CHECKING([whether to use the system cairo])
13152     : ${with_system_cairo:=$with_system_libs}
13153     if test "$with_system_cairo" = "yes"; then
13154         SYSTEM_CAIRO=TRUE
13155         AC_MSG_RESULT([yes])
13157         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13158         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13159         FilterLibs "${CAIRO_LIBS}"
13160         CAIRO_LIBS="${filteredlibs}"
13162         if test "$test_xrender" = "yes"; then
13163             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13164             AC_LANG_PUSH([C])
13165             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13166 #ifdef PictStandardA8
13167 #else
13168       return fail;
13169 #endif
13170 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13172             AC_LANG_POP([C])
13173         fi
13174     else
13175         AC_MSG_RESULT([no])
13176         BUILD_TYPE="$BUILD_TYPE CAIRO"
13177     fi
13179     if test "$enable_cairo_canvas" != no; then
13180         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13181         ENABLE_CAIRO_CANVAS=TRUE
13182     fi
13185 AC_SUBST(CAIRO_CFLAGS)
13186 AC_SUBST(CAIRO_LIBS)
13187 AC_SUBST(ENABLE_CAIRO_CANVAS)
13188 AC_SUBST(SYSTEM_CAIRO)
13190 dnl ===================================================================
13191 dnl Test whether to use avahi
13192 dnl ===================================================================
13193 if test "$_os" = "WINNT"; then
13194     # Windows uses bundled mDNSResponder
13195     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13196 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13197     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13198                       [ENABLE_AVAHI="TRUE"])
13199     AC_DEFINE(HAVE_FEATURE_AVAHI)
13200     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13201     FilterLibs "${AVAHI_LIBS}"
13202     AVAHI_LIBS="${filteredlibs}"
13205 AC_SUBST(ENABLE_AVAHI)
13206 AC_SUBST(AVAHI_CFLAGS)
13207 AC_SUBST(AVAHI_LIBS)
13209 dnl ===================================================================
13210 dnl Test whether to use liblangtag
13211 dnl ===================================================================
13212 SYSTEM_LIBLANGTAG=
13213 AC_MSG_CHECKING([whether to use system liblangtag])
13214 if test "$with_system_liblangtag" = yes; then
13215     SYSTEM_LIBLANGTAG=TRUE
13216     AC_MSG_RESULT([yes])
13217     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13218     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13219     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13220     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13221     FilterLibs "${LIBLANGTAG_LIBS}"
13222     LIBLANGTAG_LIBS="${filteredlibs}"
13223 else
13224     SYSTEM_LIBLANGTAG=
13225     AC_MSG_RESULT([no])
13226     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13227     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13228     if test "$COM" = "MSC"; then
13229         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13230     else
13231         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13232     fi
13234 AC_SUBST(SYSTEM_LIBLANGTAG)
13235 AC_SUBST(LIBLANGTAG_CFLAGS)
13236 AC_SUBST(LIBLANGTAG_LIBS)
13238 dnl ===================================================================
13239 dnl Test whether to build libpng or rely on the system version
13240 dnl ===================================================================
13242 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13244 dnl ===================================================================
13245 dnl Check for runtime JVM search path
13246 dnl ===================================================================
13247 if test "$ENABLE_JAVA" != ""; then
13248     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13249     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13250         AC_MSG_RESULT([yes])
13251         if ! test -d "$with_jvm_path"; then
13252             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13253         fi
13254         if ! test -d "$with_jvm_path"jvm; then
13255             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13256         fi
13257         JVM_ONE_PATH_CHECK="$with_jvm_path"
13258         AC_SUBST(JVM_ONE_PATH_CHECK)
13259     else
13260         AC_MSG_RESULT([no])
13261     fi
13264 dnl ===================================================================
13265 dnl Test for the presence of Ant and that it works
13266 dnl ===================================================================
13268 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13269     ANT_HOME=; export ANT_HOME
13270     WITH_ANT_HOME=; export WITH_ANT_HOME
13271     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13272         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13273             if test "$_os" = "WINNT"; then
13274                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13275             else
13276                 with_ant_home="$LODE_HOME/opt/ant"
13277             fi
13278         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13279             with_ant_home="$LODE_HOME/opt/ant"
13280         fi
13281     fi
13282     if test -z "$with_ant_home"; then
13283         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13284     else
13285         if test "$_os" = "WINNT"; then
13286             # AC_PATH_PROGS needs unix path
13287             with_ant_home=`cygpath -u "$with_ant_home"`
13288         fi
13289         AbsolutePath "$with_ant_home"
13290         with_ant_home=$absolute_path
13291         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13292         WITH_ANT_HOME=$with_ant_home
13293         ANT_HOME=$with_ant_home
13294     fi
13296     if test -z "$ANT"; then
13297         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13298     else
13299         # resolve relative or absolute symlink
13300         while test -h "$ANT"; do
13301             a_cwd=`pwd`
13302             a_basename=`basename "$ANT"`
13303             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13304             cd "`dirname "$ANT"`"
13305             cd "`dirname "$a_script"`"
13306             ANT="`pwd`"/"`basename "$a_script"`"
13307             cd "$a_cwd"
13308         done
13310         AC_MSG_CHECKING([if $ANT works])
13311         mkdir -p conftest.dir
13312         a_cwd=$(pwd)
13313         cd conftest.dir
13314         cat > conftest.java << EOF
13315         public class conftest {
13316             int testmethod(int a, int b) {
13317                     return a + b;
13318             }
13319         }
13322         cat > conftest.xml << EOF
13323         <project name="conftest" default="conftest">
13324         <target name="conftest">
13325             <javac srcdir="." includes="conftest.java">
13326             </javac>
13327         </target>
13328         </project>
13331         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13332         if test $? = 0 -a -f ./conftest.class; then
13333             AC_MSG_RESULT([Ant works])
13334             if test -z "$WITH_ANT_HOME"; then
13335                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13336                 if test -z "$ANT_HOME"; then
13337                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13338                 fi
13339             else
13340                 ANT_HOME="$WITH_ANT_HOME"
13341             fi
13342         else
13343             echo "configure: Ant test failed" >&5
13344             cat conftest.java >&5
13345             cat conftest.xml >&5
13346             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13347         fi
13348         cd "$a_cwd"
13349         rm -fr conftest.dir
13350     fi
13351     if test -z "$ANT_HOME"; then
13352         ANT_HOME="NO_ANT_HOME"
13353     else
13354         PathFormat "$ANT_HOME"
13355         ANT_HOME="$formatted_path"
13356         PathFormat "$ANT"
13357         ANT="$formatted_path"
13358     fi
13360     dnl Checking for ant.jar
13361     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13362         AC_MSG_CHECKING([Ant lib directory])
13363         if test -f $ANT_HOME/lib/ant.jar; then
13364             ANT_LIB="$ANT_HOME/lib"
13365         else
13366             if test -f $ANT_HOME/ant.jar; then
13367                 ANT_LIB="$ANT_HOME"
13368             else
13369                 if test -f /usr/share/java/ant.jar; then
13370                     ANT_LIB=/usr/share/java
13371                 else
13372                     if test -f /usr/share/ant-core/lib/ant.jar; then
13373                         ANT_LIB=/usr/share/ant-core/lib
13374                     else
13375                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13376                             ANT_LIB="$ANT_HOME/lib/ant"
13377                         else
13378                             if test -f /usr/share/lib/ant/ant.jar; then
13379                                 ANT_LIB=/usr/share/lib/ant
13380                             else
13381                                 AC_MSG_ERROR([Ant libraries not found!])
13382                             fi
13383                         fi
13384                     fi
13385                 fi
13386             fi
13387         fi
13388         PathFormat "$ANT_LIB"
13389         ANT_LIB="$formatted_path"
13390         AC_MSG_RESULT([Ant lib directory found.])
13391     fi
13393     ant_minver=1.6.0
13394     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13396     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13397     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13398     ant_version_major=`echo $ant_version | cut -d. -f1`
13399     ant_version_minor=`echo $ant_version | cut -d. -f2`
13400     echo "configure: ant_version $ant_version " >&5
13401     echo "configure: ant_version_major $ant_version_major " >&5
13402     echo "configure: ant_version_minor $ant_version_minor " >&5
13403     if test "$ant_version_major" -ge "2"; then
13404         AC_MSG_RESULT([yes, $ant_version])
13405     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13406         AC_MSG_RESULT([yes, $ant_version])
13407     else
13408         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13409     fi
13411     rm -f conftest* core core.* *.core
13413 AC_SUBST(ANT)
13414 AC_SUBST(ANT_HOME)
13415 AC_SUBST(ANT_LIB)
13417 OOO_JUNIT_JAR=
13418 HAMCREST_JAR=
13419 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13420     AC_MSG_CHECKING([for JUnit 4])
13421     if test "$with_junit" = "yes"; then
13422         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13423             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13424         elif test -e /usr/share/java/junit4.jar; then
13425             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13426         else
13427            if test -e /usr/share/lib/java/junit.jar; then
13428               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13429            else
13430               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13431            fi
13432         fi
13433     else
13434         OOO_JUNIT_JAR=$with_junit
13435     fi
13436     if test "$_os" = "WINNT"; then
13437         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13438     fi
13439     printf 'import org.junit.Before;' > conftest.java
13440     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13441         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13442     else
13443         AC_MSG_ERROR(
13444 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13445  specify its pathname via --with-junit=..., or disable it via --without-junit])
13446     fi
13447     rm -f conftest.class conftest.java
13448     if test $OOO_JUNIT_JAR != ""; then
13449         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13450     fi
13452     AC_MSG_CHECKING([for included Hamcrest])
13453     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13454     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13455         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13456     else
13457         AC_MSG_RESULT([Not included])
13458         AC_MSG_CHECKING([for standalone hamcrest jar.])
13459         if test "$with_hamcrest" = "yes"; then
13460             if test -e /usr/share/lib/java/hamcrest.jar; then
13461                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13462             elif test -e /usr/share/java/hamcrest/core.jar; then
13463                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13464             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13465                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13466             else
13467                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13468             fi
13469         else
13470             HAMCREST_JAR=$with_hamcrest
13471         fi
13472         if test "$_os" = "WINNT"; then
13473             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13474         fi
13475         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13476             AC_MSG_RESULT([$HAMCREST_JAR])
13477         else
13478             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),
13479                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13480         fi
13481     fi
13482     rm -f conftest.class conftest.java
13484 AC_SUBST(OOO_JUNIT_JAR)
13485 AC_SUBST(HAMCREST_JAR)
13488 AC_SUBST(SCPDEFS)
13491 # check for wget and curl
13493 WGET=
13494 CURL=
13496 if test "$enable_fetch_external" != "no"; then
13498 CURL=`which curl 2>/dev/null`
13500 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13501     # wget new enough?
13502     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13503     if test $? -eq 0; then
13504         WGET=$i
13505         break
13506     fi
13507 done
13509 if test -z "$WGET" -a -z "$CURL"; then
13510     AC_MSG_ERROR([neither wget nor curl found!])
13515 AC_SUBST(WGET)
13516 AC_SUBST(CURL)
13519 # check for sha256sum
13521 SHA256SUM=
13523 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13524     eval "$i -a 256 --version" > /dev/null 2>&1
13525     ret=$?
13526     if test $ret -eq 0; then
13527         SHA256SUM="$i -a 256"
13528         break
13529     fi
13530 done
13532 if test -z "$SHA256SUM"; then
13533     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13534         eval "$i --version" > /dev/null 2>&1
13535         ret=$?
13536         if test $ret -eq 0; then
13537             SHA256SUM=$i
13538             break
13539         fi
13540     done
13543 if test -z "$SHA256SUM"; then
13544     AC_MSG_ERROR([no sha256sum found!])
13547 AC_SUBST(SHA256SUM)
13549 dnl ===================================================================
13550 dnl Dealing with l10n options
13551 dnl ===================================================================
13552 AC_MSG_CHECKING([which languages to be built])
13553 # get list of all languages
13554 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13555 # the sed command does the following:
13556 #   + if a line ends with a backslash, append the next line to it
13557 #   + adds " on the beginning of the value (after =)
13558 #   + adds " at the end of the value
13559 #   + removes en-US; we want to put it on the beginning
13560 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13561 [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)]
13562 ALL_LANGS="en-US $completelangiso"
13563 # check the configured localizations
13564 WITH_LANG="$with_lang"
13566 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13567 # (Norwegian is "nb" and "nn".)
13568 if test "$WITH_LANG" = "no"; then
13569     WITH_LANG=
13572 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13573     AC_MSG_RESULT([en-US])
13574 else
13575     AC_MSG_RESULT([$WITH_LANG])
13576     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13577     if test -z "$MSGFMT"; then
13578         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13579             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13580         elif test -x "/opt/lo/bin/msgfmt"; then
13581             MSGFMT="/opt/lo/bin/msgfmt"
13582         else
13583             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13584             if test -z "$MSGFMT"; then
13585                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13586             fi
13587         fi
13588     fi
13589     if test -z "$MSGUNIQ"; then
13590         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13591             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13592         elif test -x "/opt/lo/bin/msguniq"; then
13593             MSGUNIQ="/opt/lo/bin/msguniq"
13594         else
13595             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13596             if test -z "$MSGUNIQ"; then
13597                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13598             fi
13599         fi
13600     fi
13602 AC_SUBST(MSGFMT)
13603 AC_SUBST(MSGUNIQ)
13604 # check that the list is valid
13605 for lang in $WITH_LANG; do
13606     test "$lang" = "ALL" && continue
13607     # need to check for the exact string, so add space before and after the list of all languages
13608     for vl in $ALL_LANGS; do
13609         if test "$vl" = "$lang"; then
13610            break
13611         fi
13612     done
13613     if test "$vl" != "$lang"; then
13614         # if you're reading this - you prolly quoted your languages remove the quotes ...
13615         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13616     fi
13617 done
13618 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13619     echo $WITH_LANG | grep -q en-US
13620     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13622 # list with substituted ALL
13623 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13624 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13625 test "$WITH_LANG" = "en-US" && WITH_LANG=
13626 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13627     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13628     ALL_LANGS=`echo $ALL_LANGS qtz`
13630 AC_SUBST(ALL_LANGS)
13631 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13632 AC_SUBST(WITH_LANG)
13633 AC_SUBST(WITH_LANG_LIST)
13634 AC_SUBST(GIT_NEEDED_SUBMODULES)
13636 WITH_POOR_HELP_LOCALIZATIONS=
13637 if test -d "$SRC_ROOT/translations/source"; then
13638     for l in `ls -1 $SRC_ROOT/translations/source`; do
13639         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13640             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13641         fi
13642     done
13644 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13646 if test -n "$with_locales"; then
13647     WITH_LOCALES="$with_locales"
13649     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13650     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13651     # config_host/config_locales.h.in
13652     for locale in $WITH_LOCALES; do
13653         lang=${locale%_*}
13655         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13657         case $lang in
13658         hi|mr*ne)
13659             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13660             ;;
13661         bg|ru)
13662             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13663             ;;
13664         esac
13665     done
13666 else
13667     AC_DEFINE(WITH_LOCALE_ALL)
13669 AC_SUBST(WITH_LOCALES)
13671 dnl git submodule update --reference
13672 dnl ===================================================================
13673 if test -n "${GIT_REFERENCE_SRC}"; then
13674     for repo in ${GIT_NEEDED_SUBMODULES}; do
13675         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13676             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13677         fi
13678     done
13680 AC_SUBST(GIT_REFERENCE_SRC)
13682 dnl git submodules linked dirs
13683 dnl ===================================================================
13684 if test -n "${GIT_LINK_SRC}"; then
13685     for repo in ${GIT_NEEDED_SUBMODULES}; do
13686         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13687             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13688         fi
13689     done
13691 AC_SUBST(GIT_LINK_SRC)
13693 dnl branding
13694 dnl ===================================================================
13695 AC_MSG_CHECKING([for alternative branding images directory])
13696 # initialize mapped arrays
13697 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13698 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13700 if test -z "$with_branding" -o "$with_branding" = "no"; then
13701     AC_MSG_RESULT([none])
13702     DEFAULT_BRAND_IMAGES="$brand_files"
13703 else
13704     if ! test -d $with_branding ; then
13705         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13706     else
13707         AC_MSG_RESULT([$with_branding])
13708         CUSTOM_BRAND_DIR="$with_branding"
13709         for lfile in $brand_files
13710         do
13711             if ! test -f $with_branding/$lfile ; then
13712                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13713                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13714             else
13715                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13716             fi
13717         done
13718         check_for_progress="yes"
13719     fi
13721 AC_SUBST([BRAND_INTRO_IMAGES])
13722 AC_SUBST([CUSTOM_BRAND_DIR])
13723 AC_SUBST([CUSTOM_BRAND_IMAGES])
13724 AC_SUBST([DEFAULT_BRAND_IMAGES])
13727 AC_MSG_CHECKING([for 'intro' progress settings])
13728 PROGRESSBARCOLOR=
13729 PROGRESSSIZE=
13730 PROGRESSPOSITION=
13731 PROGRESSFRAMECOLOR=
13732 PROGRESSTEXTCOLOR=
13733 PROGRESSTEXTBASELINE=
13735 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13736     source "$with_branding/progress.conf"
13737     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13738 else
13739     AC_MSG_RESULT([none])
13742 AC_SUBST(PROGRESSBARCOLOR)
13743 AC_SUBST(PROGRESSSIZE)
13744 AC_SUBST(PROGRESSPOSITION)
13745 AC_SUBST(PROGRESSFRAMECOLOR)
13746 AC_SUBST(PROGRESSTEXTCOLOR)
13747 AC_SUBST(PROGRESSTEXTBASELINE)
13750 dnl ===================================================================
13751 dnl Custom build version
13752 dnl ===================================================================
13753 AC_MSG_CHECKING([for extra build ID])
13754 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
13755     EXTRA_BUILDID="$with_extra_buildid"
13757 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
13758 if test -n "$EXTRA_BUILDID" ; then
13759     AC_MSG_RESULT([$EXTRA_BUILDID])
13760 else
13761     AC_MSG_RESULT([not set])
13763 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
13765 OOO_VENDOR=
13766 AC_MSG_CHECKING([for vendor])
13767 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
13768     OOO_VENDOR="$USERNAME"
13770     if test -z "$OOO_VENDOR"; then
13771         OOO_VENDOR="$USER"
13772     fi
13774     if test -z "$OOO_VENDOR"; then
13775         OOO_VENDOR="`id -u -n`"
13776     fi
13778     AC_MSG_RESULT([not set, using $OOO_VENDOR])
13779 else
13780     OOO_VENDOR="$with_vendor"
13781     AC_MSG_RESULT([$OOO_VENDOR])
13783 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
13784 AC_SUBST(OOO_VENDOR)
13786 if test "$_os" = "Android" ; then
13787     ANDROID_PACKAGE_NAME=
13788     AC_MSG_CHECKING([for Android package name])
13789     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
13790         if test -n "$ENABLE_DEBUG"; then
13791             # Default to the package name that makes ndk-gdb happy.
13792             ANDROID_PACKAGE_NAME="org.libreoffice"
13793         else
13794             ANDROID_PACKAGE_NAME="org.example.libreoffice"
13795         fi
13797         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
13798     else
13799         ANDROID_PACKAGE_NAME="$with_android_package_name"
13800         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
13801     fi
13802     AC_SUBST(ANDROID_PACKAGE_NAME)
13805 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
13806 if test "$with_compat_oowrappers" = "yes"; then
13807     WITH_COMPAT_OOWRAPPERS=TRUE
13808     AC_MSG_RESULT(yes)
13809 else
13810     WITH_COMPAT_OOWRAPPERS=
13811     AC_MSG_RESULT(no)
13813 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
13815 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
13816 AC_MSG_CHECKING([for install dirname])
13817 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
13818     INSTALLDIRNAME="$with_install_dirname"
13820 AC_MSG_RESULT([$INSTALLDIRNAME])
13821 AC_SUBST(INSTALLDIRNAME)
13823 AC_MSG_CHECKING([for prefix])
13824 test "x$prefix" = xNONE && prefix=$ac_default_prefix
13825 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
13826 PREFIXDIR="$prefix"
13827 AC_MSG_RESULT([$PREFIXDIR])
13828 AC_SUBST(PREFIXDIR)
13830 LIBDIR=[$(eval echo $(eval echo $libdir))]
13831 AC_SUBST(LIBDIR)
13833 DATADIR=[$(eval echo $(eval echo $datadir))]
13834 AC_SUBST(DATADIR)
13836 MANDIR=[$(eval echo $(eval echo $mandir))]
13837 AC_SUBST(MANDIR)
13839 DOCDIR=[$(eval echo $(eval echo $docdir))]
13840 AC_SUBST(DOCDIR)
13842 BINDIR=[$(eval echo $(eval echo $bindir))]
13843 AC_SUBST(BINDIR)
13845 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
13846 AC_SUBST(INSTALLDIR)
13848 TESTINSTALLDIR="${BUILDDIR}/test-install"
13849 AC_SUBST(TESTINSTALLDIR)
13852 # ===================================================================
13853 # OAuth2 id and secrets
13854 # ===================================================================
13856 AC_MSG_CHECKING([for Google Drive client id and secret])
13857 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
13858     AC_MSG_RESULT([not set])
13859     GDRIVE_CLIENT_ID="\"\""
13860     GDRIVE_CLIENT_SECRET="\"\""
13861 else
13862     AC_MSG_RESULT([set])
13863     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
13864     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
13866 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
13867 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
13869 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
13870 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
13871     AC_MSG_RESULT([not set])
13872     ALFRESCO_CLOUD_CLIENT_ID="\"\""
13873     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
13874 else
13875     AC_MSG_RESULT([set])
13876     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
13877     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
13879 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
13880 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
13882 AC_MSG_CHECKING([for OneDrive client id and secret])
13883 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
13884     AC_MSG_RESULT([not set])
13885     ONEDRIVE_CLIENT_ID="\"\""
13886     ONEDRIVE_CLIENT_SECRET="\"\""
13887 else
13888     AC_MSG_RESULT([set])
13889     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
13890     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
13892 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
13893 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
13896 dnl ===================================================================
13897 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
13898 dnl --enable-dependency-tracking configure option
13899 dnl ===================================================================
13900 AC_MSG_CHECKING([whether to enable dependency tracking])
13901 if test "$enable_dependency_tracking" = "no"; then
13902     nodep=TRUE
13903     AC_MSG_RESULT([no])
13904 else
13905     AC_MSG_RESULT([yes])
13907 AC_SUBST(nodep)
13909 dnl ===================================================================
13910 dnl Number of CPUs to use during the build
13911 dnl ===================================================================
13912 AC_MSG_CHECKING([for number of processors to use])
13913 # plain --with-parallelism is just the default
13914 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
13915     if test "$with_parallelism" = "no"; then
13916         PARALLELISM=0
13917     else
13918         PARALLELISM=$with_parallelism
13919     fi
13920 else
13921     if test "$enable_icecream" = "yes"; then
13922         PARALLELISM="40"
13923     else
13924         case `uname -s` in
13926         Darwin|FreeBSD|NetBSD|OpenBSD)
13927             PARALLELISM=`sysctl -n hw.ncpu`
13928             ;;
13930         Linux)
13931             PARALLELISM=`getconf _NPROCESSORS_ONLN`
13932         ;;
13933         # what else than above does profit here *and* has /proc?
13934         *)
13935             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
13936             ;;
13937         esac
13939         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
13940         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
13941     fi
13944 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
13945     if test -z "$with_parallelism"; then
13946             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
13947             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
13948             PARALLELISM="1"
13949     else
13950         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."
13951     fi
13954 if test $PARALLELISM -eq 0; then
13955     AC_MSG_RESULT([explicit make -j option needed])
13956 else
13957     AC_MSG_RESULT([$PARALLELISM])
13959 AC_SUBST(PARALLELISM)
13961 IWYU_PATH="$with_iwyu"
13962 AC_SUBST(IWYU_PATH)
13963 if test ! -z "$IWYU_PATH"; then
13964     if test ! -f "$IWYU_PATH"; then
13965         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
13966     fi
13970 # Set up ILIB for MSVC build
13972 ILIB1=
13973 if test "$build_os" = "cygwin"; then
13974     ILIB="."
13975     if test -n "$JAVA_HOME"; then
13976         ILIB="$ILIB;$JAVA_HOME/lib"
13977     fi
13978     ILIB1=-link
13979     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
13980     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
13981     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13982     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
13983     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
13984         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13985         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
13986     fi
13987     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
13988     ucrtlibpath_formatted=$formatted_path
13989     ILIB="$ILIB;$ucrtlibpath_formatted"
13990     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
13991     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
13992         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
13993     else
13994         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
13995     fi
13997     if test "$cross_compiling" != "yes"; then
13998         ILIB_FOR_BUILD="$ILIB"
13999     fi
14001 AC_SUBST(ILIB)
14002 AC_SUBST(ILIB_FOR_BUILD)
14004 # ===================================================================
14005 # Creating bigger shared library to link against
14006 # ===================================================================
14007 AC_MSG_CHECKING([whether to create huge library])
14008 MERGELIBS=
14010 if test $_os = iOS -o $_os = Android; then
14011     # Never any point in mergelibs for these as we build just static
14012     # libraries anyway...
14013     enable_mergelibs=no
14016 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14017     if test $_os != Linux -a $_os != WINNT; then
14018         add_warning "--enable-mergelibs is not tested for this platform"
14019     fi
14020     MERGELIBS="TRUE"
14021     AC_MSG_RESULT([yes])
14022     AC_DEFINE(ENABLE_MERGELIBS)
14023 else
14024     AC_MSG_RESULT([no])
14026 AC_SUBST([MERGELIBS])
14028 dnl ===================================================================
14029 dnl icerun is a wrapper that stops us spawning tens of processes
14030 dnl locally - for tools that can't be executed on the compile cluster
14031 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14032 dnl ===================================================================
14033 AC_MSG_CHECKING([whether to use icerun wrapper])
14034 ICECREAM_RUN=
14035 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14036     ICECREAM_RUN=icerun
14037     AC_MSG_RESULT([yes])
14038 else
14039     AC_MSG_RESULT([no])
14041 AC_SUBST(ICECREAM_RUN)
14043 dnl ===================================================================
14044 dnl Setup the ICECC_VERSION for the build the same way it was set for
14045 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14046 dnl ===================================================================
14047 x_ICECC_VERSION=[\#]
14048 if test -n "$ICECC_VERSION" ; then
14049     x_ICECC_VERSION=
14051 AC_SUBST(x_ICECC_VERSION)
14052 AC_SUBST(ICECC_VERSION)
14054 dnl ===================================================================
14056 AC_MSG_CHECKING([MPL subset])
14057 MPL_SUBSET=
14059 if test "$enable_mpl_subset" = "yes"; then
14060     warn_report=false
14061     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14062         warn_report=true
14063     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14064         warn_report=true
14065     fi
14066     if test "$warn_report" = "true"; then
14067         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14068     fi
14069     if test "x$enable_postgresql_sdbc" != "xno"; then
14070         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14071     fi
14072     if test "$enable_lotuswordpro" = "yes"; then
14073         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14074     fi
14075     if test "$WITH_WEBDAV" = "neon"; then
14076         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14077     fi
14078     if test -n "$ENABLE_POPPLER"; then
14079         if test "x$SYSTEM_POPPLER" = "x"; then
14080             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14081         fi
14082     fi
14083     # cf. m4/libo_check_extension.m4
14084     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14085         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14086     fi
14087     for theme in $WITH_THEMES; do
14088         case $theme in
14089         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14090             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14091         *) : ;;
14092         esac
14093     done
14095     ENABLE_OPENGL_TRANSITIONS=
14097     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14098         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14099     fi
14101     MPL_SUBSET="TRUE"
14102     AC_DEFINE(MPL_HAVE_SUBSET)
14103     AC_MSG_RESULT([only])
14104 else
14105     AC_MSG_RESULT([no restrictions])
14107 AC_SUBST(MPL_SUBSET)
14109 dnl ===================================================================
14111 AC_MSG_CHECKING([formula logger])
14112 ENABLE_FORMULA_LOGGER=
14114 if test "x$enable_formula_logger" = "xyes"; then
14115     AC_MSG_RESULT([yes])
14116     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14117     ENABLE_FORMULA_LOGGER=TRUE
14118 elif test -n "$ENABLE_DBGUTIL" ; then
14119     AC_MSG_RESULT([yes])
14120     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14121     ENABLE_FORMULA_LOGGER=TRUE
14122 else
14123     AC_MSG_RESULT([no])
14126 AC_SUBST(ENABLE_FORMULA_LOGGER)
14128 dnl ===================================================================
14129 dnl Checking for active Antivirus software.
14130 dnl ===================================================================
14132 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14133     AC_MSG_CHECKING([for active Antivirus software])
14134     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14135     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14136         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14137             AC_MSG_RESULT([found])
14138             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14139             echo $EICAR_STRING > $SRC_ROOT/eicar
14140             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14141             rm $SRC_ROOT/eicar
14142             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14143                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14144             fi
14145             echo $EICAR_STRING > $BUILDDIR/eicar
14146             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14147             rm $BUILDDIR/eicar
14148             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14149                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14150             fi
14151             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"
14152         else
14153             AC_MSG_RESULT([not found])
14154         fi
14155     else
14156         AC_MSG_RESULT([n/a])
14157     fi
14160 dnl ===================================================================
14161 dnl Setting up the environment.
14162 dnl ===================================================================
14163 AC_MSG_NOTICE([setting up the build environment variables...])
14165 AC_SUBST(COMPATH)
14167 if test "$build_os" = "cygwin"; then
14168     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14169         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14170         ATL_INCLUDE="$COMPATH/atlmfc/include"
14171     elif test -d "$COMPATH/atlmfc/lib"; then
14172         ATL_LIB="$COMPATH/atlmfc/lib"
14173         ATL_INCLUDE="$COMPATH/atlmfc/include"
14174     else
14175         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14176         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14177     fi
14178     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14179     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14180     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14182     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14183     PathFormat "/usr/bin/find.exe"
14184     FIND="$formatted_path"
14185     PathFormat "/usr/bin/sort.exe"
14186     SORT="$formatted_path"
14187     PathFormat "/usr/bin/grep.exe"
14188     WIN_GREP="$formatted_path"
14189     PathFormat "/usr/bin/ls.exe"
14190     WIN_LS="$formatted_path"
14191     PathFormat "/usr/bin/touch.exe"
14192     WIN_TOUCH="$formatted_path"
14193 else
14194     FIND=find
14195     SORT=sort
14198 AC_SUBST(ATL_INCLUDE)
14199 AC_SUBST(ATL_LIB)
14200 AC_SUBST(FIND)
14201 AC_SUBST(SORT)
14202 AC_SUBST(WIN_GREP)
14203 AC_SUBST(WIN_LS)
14204 AC_SUBST(WIN_TOUCH)
14206 AC_SUBST(BUILD_TYPE)
14208 AC_SUBST(SOLARINC)
14210 PathFormat "$PERL"
14211 PERL="$formatted_path"
14212 AC_SUBST(PERL)
14214 if test -n "$TMPDIR"; then
14215     TEMP_DIRECTORY="$TMPDIR"
14216 else
14217     TEMP_DIRECTORY="/tmp"
14219 if test "$build_os" = "cygwin"; then
14220     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14222 AC_SUBST(TEMP_DIRECTORY)
14224 # setup the PATH for the environment
14225 if test -n "$LO_PATH_FOR_BUILD"; then
14226     LO_PATH="$LO_PATH_FOR_BUILD"
14227     case "$host_os" in
14228     cygwin*|wsl*)
14229         pathmunge "$MSVC_HOST_PATH" "before"
14230         ;;
14231     esac
14232 else
14233     LO_PATH="$PATH"
14235     case "$host_os" in
14237     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14238         if test "$ENABLE_JAVA" != ""; then
14239             pathmunge "$JAVA_HOME/bin" "after"
14240         fi
14241         ;;
14243     cygwin*|wsl*)
14244         # Win32 make needs native paths
14245         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14246             LO_PATH=`cygpath -p -m "$PATH"`
14247         fi
14248         if test "$WIN_BUILD_ARCH" = "x64"; then
14249             # needed for msi packaging
14250             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14251         fi
14252         # .NET 4.6 and higher don't have bin directory
14253         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14254             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14255         fi
14256         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14257         pathmunge "$CSC_PATH" "before"
14258         pathmunge "$MIDL_PATH" "before"
14259         pathmunge "$AL_PATH" "before"
14260         pathmunge "$MSVC_MULTI_PATH" "before"
14261         pathmunge "$MSVC_BUILD_PATH" "before"
14262         if test -n "$MSBUILD_PATH" ; then
14263             pathmunge "$MSBUILD_PATH" "before"
14264         fi
14265         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14266         if test "$ENABLE_JAVA" != ""; then
14267             if test -d "$JAVA_HOME/jre/bin/client"; then
14268                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14269             fi
14270             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14271                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14272             fi
14273             pathmunge "$JAVA_HOME/bin" "before"
14274         fi
14275         pathmunge "$MSVC_HOST_PATH" "before"
14276         ;;
14278     solaris*)
14279         pathmunge "/usr/css/bin" "before"
14280         if test "$ENABLE_JAVA" != ""; then
14281             pathmunge "$JAVA_HOME/bin" "after"
14282         fi
14283         ;;
14284     esac
14287 AC_SUBST(LO_PATH)
14289 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14290 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14291     x_LO_ELFCHECK_ALLOWLIST=
14292 else
14293     x_LO_ELFCHECK_ALLOWLIST=[\#]
14295 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14296 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14298 libo_FUZZ_SUMMARY
14300 # Generate a configuration sha256 we can use for deps
14301 if test -f config_host.mk; then
14302     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14304 if test -f config_host_lang.mk; then
14305     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14308 CFLAGS=$my_original_CFLAGS
14309 CXXFLAGS=$my_original_CXXFLAGS
14310 CPPFLAGS=$my_original_CPPFLAGS
14312 AC_CONFIG_LINKS([include:include])
14314 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14315 # BUILD platform configuration] - otherwise breaks cross building
14316 AC_CONFIG_FILES([config_host.mk
14317                  config_host_lang.mk
14318                  Makefile
14319                  bin/bffvalidator.sh
14320                  bin/odfvalidator.sh
14321                  bin/officeotron.sh
14322                  hardened_runtime.xcent
14323                  instsetoo_native/util/openoffice.lst
14324                  sysui/desktop/macosx/Info.plist
14325                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14326 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14327 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14328 AC_CONFIG_HEADERS([config_host/config_clang.h])
14329 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14330 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14331 AC_CONFIG_HEADERS([config_host/config_eot.h])
14332 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14333 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14334 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14335 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14336 AC_CONFIG_HEADERS([config_host/config_features.h])
14337 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14338 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14339 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14340 AC_CONFIG_HEADERS([config_host/config_folders.h])
14341 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14342 AC_CONFIG_HEADERS([config_host/config_gio.h])
14343 AC_CONFIG_HEADERS([config_host/config_global.h])
14344 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14345 AC_CONFIG_HEADERS([config_host/config_java.h])
14346 AC_CONFIG_HEADERS([config_host/config_langs.h])
14347 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14348 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14349 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14350 AC_CONFIG_HEADERS([config_host/config_locales.h])
14351 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14352 AC_CONFIG_HEADERS([config_host/config_oox.h])
14353 AC_CONFIG_HEADERS([config_host/config_options.h])
14354 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14355 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14356 AC_CONFIG_HEADERS([config_host/config_skia.h])
14357 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14358 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14359 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14360 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14361 AC_CONFIG_HEADERS([config_host/config_version.h])
14362 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14363 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14364 AC_CONFIG_HEADERS([config_host/config_python.h])
14365 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14366 AC_OUTPUT
14368 if test "$CROSS_COMPILING" = TRUE; then
14369     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14372 # touch the config timestamp file
14373 if test ! -f config_host.mk.stamp; then
14374     echo > config_host.mk.stamp
14375 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14376     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14377 else
14378     echo > config_host.mk.stamp
14381 # touch the config lang timestamp file
14382 if test ! -f config_host_lang.mk.stamp; then
14383     echo > config_host_lang.mk.stamp
14384 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14385     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14386 else
14387     echo > config_host_lang.mk.stamp
14391 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14392         -a "$build_os" = "cygwin"; then
14394 cat << _EOS
14395 ****************************************************************************
14396 WARNING:
14397 Your make version is known to be horribly slow, and hard to debug
14398 problems with. To get a reasonably functional make please do:
14400 to install a pre-compiled binary make for Win32
14402  mkdir -p /opt/lo/bin
14403  cd /opt/lo/bin
14404  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14405  cp make-4.2.1-msvc.exe make
14406  chmod +x make
14408 to install from source:
14409 place yourself in a working directory of you choice.
14411  git clone git://git.savannah.gnu.org/make.git
14413  [go to Start menu, open "Visual Studio 2019", click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14414  set PATH=%PATH%;C:\Cygwin\bin
14415  [or Cygwin64, if that is what you have]
14416  cd path-to-make-repo-you-cloned-above
14417  build_w32.bat --without-guile
14419 should result in a WinRel/gnumake.exe.
14420 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14422 Then re-run autogen.sh
14424 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14425 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14427 _EOS
14428 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14429     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14434 cat << _EOF
14435 ****************************************************************************
14437 To build, run:
14438 $GNUMAKE
14440 To view some help, run:
14441 $GNUMAKE help
14443 _EOF
14445 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14446     cat << _EOF
14447 After the build has finished successfully, you can immediately run what you built using the command:
14448 _EOF
14450     if test $_os = Darwin; then
14451         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14452     else
14453         echo instdir/program/soffice
14454     fi
14455     cat << _EOF
14457 If you want to run the smoketest, run:
14458 $GNUMAKE check
14460 _EOF
14463 if test -f "$WARNINGS_FILE_FOR_BUILD"; then
14464     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14465     cat "$WARNINGS_FILE_FOR_BUILD"
14466     echo
14469 if test -f "$WARNINGS_FILE"; then
14470     echo "HOST config ($WARNINGS_FILE)"
14471     cat "$WARNINGS_FILE"
14474 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: