better name for a function overload
[LibreOffice.git] / configure.ac
blob88962625644fcf7e3949de9750725845df4c47c6
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_gdb_index=no
823 test_openldap=yes
824 test_split_debug=no
825 test_webdav=yes
827 # There is currently just iOS not using salplug, so this explicitly enables it.
828 # must: using_freetype_fontconfig
829 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
830 using_vclplug=yes
831 # must: using_x11
833 # Default values, as such probably valid just for Linux, set
834 # differently below just for Mac OSX, but at least better than
835 # hardcoding these as we used to do. Much of this is duplicated also
836 # in solenv for old build system and for gbuild, ideally we should
837 # perhaps define stuff like this only here in configure.ac?
839 LINKFLAGSSHL="-shared"
840 PICSWITCH="-fpic"
841 DLLPOST=".so"
843 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
845 INSTROOTBASESUFFIX=
846 INSTROOTCONTENTSUFFIX=
847 SDKDIRNAME=sdk
849 HOST_PLATFORM="$host"
851 host_cpu_for_clang="$host_cpu"
853 case "$host_os" in
855 solaris*)
856     using_freetype_fontconfig=yes
857     using_x11=yes
858     build_skia=yes
859     _os=SunOS
861     dnl ===========================================================
862     dnl Check whether we're using Solaris 10 - SPARC or Intel.
863     dnl ===========================================================
864     AC_MSG_CHECKING([the Solaris operating system release])
865     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
866     if test "$_os_release" -lt "10"; then
867         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
868     else
869         AC_MSG_RESULT([ok ($_os_release)])
870     fi
872     dnl Check whether we're using a SPARC or i386 processor
873     AC_MSG_CHECKING([the processor type])
874     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
875         AC_MSG_RESULT([ok ($host_cpu)])
876     else
877         AC_MSG_ERROR([only SPARC and i386 processors are supported])
878     fi
879     ;;
881 linux-gnu*|k*bsd*-gnu*|linux-musl*)
882     using_freetype_fontconfig=yes
883     using_x11=yes
884     build_skia=yes
885     test_gdb_index=yes
886     test_split_debug=yes
887     if test "$enable_fuzzers" = yes; then
888         test_system_freetype=no
889     fi
890     _os=Linux
891     ;;
893 gnu)
894     using_freetype_fontconfig=yes
895     using_x11=no
896     _os=GNU
897      ;;
899 cygwin*|wsl*)
900     # When building on Windows normally with MSVC under Cygwin,
901     # configure thinks that the host platform (the platform the
902     # built code will run on) is Cygwin, even if it obviously is
903     # Windows, which in Autoconf terminology is called
904     # "mingw32". (Which is misleading as MinGW is the name of the
905     # tool-chain, not an operating system.)
907     # Somewhat confusing, yes. But this configure script doesn't
908     # look at $host etc that much, it mostly uses its own $_os
909     # variable, set here in this case statement.
911     using_freetype_fontconfig=no
912     using_x11=no
913     test_openldap=no
914     build_skia=yes
915     _os=WINNT
917     DLLPOST=".dll"
918     LINKFLAGSNOUNDEFS=
920     if test "$host_cpu" = "aarch64"; then
921         build_skia=no
922         enable_gpgmepp=no
923         enable_coinmp=no
924         enable_firebird_sdbc=no
925     fi
926     ;;
928 darwin*|macos*) # macOS
929     using_freetype_fontconfig=no
930     using_x11=no
931     build_skia=yes
932     if test -n "$LODE_HOME" ; then
933         mac_sanitize_path
934         AC_MSG_NOTICE([sanitized the PATH to $PATH])
935     fi
936     _os=Darwin
937     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
938     INSTROOTCONTENTSUFFIX=/Contents
939     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
940     # See comment above the case "$host_os"
941     LINKFLAGSSHL="-dynamiclib -single_module"
943     # -fPIC is default
944     PICSWITCH=""
946     DLLPOST=".dylib"
948     # -undefined error is the default
949     LINKFLAGSNOUNDEFS=""
950     case "$host_cpu" in
951     aarch64|arm64)
952         case "$host_os" in
953         macos*)
954             # HOST_PLATFORM is used for external projects and their configury occasionally doesn't like
955             # the "macos" part so be sure to use aarch64-apple-darwin for now.
956             HOST_PLATFORM=aarch64-apple-darwin
957             ;;
958         esac
960         # Apple's Clang uses "arm64"
961         host_cpu_for_clang=arm64
962     esac
965 ios*) # iOS
966     using_freetype_fontconfig=no
967     using_vclplug=no
968     using_x11=no
969     build_crypto=no
970     test_cmis=no
971     test_openldap=no
972     test_webdav=no
973     if test -n "$LODE_HOME" ; then
974         mac_sanitize_path
975         AC_MSG_NOTICE([sanitized the PATH to $PATH])
976     fi
977     enable_gpgmepp=no
978     _os=iOS
979     enable_mpl_subset=yes
980     enable_lotuswordpro=no
981     disable_database_connectivity_dependencies
982     enable_coinmp=no
983     enable_lpsolve=no
984     enable_extension_integration=no
985     enable_xmlhelp=no
986     with_ppds=no
987     if test "$enable_ios_simulator" = "yes"; then
988         host=x86_64-apple-darwin
989     fi
990     # See comment above the case "$host_os"
991     LINKFLAGSSHL="-dynamiclib -single_module"
993     # -fPIC is default
994     PICSWITCH=""
996     DLLPOST=".dylib"
998     # -undefined error is the default
999     LINKFLAGSNOUNDEFS=""
1001     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1002     # part, so use aarch64-apple-darwin for now.
1003     HOST_PLATFORM=aarch64-apple-darwin
1005     # Apple's Clang uses "arm64"
1006     host_cpu_for_clang=arm64
1009 freebsd*)
1010     using_freetype_fontconfig=yes
1011     using_x11=yes
1012     build_skia=yes
1013     AC_MSG_CHECKING([the FreeBSD operating system release])
1014     if test -n "$with_os_version"; then
1015         OSVERSION="$with_os_version"
1016     else
1017         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1018     fi
1019     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1020     AC_MSG_CHECKING([which thread library to use])
1021     if test "$OSVERSION" -lt "500016"; then
1022         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1023         PTHREAD_LIBS="-pthread"
1024     elif test "$OSVERSION" -lt "502102"; then
1025         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1026         PTHREAD_LIBS="-lc_r"
1027     else
1028         PTHREAD_CFLAGS=""
1029         PTHREAD_LIBS="-pthread"
1030     fi
1031     AC_MSG_RESULT([$PTHREAD_LIBS])
1032     _os=FreeBSD
1033     ;;
1035 *netbsd*)
1036     using_freetype_fontconfig=yes
1037     using_x11=yes
1038     test_gtk3_kde5=no
1039     build_skia=yes
1040     PTHREAD_LIBS="-pthread -lpthread"
1041     _os=NetBSD
1042     ;;
1044 aix*)
1045     using_freetype_fontconfig=yes
1046     using_x11=yes
1047     test_randr=no
1048     test_gstreamer_1_0=no
1049     PTHREAD_LIBS=-pthread
1050     _os=AIX
1051     ;;
1053 openbsd*)
1054     using_freetype_fontconfig=yes
1055     using_x11=yes
1056     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1057     PTHREAD_LIBS="-pthread"
1058     _os=OpenBSD
1059     ;;
1061 dragonfly*)
1062     using_freetype_fontconfig=yes
1063     using_x11=yes
1064     build_skia=yes
1065     PTHREAD_LIBS="-pthread"
1066     _os=DragonFly
1067     ;;
1069 linux-android*)
1070     using_freetype_fontconfig=yes
1071     using_headless_plugin=no
1072     using_x11=no
1073     build_crypto=no
1074     test_openldap=no
1075     test_system_freetype=no
1076     test_webdav=no
1077     disable_database_connectivity_dependencies
1078     enable_lotuswordpro=no
1079     enable_mpl_subset=yes
1080     enable_cairo_canvas=no
1081     enable_coinmp=yes
1082     enable_lpsolve=no
1083     enable_odk=no
1084     enable_python=no
1085     enable_xmlhelp=no
1086     _os=Android
1088     AC_DEFINE(HAVE_FT_FACE_GETCHARVARIANTINDEX)
1089     ;;
1091 haiku*)
1092     using_freetype_fontconfig=yes
1093     using_x11=no
1094     test_gtk3_kde5=no
1095     test_kf5=yes
1096     enable_odk=no
1097     enable_coinmp=no
1098     enable_pdfium=no
1099     enable_sdremote=no
1100     enable_postgresql_sdbc=no
1101     enable_firebird_sdbc=no
1102     _os=Haiku
1103     ;;
1105 emscripten)
1106     using_freetype_fontconfig=yes
1107     using_x11=no
1108     test_openldap=no
1109     enable_compiler_plugins=no
1110     test_cmis=no
1111     test_webdav=no
1112     enable_database_connectivity=no
1113     enable_lpsolve=no
1114     enable_xmlhelp=no
1115     with_system_zlib=no
1116     with_theme="breeze"
1117     _os=Emscripten
1118     ;;
1121     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1122     ;;
1123 esac
1125 AC_SUBST(HOST_PLATFORM)
1127 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1128     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1131 # Set defaults, if not set by platform
1132 test "${test_cups+set}" = set || test_cups="$using_x11"
1133 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1134 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1135 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1136 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1137 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1138 # don't handle test_qt5, so it can disable test_kf5 later
1139 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1140 test "${test_randr+set}" = set || test_randr="$using_x11"
1141 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1142 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1144 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1145 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1146 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1148 # convenience / platform overriding "fixes"
1149 # Don't sort!
1150 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1151 test "$test_kf5" = yes && test_qt5=yes
1152 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1153 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1154 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1156 # Keep in sync with the above $using_x11 depending test default list
1157 disable_x11_tests()
1159     test_cups=no
1160     test_dbus=no
1161     test_gstreamer_1_0=no
1162     test_gtk3_kde5=no
1163     test_gtk3=no
1164     test_gtk4=no
1165     test_kf5=no
1166     test_qt5=no
1167     test_qt6=no
1168     test_randr=no
1169     test_xrender=no
1172 test "$using_x11" = yes && USING_X11=TRUE
1174 if test "$using_freetype_fontconfig" = yes; then
1175     if test "$using_headless_plugin" = yes; then
1176         AC_DEFINE(ENABLE_HEADLESS)
1177         ENABLE_HEADLESS=TRUE
1178     fi
1181 AC_SUBST(ENABLE_HEADLESS)
1183 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1184 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1185 AC_MSG_NOTICE([VCL platform uses vclplug: $using_vclplug])
1186 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1188 # ===================================================================
1190 # End initial platform setup
1192 # ===================================================================
1194 if test "$_os" = "Android" ; then
1195     # Verify that the NDK and SDK options are proper
1196     if test -z "$with_android_ndk"; then
1197         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1198     elif test ! -f "$ANDROID_NDK_HOME/meta/abis.json"; then
1199         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1200     fi
1202     if test -z "$ANDROID_SDK_HOME"; then
1203         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1204     elif test ! -d "$ANDROID_SDK_HOME/platforms"; then
1205         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1206     fi
1208     BUILD_TOOLS_VERSION=`$SED -n -e 's/.*buildToolsVersion "\(.*\)"/\1/p' $SRC_ROOT/android/source/build.gradle`
1209     if test ! -d "$ANDROID_SDK_HOME/build-tools/$BUILD_TOOLS_VERSION"; then
1210         AC_MSG_WARN([android build-tools $BUILD_TOOLS_VERSION not found - install with
1211                          $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION
1212                     or adjust change $SRC_ROOT/android/source/build.gradle accordingly])
1213         add_warning "android build-tools $BUILD_TOOLS_VERSION not found - install with"
1214         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --all --filter build-tools-$BUILD_TOOLS_VERSION"
1215         add_warning "or adjust $SRC_ROOT/android/source/build.gradle accordingly"
1216     fi
1217     if test ! -f "$ANDROID_SDK_HOME/extras/android/m2repository/source.properties"; then
1218         AC_MSG_WARN([android support repository not found - install with
1219                          $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository
1220                      to allow the build to download the specified version of the android support libraries])
1221         add_warning "android support repository not found - install with"
1222         add_warning "    $ANDROID_SDK_HOME/tools/android update sdk -u --filter extra-android-m2repository"
1223         add_warning "to allow the build to download the specified version of the android support libraries"
1224     fi
1227 if test "$_os" = "AIX"; then
1228     AC_PATH_PROG(GAWK, gawk)
1229     if test -z "$GAWK"; then
1230         AC_MSG_ERROR([gawk not found in \$PATH])
1231     fi
1234 AC_SUBST(SDKDIRNAME)
1236 AC_SUBST(PTHREAD_CFLAGS)
1237 AC_SUBST(PTHREAD_LIBS)
1239 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1240 # By default use the ones specified by our build system,
1241 # but explicit override is possible.
1242 AC_MSG_CHECKING(for explicit AFLAGS)
1243 if test -n "$AFLAGS"; then
1244     AC_MSG_RESULT([$AFLAGS])
1245     x_AFLAGS=
1246 else
1247     AC_MSG_RESULT(no)
1248     x_AFLAGS=[\#]
1250 AC_MSG_CHECKING(for explicit CFLAGS)
1251 if test -n "$CFLAGS"; then
1252     AC_MSG_RESULT([$CFLAGS])
1253     x_CFLAGS=
1254 else
1255     AC_MSG_RESULT(no)
1256     x_CFLAGS=[\#]
1258 AC_MSG_CHECKING(for explicit CXXFLAGS)
1259 if test -n "$CXXFLAGS"; then
1260     AC_MSG_RESULT([$CXXFLAGS])
1261     x_CXXFLAGS=
1262 else
1263     AC_MSG_RESULT(no)
1264     x_CXXFLAGS=[\#]
1266 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1267 if test -n "$OBJCFLAGS"; then
1268     AC_MSG_RESULT([$OBJCFLAGS])
1269     x_OBJCFLAGS=
1270 else
1271     AC_MSG_RESULT(no)
1272     x_OBJCFLAGS=[\#]
1274 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1275 if test -n "$OBJCXXFLAGS"; then
1276     AC_MSG_RESULT([$OBJCXXFLAGS])
1277     x_OBJCXXFLAGS=
1278 else
1279     AC_MSG_RESULT(no)
1280     x_OBJCXXFLAGS=[\#]
1282 AC_MSG_CHECKING(for explicit LDFLAGS)
1283 if test -n "$LDFLAGS"; then
1284     AC_MSG_RESULT([$LDFLAGS])
1285     x_LDFLAGS=
1286 else
1287     AC_MSG_RESULT(no)
1288     x_LDFLAGS=[\#]
1290 AC_SUBST(AFLAGS)
1291 AC_SUBST(CFLAGS)
1292 AC_SUBST(CXXFLAGS)
1293 AC_SUBST(OBJCFLAGS)
1294 AC_SUBST(OBJCXXFLAGS)
1295 AC_SUBST(LDFLAGS)
1296 AC_SUBST(x_AFLAGS)
1297 AC_SUBST(x_CFLAGS)
1298 AC_SUBST(x_CXXFLAGS)
1299 AC_SUBST(x_OBJCFLAGS)
1300 AC_SUBST(x_OBJCXXFLAGS)
1301 AC_SUBST(x_LDFLAGS)
1303 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1304 my_original_CFLAGS=$CFLAGS
1305 my_original_CXXFLAGS=$CXXFLAGS
1306 my_original_CPPFLAGS=$CPPFLAGS
1308 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1309 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1310 dnl AC_PROG_CC internally.
1311 if test "$_os" != "WINNT"; then
1312     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that
1313     save_CFLAGS=$CFLAGS
1314     AC_PROG_CC
1315     CFLAGS=$save_CFLAGS
1316     if test -z "$CC_BASE"; then
1317         CC_BASE=`first_arg_basename "$CC"`
1318     fi
1321 if test "$_os" != "WINNT"; then
1322     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1323 else
1324     ENDIANNESS=little
1326 AC_SUBST(ENDIANNESS)
1328 if test $_os != "WINNT"; then
1329     save_LIBS="$LIBS"
1330     AC_SEARCH_LIBS([dlsym], [dl],
1331         [case "$ac_cv_search_dlsym" in -l*) DLOPEN_LIBS="$ac_cv_search_dlsym";; esac],
1332         [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1333     LIBS="$save_LIBS"
1335 AC_SUBST(DLOPEN_LIBS)
1337 dnl ===================================================================
1338 dnl Sanity checks for Emscripten SDK setup
1339 dnl ===================================================================
1341 if test "$_os" = "Emscripten"; then
1342     EMSCRIPTEN_ERROR=0
1343     if ! which emconfigure >/dev/null 2>&1; then
1344         AC_MSG_WARN([emconfigure must be in your \$PATH])
1345         EMSCRIPTEN_ERROR=1
1346     fi
1347     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1348         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1349         EMSCRIPTEN_ERROR=1
1350     fi
1351     if test $EMSCRIPTEN_ERROR -ne 0; then
1352         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1353     fi
1356 ###############################################################################
1357 # Extensions switches --enable/--disable
1358 ###############################################################################
1359 # By default these should be enabled unless having extra dependencies.
1360 # If there is extra dependency over configure options then the enable should
1361 # be automagic based on whether the requiring feature is enabled or not.
1362 # All this options change anything only with --enable-extension-integration.
1364 # The name of this option and its help string makes it sound as if
1365 # extensions are built anyway, just not integrated in the installer,
1366 # if you use --disable-extension-integration. Is that really the
1367 # case?
1369 AC_ARG_ENABLE(ios-simulator,
1370     AS_HELP_STRING([--enable-ios-simulator],
1371         [build for iOS simulator])
1374 libo_FUZZ_ARG_ENABLE(extension-integration,
1375     AS_HELP_STRING([--disable-extension-integration],
1376         [Disable integration of the built extensions in the installer of the
1377          product. Use this switch to disable the integration.])
1380 AC_ARG_ENABLE(avmedia,
1381     AS_HELP_STRING([--disable-avmedia],
1382         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.])
1385 AC_ARG_ENABLE(database-connectivity,
1386     AS_HELP_STRING([--disable-database-connectivity],
1387         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1390 # This doesn't mean not building (or "integrating") extensions
1391 # (although it probably should; i.e. it should imply
1392 # --disable-extension-integration I guess), it means not supporting
1393 # any extension mechanism at all
1394 libo_FUZZ_ARG_ENABLE(extensions,
1395     AS_HELP_STRING([--disable-extensions],
1396         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1399 AC_ARG_ENABLE(scripting,
1400     AS_HELP_STRING([--disable-scripting],
1401         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.])
1404 # This is mainly for Android and iOS, but could potentially be used in some
1405 # special case otherwise, too, so factored out as a separate setting
1407 AC_ARG_ENABLE(dynamic-loading,
1408     AS_HELP_STRING([--disable-dynamic-loading],
1409         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1412 libo_FUZZ_ARG_ENABLE(report-builder,
1413     AS_HELP_STRING([--disable-report-builder],
1414         [Disable the Report Builder.])
1417 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1418     AS_HELP_STRING([--enable-ext-wiki-publisher],
1419         [Enable the Wiki Publisher extension.])
1422 libo_FUZZ_ARG_ENABLE(lpsolve,
1423     AS_HELP_STRING([--disable-lpsolve],
1424         [Disable compilation of the lp solve solver ])
1426 libo_FUZZ_ARG_ENABLE(coinmp,
1427     AS_HELP_STRING([--disable-coinmp],
1428         [Disable compilation of the CoinMP solver ])
1431 libo_FUZZ_ARG_ENABLE(pdfimport,
1432     AS_HELP_STRING([--disable-pdfimport],
1433         [Disable building the PDF import feature.])
1436 libo_FUZZ_ARG_ENABLE(pdfium,
1437     AS_HELP_STRING([--disable-pdfium],
1438         [Disable building PDFium. Results in unsecure PDF signature verification.])
1441 libo_FUZZ_ARG_ENABLE(skia,
1442     AS_HELP_STRING([--disable-skia],
1443         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1446 ###############################################################################
1448 dnl ---------- *** ----------
1450 libo_FUZZ_ARG_ENABLE(mergelibs,
1451     AS_HELP_STRING([--enable-mergelibs],
1452         [Merge several of the smaller libraries into one big, "merged", one.])
1455 libo_FUZZ_ARG_ENABLE(breakpad,
1456     AS_HELP_STRING([--enable-breakpad],
1457         [Enables breakpad for crash reporting.])
1460 libo_FUZZ_ARG_ENABLE(crashdump,
1461     AS_HELP_STRING([--disable-crashdump],
1462         [Disable dump.ini and dump-file, when --enable-breakpad])
1465 AC_ARG_ENABLE(fetch-external,
1466     AS_HELP_STRING([--disable-fetch-external],
1467         [Disables fetching external tarballs from web sources.])
1470 AC_ARG_ENABLE(fuzzers,
1471     AS_HELP_STRING([--enable-fuzzers],
1472         [Enables building libfuzzer targets for fuzz testing.])
1475 libo_FUZZ_ARG_ENABLE(pch,
1476     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1477         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1478          Using 'system' will include only external headers, 'base' will add also headers
1479          from base modules, 'normal' will also add all headers except from the module built,
1480          'full' will use all suitable headers even from a module itself.])
1483 libo_FUZZ_ARG_ENABLE(epm,
1484     AS_HELP_STRING([--enable-epm],
1485         [LibreOffice includes self-packaging code, that requires epm, however epm is
1486          useless for large scale package building.])
1489 libo_FUZZ_ARG_ENABLE(odk,
1490     AS_HELP_STRING([--enable-odk],
1491         [Enable building the Office Development Kit, the part that extensions need to build against])
1494 AC_ARG_ENABLE(mpl-subset,
1495     AS_HELP_STRING([--enable-mpl-subset],
1496         [Don't compile any pieces which are not MPL or more liberally licensed])
1499 libo_FUZZ_ARG_ENABLE(evolution2,
1500     AS_HELP_STRING([--enable-evolution2],
1501         [Allows the built-in evolution 2 addressbook connectivity build to be
1502          enabled.])
1505 AC_ARG_ENABLE(avahi,
1506     AS_HELP_STRING([--enable-avahi],
1507         [Determines whether to use Avahi to advertise Impress to remote controls.])
1510 libo_FUZZ_ARG_ENABLE(werror,
1511     AS_HELP_STRING([--enable-werror],
1512         [Turn warnings to errors. (Has no effect in modules where the treating
1513          of warnings as errors is disabled explicitly.)]),
1516 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1517     AS_HELP_STRING([--enable-assert-always-abort],
1518         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1521 libo_FUZZ_ARG_ENABLE(dbgutil,
1522     AS_HELP_STRING([--enable-dbgutil],
1523         [Provide debugging support from --enable-debug and include additional debugging
1524          utilities such as object counting or more expensive checks.
1525          This is the recommended option for developers.
1526          Note that this makes the build ABI incompatible, it is not possible to mix object
1527          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1529 libo_FUZZ_ARG_ENABLE(debug,
1530     AS_HELP_STRING([--enable-debug],
1531         [Include debugging information, disable compiler optimization and inlining plus
1532          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1534 libo_FUZZ_ARG_ENABLE(split-debug,
1535     AS_HELP_STRING([--disable-split-debug],
1536         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1537          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1539 libo_FUZZ_ARG_ENABLE(gdb-index,
1540     AS_HELP_STRING([--disable-gdb-index],
1541         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1542          The feature requires the gold or lld linker.]))
1544 libo_FUZZ_ARG_ENABLE(sal-log,
1545     AS_HELP_STRING([--enable-sal-log],
1546         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1548 libo_FUZZ_ARG_ENABLE(symbols,
1549     AS_HELP_STRING([--enable-symbols],
1550         [Generate debug information.
1551          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1552          otherwise. It is possible to explicitly specify gbuild build targets
1553          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1554          everything in the directory; there is no ordering, more specific overrides
1555          more general, and disabling takes precedence).
1556          Example: --enable-symbols="all -sw/ -Library_sc".]))
1558 libo_FUZZ_ARG_ENABLE(optimized,
1559     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1560         [Whether to compile with optimization flags.
1561          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1562          otherwise. Using 'debug' will try to use only optimizations that should
1563          not interfere with debugging. For Emscripten we default to optimized (-O1)
1564          debug build, as otherwise binaries become too large.]))
1566 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1567     AS_HELP_STRING([--disable-runtime-optimizations],
1568         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1569          JVM JIT) that are known to interact badly with certain dynamic analysis
1570          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1571          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1572          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1574 AC_ARG_WITH(valgrind,
1575     AS_HELP_STRING([--with-valgrind],
1576         [Make availability of Valgrind headers a hard requirement.]))
1578 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1579     AS_HELP_STRING([--enable-compiler-plugins],
1580         [Enable compiler plugins that will perform additional checks during
1581          building. Enabled automatically by --enable-dbgutil.
1582          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1583 COMPILER_PLUGINS_DEBUG=
1584 if test "$enable_compiler_plugins" = debug; then
1585     enable_compiler_plugins=yes
1586     COMPILER_PLUGINS_DEBUG=TRUE
1589 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1590     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1591         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1592          relevant in the --disable-compiler-plugins case.]))
1594 libo_FUZZ_ARG_ENABLE(ooenv,
1595     AS_HELP_STRING([--enable-ooenv],
1596         [Enable ooenv for the instdir installation.]))
1598 AC_ARG_ENABLE(lto,
1599     AS_HELP_STRING([--enable-lto],
1600         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1601          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1602          linker.)]))
1604 AC_ARG_ENABLE(python,
1605     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1606         [Enables or disables Python support at run-time.
1607          Also specifies what Python to use at build-time.
1608          'fully-internal' even forces the internal version for uses of Python
1609          during the build.
1610          On macOS the only choices are
1611          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1612          ]))
1614 libo_FUZZ_ARG_ENABLE(gtk3,
1615     AS_HELP_STRING([--disable-gtk3],
1616         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1617 ,test "${enable_gtk3+set}" = set || enable_gtk3=yes)
1619 AC_ARG_ENABLE(gtk4,
1620     AS_HELP_STRING([--enable-gtk4],
1621         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1623 AC_ARG_ENABLE(introspection,
1624     AS_HELP_STRING([--enable-introspection],
1625         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1626          Linux distributions.)]))
1628 AC_ARG_ENABLE(split-app-modules,
1629     AS_HELP_STRING([--enable-split-app-modules],
1630         [Split file lists for app modules, e.g. base, calc.
1631          Has effect only with make distro-pack-install]),
1634 AC_ARG_ENABLE(split-opt-features,
1635     AS_HELP_STRING([--enable-split-opt-features],
1636         [Split file lists for some optional features, e.g. pyuno, testtool.
1637          Has effect only with make distro-pack-install]),
1640 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1641     AS_HELP_STRING([--disable-cairo-canvas],
1642         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1645 libo_FUZZ_ARG_ENABLE(dbus,
1646     AS_HELP_STRING([--disable-dbus],
1647         [Determines whether to enable features that depend on dbus.
1648          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1649 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1651 libo_FUZZ_ARG_ENABLE(sdremote,
1652     AS_HELP_STRING([--disable-sdremote],
1653         [Determines whether to enable Impress remote control (i.e. the server component).]),
1654 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1656 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1657     AS_HELP_STRING([--disable-sdremote-bluetooth],
1658         [Determines whether to build sdremote with bluetooth support.
1659          Requires dbus on Linux.]))
1661 libo_FUZZ_ARG_ENABLE(gio,
1662     AS_HELP_STRING([--disable-gio],
1663         [Determines whether to use the GIO support.]),
1664 ,test "${enable_gio+set}" = set || enable_gio=yes)
1666 AC_ARG_ENABLE(qt5,
1667     AS_HELP_STRING([--enable-qt5],
1668         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1669          available.]),
1672 AC_ARG_ENABLE(qt6,
1673     AS_HELP_STRING([--enable-qt6],
1674         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1675          available.]),
1678 AC_ARG_ENABLE(kf5,
1679     AS_HELP_STRING([--enable-kf5],
1680         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1681          KF5 are available.]),
1684 AC_ARG_ENABLE(gtk3_kde5,
1685     AS_HELP_STRING([--enable-gtk3-kde5],
1686         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1687          platforms where Gtk3, Qt5 and Plasma is available.]),
1690 AC_ARG_ENABLE(gui,
1691     AS_HELP_STRING([--disable-gui],
1692         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1693 ,enable_gui=yes)
1695 libo_FUZZ_ARG_ENABLE(randr,
1696     AS_HELP_STRING([--disable-randr],
1697         [Disable RandR support in the vcl project.]),
1698 ,test "${enable_randr+set}" = set || enable_randr=yes)
1700 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1701     AS_HELP_STRING([--disable-gstreamer-1-0],
1702         [Disable building with the gstreamer 1.0 avmedia backend.]),
1703 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1705 libo_FUZZ_ARG_ENABLE([eot],
1706     [AS_HELP_STRING([--enable-eot],
1707         [Enable support for Embedded OpenType fonts.])],
1708 ,test "${enable_eot+set}" = set || enable_eot=no)
1710 libo_FUZZ_ARG_ENABLE(cve-tests,
1711     AS_HELP_STRING([--disable-cve-tests],
1712         [Prevent CVE tests to be executed]),
1715 libo_FUZZ_ARG_ENABLE(chart-tests,
1716     AS_HELP_STRING([--enable-chart-tests],
1717         [Executes chart XShape tests. In a perfect world these tests would be
1718          stable and everyone could run them, in reality it is best to run them
1719          only on a few machines that are known to work and maintained by people
1720          who can judge if a test failure is a regression or not.]),
1723 AC_ARG_ENABLE(build-opensymbol,
1724     AS_HELP_STRING([--enable-build-opensymbol],
1725         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1726          fontforge installed.]),
1729 AC_ARG_ENABLE(dependency-tracking,
1730     AS_HELP_STRING([--enable-dependency-tracking],
1731         [Do not reject slow dependency extractors.])[
1732   --disable-dependency-tracking
1733                           Disables generation of dependency information.
1734                           Speed up one-time builds.],
1737 AC_ARG_ENABLE(icecream,
1738     AS_HELP_STRING([--enable-icecream],
1739         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1740          It defaults to /opt/icecream for the location of the icecream gcc/g++
1741          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1744 AC_ARG_ENABLE(ld,
1745     AS_HELP_STRING([--enable-ld=<linker>],
1746         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1747          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1748          If <linker> contains any ':', the part before the first ':' is used as the value of
1749          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1750          needed for Clang 12).]),
1753 libo_FUZZ_ARG_ENABLE(cups,
1754     AS_HELP_STRING([--disable-cups],
1755         [Do not build cups support.])
1758 AC_ARG_ENABLE(ccache,
1759     AS_HELP_STRING([--disable-ccache],
1760         [Do not try to use ccache automatically.
1761          By default, unless on Windows, we will try to detect if ccache is available; in that case if
1762          CC/CXX are not yet set, and --enable-icecream is not given, we
1763          attempt to use ccache. --disable-ccache disables ccache completely.
1764          Additionally ccache's depend mode is enabled if possible,
1765          use --enable-ccache=nodepend to enable ccache without depend mode.
1769 libo_FUZZ_ARG_ENABLE(online-update,
1770     AS_HELP_STRING([--enable-online-update],
1771         [Enable the online update service that will check for new versions of
1772          LibreOffice. By default, it is enabled on Windows and Mac, disabled on Linux.
1773          If the value is "mar", the experimental Mozilla-like update will be
1774          enabled instead of the traditional update mechanism.]),
1777 AC_ARG_WITH(update-config,
1778     AS_HELP_STRING([--with-update-config=/tmp/update.ini],
1779                    [Path to the update config ini file]))
1781 libo_FUZZ_ARG_ENABLE(extension-update,
1782     AS_HELP_STRING([--disable-extension-update],
1783         [Disable possibility to update installed extensions.]),
1786 libo_FUZZ_ARG_ENABLE(release-build,
1787     AS_HELP_STRING([--enable-release-build],
1788         [Enable release build. Note that the "release build" choice is orthogonal to
1789          whether symbols are present, debug info is generated, or optimization
1790          is done.
1791          See http://wiki.documentfoundation.org/Development/DevBuild]),
1794 AC_ARG_ENABLE(windows-build-signing,
1795     AS_HELP_STRING([--enable-windows-build-signing],
1796         [Enable signing of windows binaries (*.exe, *.dll)]),
1799 AC_ARG_ENABLE(silent-msi,
1800     AS_HELP_STRING([--enable-silent-msi],
1801         [Enable MSI with LIMITUI=1 (silent install).]),
1804 AC_ARG_ENABLE(macosx-code-signing,
1805     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1806         [Sign executables, dylibs, frameworks and the app bundle. If you
1807          don't provide an identity the first suitable certificate
1808          in your keychain is used.]),
1811 AC_ARG_ENABLE(macosx-package-signing,
1812     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1813         [Create a .pkg suitable for uploading to the Mac App Store and sign
1814          it. If you don't provide an identity the first suitable certificate
1815          in your keychain is used.]),
1818 AC_ARG_ENABLE(macosx-sandbox,
1819     AS_HELP_STRING([--enable-macosx-sandbox],
1820         [Make the app bundle run in a sandbox. Requires code signing.
1821          Is required by apps distributed in the Mac App Store, and implies
1822          adherence to App Store rules.]),
1825 AC_ARG_WITH(macosx-bundle-identifier,
1826     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1827         [Define the macOS bundle identifier. Default is the somewhat weird
1828          org.libreoffice.script ("script", huh?).]),
1829 ,with_macosx_bundle_identifier=org.libreoffice.script)
1831 AC_ARG_WITH(product-name,
1832     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1833         [Define the product name. Default is AC_PACKAGE_NAME.]),
1834 ,with_product_name=$PRODUCTNAME)
1836 libo_FUZZ_ARG_ENABLE(community-flavor,
1837     AS_HELP_STRING([--disable-community-flavor],
1838         [Disable the Community branding.]),
1841 AC_ARG_WITH(package-version,
1842     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1843         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1846 libo_FUZZ_ARG_ENABLE(readonly-installset,
1847     AS_HELP_STRING([--enable-readonly-installset],
1848         [Prevents any attempts by LibreOffice to write into its installation. That means
1849          at least that no "system-wide" extensions can be added. Partly experimental work in
1850          progress, probably not fully implemented. Always enabled for macOS.]),
1853 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1854     AS_HELP_STRING([--disable-mariadb-sdbc],
1855         [Disable the build of the MariaDB/MySQL-SDBC driver.])
1858 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
1859     AS_HELP_STRING([--disable-postgresql-sdbc],
1860         [Disable the build of the PostgreSQL-SDBC driver.])
1863 libo_FUZZ_ARG_ENABLE(lotuswordpro,
1864     AS_HELP_STRING([--disable-lotuswordpro],
1865         [Disable the build of the Lotus Word Pro filter.]),
1866 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
1868 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
1869     AS_HELP_STRING([--disable-firebird-sdbc],
1870         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
1871 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
1873 AC_ARG_ENABLE(bogus-pkg-config,
1874     AS_HELP_STRING([--enable-bogus-pkg-config],
1875         [MACOSX only: on MacOSX pkg-config can cause trouble. by default if one is found in the PATH, an error is issued. This flag turn that error into a warning.]),
1878 AC_ARG_ENABLE(openssl,
1879     AS_HELP_STRING([--disable-openssl],
1880         [Disable using libssl/libcrypto from OpenSSL. If disabled,
1881          components will either use GNUTLS or NSS. Work in progress,
1882          use only if you are hacking on it.]),
1883 ,enable_openssl=yes)
1885 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
1886     AS_HELP_STRING([--enable-cipher-openssl-backend],
1887         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
1888          Requires --enable-openssl.]))
1890 AC_ARG_ENABLE(nss,
1891     AS_HELP_STRING([--disable-nss],
1892         [Disable using NSS. If disabled,
1893          components will either use GNUTLS or openssl. Work in progress,
1894          use only if you are hacking on it.]),
1895 ,enable_nss=yes)
1897 AC_ARG_ENABLE(library-bin-tar,
1898     AS_HELP_STRING([--enable-library-bin-tar],
1899         [Enable the building and reused of tarball of binary build for some 'external' libraries.
1900         Some libraries can save their build result in a tarball
1901         stored in TARFILE_LOCATION. That binary tarball is
1902         uniquely identified by the source tarball,
1903         the content of the config_host.mk file and the content
1904         of the top-level directory in core for that library
1905         If this option is enabled, then if such a tarfile exist, it will be untarred
1906         instead of the source tarfile, and the build step will be skipped for that
1907         library.
1908         If a proper tarfile does not exist, then the normal source-based
1909         build is done for that library and a proper binary tarfile is created
1910         for the next time.]),
1913 AC_ARG_ENABLE(dconf,
1914     AS_HELP_STRING([--disable-dconf],
1915         [Disable the dconf configuration backend (enabled by default where
1916          available).]))
1918 libo_FUZZ_ARG_ENABLE(formula-logger,
1919     AS_HELP_STRING(
1920         [--enable-formula-logger],
1921         [Enable formula logger for logging formula calculation flow in Calc.]
1922     )
1925 AC_ARG_ENABLE(ldap,
1926     AS_HELP_STRING([--disable-ldap],
1927         [Disable LDAP support.]),
1928 ,enable_ldap=yes)
1930 AC_ARG_ENABLE(opencl,
1931     AS_HELP_STRING([--disable-opencl],
1932         [Disable OpenCL support.]),
1933 ,enable_opencl=yes)
1935 libo_FUZZ_ARG_ENABLE(librelogo,
1936     AS_HELP_STRING([--disable-librelogo],
1937         [Do not build LibreLogo.]),
1938 ,enable_librelogo=yes)
1940 AC_ARG_ENABLE(cmis,
1941     AS_HELP_STRING([--disable-cmis],
1942         [Disable CMIS support.]),
1943 ,enable_cmis=yes)
1945 AC_ARG_ENABLE(curl,
1946     AS_HELP_STRING([--disable-curl],
1947         [Disable CURL support.]),
1948 ,enable_curl=yes)
1950 AC_ARG_ENABLE(wasm-strip,
1951     AS_HELP_STRING([--enable-wasm-strip],
1952         [Strip the static build like for WASM/emscripten platform.]),
1953 ,enable_wasm_strip=yes)
1955 AC_ARG_ENABLE(xmlhelp,
1956     AS_HELP_STRING([--disable-xmlhelp],
1957         [Disable XML help support]),
1958 ,enable_xmlhelp=yes)
1961 dnl ===================================================================
1962 dnl Optional Packages (--with/without-)
1963 dnl ===================================================================
1965 AC_ARG_WITH(gcc-home,
1966     AS_HELP_STRING([--with-gcc-home],
1967         [Specify the location of gcc/g++ manually. This can be used in conjunction
1968          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
1969          non-default path.]),
1972 AC_ARG_WITH(gnu-patch,
1973     AS_HELP_STRING([--with-gnu-patch],
1974         [Specify location of GNU patch on Solaris or FreeBSD.]),
1977 AC_ARG_WITH(build-platform-configure-options,
1978     AS_HELP_STRING([--with-build-platform-configure-options],
1979         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
1982 AC_ARG_WITH(gnu-cp,
1983     AS_HELP_STRING([--with-gnu-cp],
1984         [Specify location of GNU cp on Solaris or FreeBSD.]),
1987 AC_ARG_WITH(external-tar,
1988     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
1989         [Specify an absolute path of where to find (and store) tarfiles.]),
1990     TARFILE_LOCATION=$withval ,
1993 AC_ARG_WITH(referenced-git,
1994     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
1995         [Specify another checkout directory to reference. This makes use of
1996                  git submodule update --reference, and saves a lot of diskspace
1997                  when having multiple trees side-by-side.]),
1998     GIT_REFERENCE_SRC=$withval ,
2001 AC_ARG_WITH(linked-git,
2002     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2003         [Specify a directory where the repositories of submodules are located.
2004          This uses a method similar to git-new-workdir to get submodules.]),
2005     GIT_LINK_SRC=$withval ,
2008 AC_ARG_WITH(galleries,
2009     AS_HELP_STRING([--with-galleries],
2010         [Specify how galleries should be built. It is possible either to
2011          build these internally from source ("build"),
2012          or to disable them ("no")]),
2015 AC_ARG_WITH(theme,
2016     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2017         [Choose which themes to include. By default those themes with an '*' are included.
2018          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg, *colibre, *colibre_svg, *elementary,
2019          *elementary_svg, *karasa_jaga, *karasa_jaga_svg, *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg, *sukapura, *sukapura_svg.]),
2022 libo_FUZZ_ARG_WITH(helppack-integration,
2023     AS_HELP_STRING([--without-helppack-integration],
2024         [It will not integrate the helppacks to the installer
2025          of the product. Please use this switch to use the online help
2026          or separate help packages.]),
2029 libo_FUZZ_ARG_WITH(fonts,
2030     AS_HELP_STRING([--without-fonts],
2031         [LibreOffice includes some third-party fonts to provide a reliable basis for
2032          help content, templates, samples, etc. When these fonts are already
2033          known to be available on the system then you should use this option.]),
2036 AC_ARG_WITH(epm,
2037     AS_HELP_STRING([--with-epm],
2038         [Decides which epm to use. Default is to use the one from the system if
2039          one is built. When either this is not there or you say =internal epm
2040          will be built.]),
2043 AC_ARG_WITH(package-format,
2044     AS_HELP_STRING([--with-package-format],
2045         [Specify package format(s) for LibreOffice installation sets. The
2046          implicit --without-package-format leads to no installation sets being
2047          generated. Possible values: aix, archive, bsd, deb, dmg,
2048          installed, msi, pkg, and rpm.
2049          Example: --with-package-format='deb rpm']),
2052 AC_ARG_WITH(tls,
2053     AS_HELP_STRING([--with-tls],
2054         [Decides which TLS/SSL and cryptographic implementations to use for
2055          LibreOffice's code. Notice that this doesn't apply for depending
2056          libraries like "neon", for example. Default is to use NSS
2057          although OpenSSL is also possible. Notice that selecting NSS restricts
2058          the usage of OpenSSL in LO's code but selecting OpenSSL doesn't
2059          restrict by now the usage of NSS in LO's code. Possible values:
2060          openssl, nss. Example: --with-tls="nss"]),
2063 AC_ARG_WITH(system-libs,
2064     AS_HELP_STRING([--with-system-libs],
2065         [Use libraries already on system -- enables all --with-system-* flags.]),
2068 AC_ARG_WITH(system-bzip2,
2069     AS_HELP_STRING([--with-system-bzip2],
2070         [Use bzip2 already on system. Used only when --enable-online-update=mar]),,
2071     [with_system_bzip2="$with_system_libs"])
2073 AC_ARG_WITH(system-headers,
2074     AS_HELP_STRING([--with-system-headers],
2075         [Use headers already on system -- enables all --with-system-* flags for
2076          external packages whose headers are the only entities used i.e.
2077          boost/odbc/sane-header(s).]),,
2078     [with_system_headers="$with_system_libs"])
2080 AC_ARG_WITH(system-jars,
2081     AS_HELP_STRING([--without-system-jars],
2082         [When building with --with-system-libs, also the needed jars are expected
2083          on the system. Use this to disable that]),,
2084     [with_system_jars="$with_system_libs"])
2086 AC_ARG_WITH(system-cairo,
2087     AS_HELP_STRING([--with-system-cairo],
2088         [Use cairo libraries already on system.  Happens automatically for
2089          (implicit) --enable-gtk3.]))
2091 AC_ARG_WITH(system-epoxy,
2092     AS_HELP_STRING([--with-system-epoxy],
2093         [Use epoxy libraries already on system.  Happens automatically for
2094          (implicit) --enable-gtk3.]),,
2095        [with_system_epoxy="$with_system_libs"])
2097 AC_ARG_WITH(myspell-dicts,
2098     AS_HELP_STRING([--with-myspell-dicts],
2099         [Adds myspell dictionaries to the LibreOffice installation set]),
2102 AC_ARG_WITH(system-dicts,
2103     AS_HELP_STRING([--without-system-dicts],
2104         [Do not use dictionaries from system paths.]),
2107 AC_ARG_WITH(external-dict-dir,
2108     AS_HELP_STRING([--with-external-dict-dir],
2109         [Specify external dictionary dir.]),
2112 AC_ARG_WITH(external-hyph-dir,
2113     AS_HELP_STRING([--with-external-hyph-dir],
2114         [Specify external hyphenation pattern dir.]),
2117 AC_ARG_WITH(external-thes-dir,
2118     AS_HELP_STRING([--with-external-thes-dir],
2119         [Specify external thesaurus dir.]),
2122 AC_ARG_WITH(system-zlib,
2123     AS_HELP_STRING([--with-system-zlib],
2124         [Use zlib already on system.]),,
2125     [with_system_zlib=auto])
2127 AC_ARG_WITH(system-jpeg,
2128     AS_HELP_STRING([--with-system-jpeg],
2129         [Use jpeg already on system.]),,
2130     [with_system_jpeg="$with_system_libs"])
2132 AC_ARG_WITH(system-clucene,
2133     AS_HELP_STRING([--with-system-clucene],
2134         [Use clucene already on system.]),,
2135     [with_system_clucene="$with_system_libs"])
2137 AC_ARG_WITH(system-expat,
2138     AS_HELP_STRING([--with-system-expat],
2139         [Use expat already on system.]),,
2140     [with_system_expat="$with_system_libs"])
2142 AC_ARG_WITH(system-libxml,
2143     AS_HELP_STRING([--with-system-libxml],
2144         [Use libxml/libxslt already on system.]),,
2145     [with_system_libxml=auto])
2147 AC_ARG_WITH(system-icu,
2148     AS_HELP_STRING([--with-system-icu],
2149         [Use icu already on system.]),,
2150     [with_system_icu="$with_system_libs"])
2152 AC_ARG_WITH(system-ucpp,
2153     AS_HELP_STRING([--with-system-ucpp],
2154         [Use ucpp already on system.]),,
2155     [])
2157 AC_ARG_WITH(system-openldap,
2158     AS_HELP_STRING([--with-system-openldap],
2159         [Use the OpenLDAP LDAP SDK already on system.]),,
2160     [with_system_openldap="$with_system_libs"])
2162 libo_FUZZ_ARG_ENABLE(poppler,
2163     AS_HELP_STRING([--disable-poppler],
2164         [Disable building Poppler.])
2167 AC_ARG_WITH(system-poppler,
2168     AS_HELP_STRING([--with-system-poppler],
2169         [Use system poppler (only needed for PDF import).]),,
2170     [with_system_poppler="$with_system_libs"])
2172 libo_FUZZ_ARG_ENABLE(gpgmepp,
2173     AS_HELP_STRING([--disable-gpgmepp],
2174         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2177 AC_ARG_WITH(system-gpgmepp,
2178     AS_HELP_STRING([--with-system-gpgmepp],
2179         [Use gpgmepp already on system]),,
2180     [with_system_gpgmepp="$with_system_libs"])
2182 AC_ARG_WITH(system-mariadb,
2183     AS_HELP_STRING([--with-system-mariadb],
2184         [Use MariaDB/MySQL libraries already on system.]),,
2185     [with_system_mariadb="$with_system_libs"])
2187 AC_ARG_ENABLE(bundle-mariadb,
2188     AS_HELP_STRING([--enable-bundle-mariadb],
2189         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2192 AC_ARG_WITH(system-postgresql,
2193     AS_HELP_STRING([--with-system-postgresql],
2194         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2195          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2196     [with_system_postgresql="$with_system_libs"])
2198 AC_ARG_WITH(libpq-path,
2199     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2200         [Use this PostgreSQL C interface (libpq) installation for building
2201          the PostgreSQL-SDBC extension.]),
2204 AC_ARG_WITH(system-firebird,
2205     AS_HELP_STRING([--with-system-firebird],
2206         [Use Firebird libraries already on system, for building the Firebird-SDBC
2207          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2208     [with_system_firebird="$with_system_libs"])
2210 AC_ARG_WITH(system-libtommath,
2211             AS_HELP_STRING([--with-system-libtommath],
2212                            [Use libtommath already on system]),,
2213             [with_system_libtommath="$with_system_libs"])
2215 AC_ARG_WITH(system-hsqldb,
2216     AS_HELP_STRING([--with-system-hsqldb],
2217         [Use hsqldb already on system.]))
2219 AC_ARG_WITH(hsqldb-jar,
2220     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2221         [Specify path to jarfile manually.]),
2222     HSQLDB_JAR=$withval)
2224 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2225     AS_HELP_STRING([--disable-scripting-beanshell],
2226         [Disable support for scripts in BeanShell.]),
2230 AC_ARG_WITH(system-beanshell,
2231     AS_HELP_STRING([--with-system-beanshell],
2232         [Use beanshell already on system.]),,
2233     [with_system_beanshell="$with_system_jars"])
2235 AC_ARG_WITH(beanshell-jar,
2236     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2237         [Specify path to jarfile manually.]),
2238     BSH_JAR=$withval)
2240 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2241     AS_HELP_STRING([--disable-scripting-javascript],
2242         [Disable support for scripts in JavaScript.]),
2246 AC_ARG_WITH(system-rhino,
2247     AS_HELP_STRING([--with-system-rhino],
2248         [Use rhino already on system.]),,)
2249 #    [with_system_rhino="$with_system_jars"])
2250 # Above is not used as we have different debug interface
2251 # patched into internal rhino. This code needs to be fixed
2252 # before we can enable it by default.
2254 AC_ARG_WITH(rhino-jar,
2255     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2256         [Specify path to jarfile manually.]),
2257     RHINO_JAR=$withval)
2259 AC_ARG_WITH(system-jfreereport,
2260     AS_HELP_STRING([--with-system-jfreereport],
2261         [Use JFreeReport already on system.]),,
2262     [with_system_jfreereport="$with_system_jars"])
2264 AC_ARG_WITH(sac-jar,
2265     AS_HELP_STRING([--with-sac-jar=JARFILE],
2266         [Specify path to jarfile manually.]),
2267     SAC_JAR=$withval)
2269 AC_ARG_WITH(libxml-jar,
2270     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2271         [Specify path to jarfile manually.]),
2272     LIBXML_JAR=$withval)
2274 AC_ARG_WITH(flute-jar,
2275     AS_HELP_STRING([--with-flute-jar=JARFILE],
2276         [Specify path to jarfile manually.]),
2277     FLUTE_JAR=$withval)
2279 AC_ARG_WITH(jfreereport-jar,
2280     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2281         [Specify path to jarfile manually.]),
2282     JFREEREPORT_JAR=$withval)
2284 AC_ARG_WITH(liblayout-jar,
2285     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2286         [Specify path to jarfile manually.]),
2287     LIBLAYOUT_JAR=$withval)
2289 AC_ARG_WITH(libloader-jar,
2290     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2291         [Specify path to jarfile manually.]),
2292     LIBLOADER_JAR=$withval)
2294 AC_ARG_WITH(libformula-jar,
2295     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2296         [Specify path to jarfile manually.]),
2297     LIBFORMULA_JAR=$withval)
2299 AC_ARG_WITH(librepository-jar,
2300     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2301         [Specify path to jarfile manually.]),
2302     LIBREPOSITORY_JAR=$withval)
2304 AC_ARG_WITH(libfonts-jar,
2305     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2306         [Specify path to jarfile manually.]),
2307     LIBFONTS_JAR=$withval)
2309 AC_ARG_WITH(libserializer-jar,
2310     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2311         [Specify path to jarfile manually.]),
2312     LIBSERIALIZER_JAR=$withval)
2314 AC_ARG_WITH(libbase-jar,
2315     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2316         [Specify path to jarfile manually.]),
2317     LIBBASE_JAR=$withval)
2319 AC_ARG_WITH(system-odbc,
2320     AS_HELP_STRING([--with-system-odbc],
2321         [Use the odbc headers already on system.]),,
2322     [with_system_odbc="auto"])
2324 AC_ARG_WITH(system-sane,
2325     AS_HELP_STRING([--with-system-sane],
2326         [Use sane.h already on system.]),,
2327     [with_system_sane="$with_system_headers"])
2329 AC_ARG_WITH(system-bluez,
2330     AS_HELP_STRING([--with-system-bluez],
2331         [Use bluetooth.h already on system.]),,
2332     [with_system_bluez="$with_system_headers"])
2334 AC_ARG_WITH(system-curl,
2335     AS_HELP_STRING([--with-system-curl],
2336         [Use curl already on system.]),,
2337     [with_system_curl=auto])
2339 AC_ARG_WITH(system-boost,
2340     AS_HELP_STRING([--with-system-boost],
2341         [Use boost already on system.]),,
2342     [with_system_boost="$with_system_headers"])
2344 AC_ARG_WITH(system-cuckoo,
2345     AS_HELP_STRING([--with-system-cuckoo],
2346         [Use libcuckoo already on system.]),,
2347     [with_system_cuckoo="$with_system_headers"])
2349 AC_ARG_WITH(system-glm,
2350     AS_HELP_STRING([--with-system-glm],
2351         [Use glm already on system.]),,
2352     [with_system_glm="$with_system_headers"])
2354 AC_ARG_WITH(system-hunspell,
2355     AS_HELP_STRING([--with-system-hunspell],
2356         [Use libhunspell already on system.]),,
2357     [with_system_hunspell="$with_system_libs"])
2359 libo_FUZZ_ARG_ENABLE(zxing,
2360     AS_HELP_STRING([--disable-zxing],
2361        [Disable use of zxing external library.]))
2363 AC_ARG_WITH(system-zxing,
2364     AS_HELP_STRING([--with-system-zxing],
2365         [Use libzxing already on system.]),,
2366     [with_system_zxing="$with_system_libs"])
2368 AC_ARG_WITH(system-box2d,
2369     AS_HELP_STRING([--with-system-box2d],
2370         [Use box2d already on system.]),,
2371     [with_system_box2d="$with_system_libs"])
2373 AC_ARG_WITH(system-mythes,
2374     AS_HELP_STRING([--with-system-mythes],
2375         [Use mythes already on system.]),,
2376     [with_system_mythes="$with_system_libs"])
2378 AC_ARG_WITH(system-altlinuxhyph,
2379     AS_HELP_STRING([--with-system-altlinuxhyph],
2380         [Use ALTLinuxhyph already on system.]),,
2381     [with_system_altlinuxhyph="$with_system_libs"])
2383 AC_ARG_WITH(system-lpsolve,
2384     AS_HELP_STRING([--with-system-lpsolve],
2385         [Use lpsolve already on system.]),,
2386     [with_system_lpsolve="$with_system_libs"])
2388 AC_ARG_WITH(system-coinmp,
2389     AS_HELP_STRING([--with-system-coinmp],
2390         [Use CoinMP already on system.]),,
2391     [with_system_coinmp="$with_system_libs"])
2393 AC_ARG_WITH(system-liblangtag,
2394     AS_HELP_STRING([--with-system-liblangtag],
2395         [Use liblangtag library already on system.]),,
2396     [with_system_liblangtag="$with_system_libs"])
2398 AC_ARG_WITH(webdav,
2399     AS_HELP_STRING([--with-webdav],
2400         [Specify which library to use for webdav implementation.
2401          Possible values: "neon", "serf", "no". The default value is "neon".
2402          Example: --with-webdav="serf"]))
2404 AC_ARG_WITH(linker-hash-style,
2405     AS_HELP_STRING([--with-linker-hash-style],
2406         [Use linker with --hash-style=<style> when linking shared objects.
2407          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2408          if supported on the build system, and "sysv" otherwise.]))
2410 AC_ARG_WITH(jdk-home,
2411     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2412         [If you have installed JDK 9 or later on your system please supply the
2413          path here. Note that this is not the location of the java command but the
2414          location of the entire distribution. In case of cross-compiling, this
2415          is the JDK of the host os. Use --with-build-platform-configure-options
2416          to point to a different build platform JDK.]),
2419 AC_ARG_WITH(help,
2420     AS_HELP_STRING([--with-help],
2421         [Enable the build of help. There is a special parameter "common" that
2422          can be used to bundle only the common part, .e.g help-specific icons.
2423          This is useful when you build the helpcontent separately.])
2424     [
2425                           Usage:     --with-help    build the old local help
2426                                  --without-help     no local help (default)
2427                                  --with-help=html   build the new HTML local help
2428                                  --with-help=online build the new HTML online help
2429     ],
2432 AC_ARG_WITH(omindex,
2433    AS_HELP_STRING([--with-omindex],
2434         [Enable the support of xapian-omega index for online help.])
2435    [
2436                          Usage: --with-omindex=server prepare the pages for omindex
2437                                 but let xapian-omega be built in server.
2438                                 --with-omindex=noxap do not prepare online pages
2439                                 for xapian-omega
2440   ],
2443 libo_FUZZ_ARG_WITH(java,
2444     AS_HELP_STRING([--with-java=<java command>],
2445         [Specify the name of the Java interpreter command. Typically "java"
2446          which is the default.
2448          To build without support for Java components, applets, accessibility
2449          or the XML filters written in Java, use --without-java or --with-java=no.]),
2450     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2451     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2454 AC_ARG_WITH(jvm-path,
2455     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2456         [Use a specific JVM search path at runtime.
2457          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2460 AC_ARG_WITH(ant-home,
2461     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2462         [If you have installed Apache Ant on your system, please supply the path here.
2463          Note that this is not the location of the Ant binary but the location
2464          of the entire distribution.]),
2467 AC_ARG_WITH(symbol-config,
2468     AS_HELP_STRING([--with-symbol-config],
2469         [Configuration for the crashreport symbol upload]),
2470         [],
2471         [with_symbol_config=no])
2473 AC_ARG_WITH(export-validation,
2474     AS_HELP_STRING([--without-export-validation],
2475         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2476 ,with_export_validation=auto)
2478 AC_ARG_WITH(bffvalidator,
2479     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2480         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2481          Requires installed Microsoft Office Binary File Format Validator.
2482          Note: export-validation (--with-export-validation) is required to be turned on.
2483          See https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2484 ,with_bffvalidator=no)
2486 libo_FUZZ_ARG_WITH(junit,
2487     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2488         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2489          --without-junit disables those tests. Not relevant in the --without-java case.]),
2490 ,with_junit=yes)
2492 AC_ARG_WITH(hamcrest,
2493     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2494         [Specifies the hamcrest jar file to use for JUnit-based tests.
2495          --without-junit disables those tests. Not relevant in the --without-java case.]),
2496 ,with_hamcrest=yes)
2498 AC_ARG_WITH(perl-home,
2499     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2500         [If you have installed Perl 5 Distribution, on your system, please
2501          supply the path here. Note that this is not the location of the Perl
2502          binary but the location of the entire distribution.]),
2505 libo_FUZZ_ARG_WITH(doxygen,
2506     AS_HELP_STRING(
2507         [--with-doxygen=<absolute path to doxygen executable>],
2508         [Specifies the doxygen executable to use when generating ODK C/C++
2509          documentation. --without-doxygen disables generation of ODK C/C++
2510          documentation. Not relevant in the --disable-odk case.]),
2511 ,with_doxygen=yes)
2513 AC_ARG_WITH(visual-studio,
2514     AS_HELP_STRING([--with-visual-studio=<2019>],
2515         [Specify which Visual Studio version to use in case several are
2516          installed. Currently only 2019 (default) is supported.]),
2519 AC_ARG_WITH(windows-sdk,
2520     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2521         [Specify which Windows SDK, or "Windows Kit", version to use
2522          in case the one that came with the selected Visual Studio
2523          is not what you want for some reason. Note that not all compiler/SDK
2524          combinations are supported. The intent is that this option should not
2525          be needed.]),
2528 AC_ARG_WITH(lang,
2529     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2530         [Use this option to build LibreOffice with additional UI language support.
2531          English (US) is always included by default.
2532          Separate multiple languages with space.
2533          For all languages, use --with-lang=ALL.]),
2536 AC_ARG_WITH(locales,
2537     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2538         [Use this option to limit the locale information built in.
2539          Separate multiple locales with space.
2540          Very experimental and might well break stuff.
2541          Just a desperate measure to shrink code and data size.
2542          By default all the locales available is included.
2543          This option is completely unrelated to --with-lang.])
2544     [
2545                           Affects also our character encoding conversion
2546                           tables for encodings mainly targeted for a
2547                           particular locale, like EUC-CN and EUC-TW for
2548                           zh, ISO-2022-JP for ja.
2550                           Affects also our add-on break iterator data for
2551                           some languages.
2553                           For the default, all locales, don't use this switch at all.
2554                           Specifying just the language part of a locale means all matching
2555                           locales will be included.
2556     ],
2559 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2560 libo_FUZZ_ARG_WITH(krb5,
2561     AS_HELP_STRING([--with-krb5],
2562         [Enable MIT Kerberos 5 support in modules that support it.
2563          By default automatically enabled on platforms
2564          where a good system Kerberos 5 is available.]),
2567 libo_FUZZ_ARG_WITH(gssapi,
2568     AS_HELP_STRING([--with-gssapi],
2569         [Enable GSSAPI support in modules that support it.
2570          By default automatically enabled on platforms
2571          where a good system GSSAPI is available.]),
2574 AC_ARG_WITH(iwyu,
2575     AS_HELP_STRING([--with-iwyu],
2576         [Use given IWYU binary path to check unneeded includes instead of building.
2577          Use only if you are hacking on it.]),
2580 libo_FUZZ_ARG_WITH(lxml,
2581     AS_HELP_STRING([--without-lxml],
2582         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2583          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2584          report widget classes and ids.]),
2587 libo_FUZZ_ARG_WITH(latest-c++,
2588     AS_HELP_STRING([--with-latest-c++],
2589         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2590          published standard.]),,
2591         [with_latest_c__=no])
2593 dnl ===================================================================
2594 dnl Branding
2595 dnl ===================================================================
2597 AC_ARG_WITH(branding,
2598     AS_HELP_STRING([--with-branding=/path/to/images],
2599         [Use given path to retrieve branding images set.])
2600     [
2601                           Search for intro.png about.svg and logo.svg.
2602                           If any is missing, default ones will be used instead.
2604                           Search also progress.conf for progress
2605                           settings on intro screen :
2607                           PROGRESSBARCOLOR="255,255,255" Set color of
2608                           progress bar. Comma separated RGB decimal values.
2609                           PROGRESSSIZE="407,6" Set size of progress bar.
2610                           Comma separated decimal values (width, height).
2611                           PROGRESSPOSITION="61,317" Set position of progress
2612                           bar from left,top. Comma separated decimal values.
2613                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2614                           bar frame. Comma separated RGB decimal values.
2615                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2616                           bar text. Comma separated RGB decimal values.
2617                           PROGRESSTEXTBASELINE="287" Set vertical position of
2618                           progress bar text from top. Decimal value.
2620                           Default values will be used if not found.
2621     ],
2625 AC_ARG_WITH(extra-buildid,
2626     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2627         [Show addition build identification in about dialog.]),
2631 AC_ARG_WITH(vendor,
2632     AS_HELP_STRING([--with-vendor="John the Builder"],
2633         [Set vendor of the build.]),
2636 AC_ARG_WITH(privacy-policy-url,
2637     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2638         [The URL to your privacy policy (needed when
2639          enabling online-update or crashreporting via breakpad)]),
2640         [if test "x$with_privacy_policy_url" = "xyes"; then
2641             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2642          elif test "x$with_privacy_policy_url" = "xno"; then
2643             with_privacy_policy_url="undefined"
2644          fi]
2645 ,[with_privacy_policy_url="undefined"])
2647 AC_ARG_WITH(android-package-name,
2648     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2649         [Set Android package name of the build.]),
2652 AC_ARG_WITH(compat-oowrappers,
2653     AS_HELP_STRING([--with-compat-oowrappers],
2654         [Install oo* wrappers in parallel with
2655          lo* ones to keep backward compatibility.
2656          Has effect only with make distro-pack-install]),
2659 AC_ARG_WITH(os-version,
2660     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2661         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2664 AC_ARG_WITH(idlc-cpp,
2665     AS_HELP_STRING([--with-idlc-cpp=<cpp/ucpp>],
2666         [Specify the C Preprocessor to use for idlc. Default is ucpp.]),
2669 AC_ARG_WITH(parallelism,
2670     AS_HELP_STRING([--with-parallelism],
2671         [Number of jobs to run simultaneously during build. Parallel builds can
2672         save a lot of time on multi-cpu machines. Defaults to the number of
2673         CPUs on the machine, unless you configure --enable-icecream - then to
2674         40.]),
2677 AC_ARG_WITH(all-tarballs,
2678     AS_HELP_STRING([--with-all-tarballs],
2679         [Download all external tarballs unconditionally]))
2681 AC_ARG_WITH(gdrive-client-id,
2682     AS_HELP_STRING([--with-gdrive-client-id],
2683         [Provides the client id of the application for OAuth2 authentication
2684         on Google Drive. If either this or --with-gdrive-client-secret is
2685         empty, the feature will be disabled]),
2688 AC_ARG_WITH(gdrive-client-secret,
2689     AS_HELP_STRING([--with-gdrive-client-secret],
2690         [Provides the client secret of the application for OAuth2
2691         authentication on Google Drive. If either this or
2692         --with-gdrive-client-id is empty, the feature will be disabled]),
2695 AC_ARG_WITH(alfresco-cloud-client-id,
2696     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2697         [Provides the client id of the application for OAuth2 authentication
2698         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2699         empty, the feature will be disabled]),
2702 AC_ARG_WITH(alfresco-cloud-client-secret,
2703     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2704         [Provides the client secret of the application for OAuth2
2705         authentication on Alfresco Cloud. If either this or
2706         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2709 AC_ARG_WITH(onedrive-client-id,
2710     AS_HELP_STRING([--with-onedrive-client-id],
2711         [Provides the client id of the application for OAuth2 authentication
2712         on OneDrive. If either this or --with-onedrive-client-secret is
2713         empty, the feature will be disabled]),
2716 AC_ARG_WITH(onedrive-client-secret,
2717     AS_HELP_STRING([--with-onedrive-client-secret],
2718         [Provides the client secret of the application for OAuth2
2719         authentication on OneDrive. If either this or
2720         --with-onedrive-client-id is empty, the feature will be disabled]),
2722 dnl ===================================================================
2723 dnl Do we want to use pre-build binary tarball for recompile
2724 dnl ===================================================================
2726 if test "$enable_library_bin_tar" = "yes" ; then
2727     USE_LIBRARY_BIN_TAR=TRUE
2728 else
2729     USE_LIBRARY_BIN_TAR=
2731 AC_SUBST(USE_LIBRARY_BIN_TAR)
2733 dnl ===================================================================
2734 dnl Test whether build target is Release Build
2735 dnl ===================================================================
2736 AC_MSG_CHECKING([whether build target is Release Build])
2737 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2738     AC_MSG_RESULT([no])
2739     ENABLE_RELEASE_BUILD=
2740     GET_TASK_ALLOW_ENTITLEMENT='
2741         <!-- We want to be able to debug a hardened process when not building for release -->
2742         <key>com.apple.security.get-task-allow</key>
2743         <true/>'
2744 else
2745     AC_MSG_RESULT([yes])
2746     ENABLE_RELEASE_BUILD=TRUE
2747     GET_TASK_ALLOW_ENTITLEMENT=''
2749 AC_SUBST(ENABLE_RELEASE_BUILD)
2750 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2752 AC_MSG_CHECKING([whether to build a Community flavor])
2753 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2754     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2755     AC_MSG_RESULT([yes])
2756 else
2757     AC_MSG_RESULT([no])
2760 dnl ===================================================================
2761 dnl Test whether to sign Windows Build
2762 dnl ===================================================================
2763 AC_MSG_CHECKING([whether to sign windows build])
2764 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2765     AC_MSG_RESULT([yes])
2766     WINDOWS_BUILD_SIGNING="TRUE"
2767 else
2768     AC_MSG_RESULT([no])
2769     WINDOWS_BUILD_SIGNING="FALSE"
2771 AC_SUBST(WINDOWS_BUILD_SIGNING)
2773 dnl ===================================================================
2774 dnl MacOSX build and runtime environment options
2775 dnl ===================================================================
2777 AC_ARG_WITH(macosx-sdk,
2778     AS_HELP_STRING([--with-macosx-sdk=<version>],
2779         [Prefer a specific SDK for building.])
2780     [
2781                           If the requested SDK is not available, a search for the oldest one will be done.
2782                           With current Xcode versions, only the latest SDK is included, so this option is
2783                           not terribly useful. It works fine to build with a new SDK and run the result
2784                           on an older OS.
2786                           e. g.: --with-macosx-sdk=10.10
2788                           there are 3 options to control the MacOSX build:
2789                           --with-macosx-sdk (referred as 'sdk' below)
2790                           --with-macosx-version-min-required (referred as 'min' below)
2791                           --with-macosx-version-max-allowed (referred as 'max' below)
2793                           the connection between these value and the default they take is as follow:
2794                           ( ? means not specified on the command line, s means the SDK version found,
2795                           constraint: 8 <= x <= y <= z)
2797                           ==========================================
2798                            command line      || config result
2799                           ==========================================
2800                           min  | max  | sdk  || min   | max  | sdk  |
2801                           ?    | ?    | ?    || 10.10 | 10.s | 10.s |
2802                           ?    | ?    | 10.x || 10.10 | 10.x | 10.x |
2803                           ?    | 10.x | ?    || 10.10 | 10.s | 10.s |
2804                           ?    | 10.x | 10.y || 10.10 | 10.x | 10.y |
2805                           10.x | ?    | ?    || 10.x  | 10.s | 10.s |
2806                           10.x | ?    | 10.y || 10.x  | 10.y | 10.y |
2807                           10.x | 10.y | ?    || 10.x  | 10.y | 10.y |
2808                           10.x | 10.y | 10.z || 10.x  | 10.y | 10.z |
2811                           see: http://developer.apple.com/library/mac/#technotes/tn2064/_index.html
2812                           for a detailed technical explanation of these variables
2814                           Note: MACOSX_DEPLOYMENT_TARGET will be set to the value of 'min'.
2815     ],
2818 AC_ARG_WITH(macosx-version-min-required,
2819     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2820         [set the minimum OS version needed to run the built LibreOffice])
2821     [
2822                           e. g.: --with-macosx-version-min-required=10.10
2823                           see --with-macosx-sdk for more info
2824     ],
2827 AC_ARG_WITH(macosx-version-max-allowed,
2828     AS_HELP_STRING([--with-macosx-version-max-allowed=<version>],
2829         [set the maximum allowed OS version the LibreOffice compilation can use APIs from])
2830     [
2831                           e. g.: --with-macosx-version-max-allowed=10.10
2832                           see --with-macosx-sdk for more info
2833     ],
2837 dnl ===================================================================
2838 dnl options for stuff used during cross-compilation build
2839 dnl Not quite superseded by --with-build-platform-configure-options.
2840 dnl TODO: check, if the "force" option is still needed anywhere.
2841 dnl ===================================================================
2843 AC_ARG_WITH(system-icu-for-build,
2844     AS_HELP_STRING([--with-system-icu-for-build=yes/no/force],
2845         [Use icu already on system for build tools (cross-compilation only).]))
2848 dnl ===================================================================
2849 dnl Check for incompatible options set by fuzzing, and reset those
2850 dnl automatically to working combinations
2851 dnl ===================================================================
2853 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2854         "$enable_dbus" != "$enable_avahi"; then
2855     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2856     enable_avahi=$enable_dbus
2859 add_lopath_after ()
2861     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
2862         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
2863     fi
2866 add_lopath_before ()
2868     local IFS=${P_SEP}
2869     local path_cleanup
2870     local dir
2871     for dir in $LO_PATH ; do
2872         if test "$dir" != "$1" ; then
2873             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
2874         fi
2875     done
2876     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
2879 dnl ===================================================================
2880 dnl check for required programs (grep, awk, sed, bash)
2881 dnl ===================================================================
2883 pathmunge ()
2885     local new_path
2886     if test -n "$1"; then
2887         if test "$build_os" = "cygwin"; then
2888             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
2889                 PathFormat "$1"
2890                 new_path=`cygpath -sm "$formatted_path"`
2891             else
2892                 PathFormat "$1"
2893                 new_path=`cygpath -u "$formatted_path"`
2894             fi
2895         else
2896             new_path="$1"
2897         fi
2898         if test "$2" = "after"; then
2899             add_lopath_after "$new_path"
2900         else
2901             add_lopath_before "$new_path"
2902         fi
2903     fi
2906 AC_PROG_AWK
2907 AC_PATH_PROG( AWK, $AWK)
2908 if test -z "$AWK"; then
2909     AC_MSG_ERROR([install awk to run this script])
2912 AC_PATH_PROG(BASH, bash)
2913 if test -z "$BASH"; then
2914     AC_MSG_ERROR([bash not found in \$PATH])
2916 AC_SUBST(BASH)
2918 AC_MSG_CHECKING([for GNU or BSD tar])
2919 for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
2920     $a --version 2> /dev/null | egrep "GNU|bsdtar"  2>&1 > /dev/null
2921     if test $? -eq 0;  then
2922         GNUTAR=$a
2923         break
2924     fi
2925 done
2926 AC_MSG_RESULT($GNUTAR)
2927 if test -z "$GNUTAR"; then
2928     AC_MSG_ERROR([not found. install GNU or BSD tar.])
2930 AC_SUBST(GNUTAR)
2932 AC_MSG_CHECKING([for tar's option to strip components])
2933 $GNUTAR --help 2> /dev/null | egrep "bsdtar|strip-components" 2>&1 >/dev/null
2934 if test $? -eq 0; then
2935     STRIP_COMPONENTS="--strip-components"
2936 else
2937     $GNUTAR --help 2> /dev/null | egrep "strip-path" 2>&1 >/dev/null
2938     if test $? -eq 0; then
2939         STRIP_COMPONENTS="--strip-path"
2940     else
2941         STRIP_COMPONENTS="unsupported"
2942     fi
2944 AC_MSG_RESULT($STRIP_COMPONENTS)
2945 if test x$STRIP_COMPONENTS = xunsupported; then
2946     AC_MSG_ERROR([you need a tar that is able to strip components.])
2948 AC_SUBST(STRIP_COMPONENTS)
2950 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
2951 dnl desktop OSes from "mobile" ones.
2953 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
2954 dnl In other words, that when building for an OS that is not a
2955 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
2957 dnl Note the direction of the implication; there is no assumption that
2958 dnl cross-compiling would imply a non-desktop OS.
2960 if test $_os != iOS -a $_os != Android -a $_os != Emscripten -a "$enable_fuzzers" != "yes"; then
2961     BUILD_TYPE="$BUILD_TYPE DESKTOP"
2962     AC_DEFINE(HAVE_FEATURE_DESKTOP)
2963     AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
2966 # Whether to build "avmedia" functionality or not.
2968 if test -z "$enable_avmedia"; then
2969     enable_avmedia=yes
2972 BUILD_TYPE="$BUILD_TYPE AVMEDIA"
2973 if test "$enable_avmedia" = yes; then
2974     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
2975 else
2976     USE_AVMEDIA_DUMMY='TRUE'
2978 AC_SUBST(USE_AVMEDIA_DUMMY)
2980 # Decide whether to build database connectivity stuff (including Base) or not.
2981 if test "$enable_database_connectivity" != no; then
2982     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
2983     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
2984 else
2985     if test "$_os" = iOS; then
2986         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
2987     fi
2988     disable_database_connectivity_dependencies
2991 if test -z "$enable_extensions"; then
2992     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
2993     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
2994         enable_extensions=yes
2995     fi
2998 if test "$enable_extensions" = yes; then
2999     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3000     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3001 else
3002     enable_extension_integration=no
3003     enable_extension_update=no
3006 if test -z "$enable_scripting"; then
3007     # Disable scripting for iOS unless specifically overridden
3008     # with --enable-scripting.
3009     if test $_os != iOS -o $_os = Emscripten; then
3010         enable_scripting=yes
3011     fi
3014 DISABLE_SCRIPTING=''
3015 if test "$enable_scripting" = yes; then
3016     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3017     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3018 else
3019     DISABLE_SCRIPTING='TRUE'
3020     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3023 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3024     # Disable dynamic_loading always for iOS and Android
3025     enable_dynamic_loading=no
3026 elif test -z "$enable_dynamic_loading"; then
3027     # Otherwise enable it unless specifically disabled
3028     enable_dynamic_loading=yes
3031 DISABLE_DYNLOADING=''
3032 if test "$enable_dynamic_loading" = yes; then
3033     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3034 else
3035     DISABLE_DYNLOADING='TRUE'
3037 AC_SUBST(DISABLE_DYNLOADING)
3039 # remember SYSBASE value
3040 AC_SUBST(SYSBASE)
3042 dnl ===================================================================
3043 dnl  Sort out various gallery compilation options
3044 dnl ===================================================================
3045 WITH_GALLERY_BUILD=TRUE
3046 AC_MSG_CHECKING([how to build and package galleries])
3047 if test -n "${with_galleries}"; then
3048     if test "$with_galleries" = "build"; then
3049         if test "$enable_database_connectivity" = no; then
3050             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3051         fi
3052         AC_MSG_RESULT([build from source images internally])
3053     elif test "$with_galleries" = "no"; then
3054         WITH_GALLERY_BUILD=
3055         AC_MSG_RESULT([disable non-internal gallery build])
3056     else
3057         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3058     fi
3059 else
3060     if test $_os != iOS -a $_os != Android; then
3061         AC_MSG_RESULT([internal src images for desktop])
3062     else
3063         WITH_GALLERY_BUILD=
3064         AC_MSG_RESULT([disable src image build])
3065     fi
3067 AC_SUBST(WITH_GALLERY_BUILD)
3069 dnl ===================================================================
3070 dnl  Checks if ccache is available
3071 dnl ===================================================================
3072 CCACHE_DEPEND_MODE=
3073 if test "$enable_ccache" = "no"; then
3074     CCACHE=""
3075 elif test "$_os" = "WINNT"; then
3076     # on windows/VC build do not use ccache - but perhaps sccache is around?
3077     case "%$CC%$CXX%" in
3078     # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3079     # assume that's good then
3080     *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3081         AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3082         CCACHE_DEPEND_MODE=1
3083         ;;
3084     *)
3085         # for sharing code below, reuse CCACHE env var
3086         AC_PATH_PROG([CCACHE],[sccache],[not found])
3087         if test "$CCACHE" = "not found"; then
3088             CCACHE=""
3089         else
3090             CCACHE=`win_short_path_for_make "$CCACHE"`
3091             CCACHE_DEPEND_MODE=1
3092         fi
3093         ;;
3094     esac
3095 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3096     case "%$CC%$CXX%" in
3097     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3098     # assume that's good then
3099     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3100         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3101         CCACHE_DEPEND_MODE=1
3102         ;;
3103     *)
3104         AC_PATH_PROG([CCACHE],[ccache],[not found])
3105         if test "$CCACHE" = "not found"; then
3106             CCACHE=""
3107         else
3108             CCACHE_DEPEND_MODE=1
3109             # Need to check for ccache version: otherwise prevents
3110             # caching of the results (like "-x objective-c++" for Mac)
3111             if test $_os = Darwin -o $_os = iOS; then
3112                 # Check ccache version
3113                 AC_MSG_CHECKING([whether version of ccache is suitable])
3114                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3115                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3116                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3117                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3118                 else
3119                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3120                     CCACHE=""
3121                     CCACHE_DEPEND_MODE=
3122                 fi
3123             fi
3124         fi
3125         ;;
3126     esac
3127 else
3128     CCACHE=""
3130 if test "$enable_ccache" = "nodepend"; then
3131     CCACHE_DEPEND_MODE=""
3133 AC_SUBST(CCACHE_DEPEND_MODE)
3135 # skip on windows - sccache defaults are good enough
3136 if test "$CCACHE" != "" -a "$_os" != "WINNT"; then
3137     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3138     # -p works with both 4.2 and 4.4
3139     ccache_size_msg=$([ccache -p | $AWK /max_size/'{ print $4 }' | sed -e 's/\.[0-9]*//'])
3140     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3141     if test "$ccache_size" = ""; then
3142         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3143         if test "$ccache_size" = ""; then
3144             ccache_size=0
3145         fi
3146         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3147         if test $ccache_size -lt 1024; then
3148             CCACHE=""
3149             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3150             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3151         else
3152             # warn that ccache may be too small for debug build
3153             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3154             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3155         fi
3156     else
3157         if test $ccache_size -lt 5; then
3158             #warn that ccache may be too small for debug build
3159             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3160             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3161         fi
3162     fi
3165 dnl ===================================================================
3166 dnl  Checks for C compiler,
3167 dnl  The check for the C++ compiler is later on.
3168 dnl ===================================================================
3169 if test "$_os" != "WINNT"; then
3170     GCC_HOME_SET="true"
3171     AC_MSG_CHECKING([gcc home])
3172     if test -z "$with_gcc_home"; then
3173         if test "$enable_icecream" = "yes"; then
3174             if test -d "/usr/lib/icecc/bin"; then
3175                 GCC_HOME="/usr/lib/icecc/"
3176             elif test -d "/usr/libexec/icecc/bin"; then
3177                 GCC_HOME="/usr/libexec/icecc/"
3178             elif test -d "/opt/icecream/bin"; then
3179                 GCC_HOME="/opt/icecream/"
3180             else
3181                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3183             fi
3184         else
3185             GCC_HOME=`which gcc | $SED -e s,/bin/gcc,,`
3186             GCC_HOME_SET="false"
3187         fi
3188     else
3189         GCC_HOME="$with_gcc_home"
3190     fi
3191     AC_MSG_RESULT($GCC_HOME)
3192     AC_SUBST(GCC_HOME)
3194     if test "$GCC_HOME_SET" = "true"; then
3195         if test -z "$CC"; then
3196             CC="$GCC_HOME/bin/gcc"
3197             CC_BASE="gcc"
3198         fi
3199         if test -z "$CXX"; then
3200             CXX="$GCC_HOME/bin/g++"
3201             CXX_BASE="g++"
3202         fi
3203     fi
3206 COMPATH=`dirname "$CC"`
3207 if test "$COMPATH" = "."; then
3208     AC_PATH_PROGS(COMPATH, $CC)
3209     dnl double square bracket to get single because of M4 quote...
3210     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3212 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3214 dnl ===================================================================
3215 dnl Java support
3216 dnl ===================================================================
3217 AC_MSG_CHECKING([whether to build with Java support])
3218 if test "$with_java" != "no"; then
3219     if test "$DISABLE_SCRIPTING" = TRUE; then
3220         AC_MSG_RESULT([no, overridden by --disable-scripting])
3221         ENABLE_JAVA=""
3222         with_java=no
3223     else
3224         AC_MSG_RESULT([yes])
3225         ENABLE_JAVA="TRUE"
3226         AC_DEFINE(HAVE_FEATURE_JAVA)
3227     fi
3228 else
3229     AC_MSG_RESULT([no])
3230     ENABLE_JAVA=""
3233 AC_SUBST(ENABLE_JAVA)
3235 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3237 dnl ENABLE_JAVA="" indicate no Java support at all
3239 dnl ===================================================================
3240 dnl Check macOS SDK and compiler
3241 dnl ===================================================================
3243 if test $_os = Darwin; then
3245     # If no --with-macosx-sdk option is given, look for one
3247     # The intent is that for "most" Mac-based developers, a suitable
3248     # SDK will be found automatically without any configure options.
3250     # For developers with a current Xcode, the lowest-numbered SDK
3251     # higher than or equal to the minimum required should be found.
3253     AC_MSG_CHECKING([what macOS SDK to use])
3254     for _macosx_sdk in ${with_macosx_sdk-11.3 11.1 11.0 10.15 10.14 10.13}; do
3255         MACOSX_SDK_PATH=`xcrun --sdk macosx${_macosx_sdk} --show-sdk-path 2> /dev/null`
3256         if test -d "$MACOSX_SDK_PATH"; then
3257             with_macosx_sdk="${_macosx_sdk}"
3258             break
3259         else
3260             MACOSX_SDK_PATH="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${_macosx_sdk}.sdk"
3261             if test -d "$MACOSX_SDK_PATH"; then
3262                 with_macosx_sdk="${_macosx_sdk}"
3263                 break
3264             fi
3265         fi
3266     done
3267     if test ! -d "$MACOSX_SDK_PATH"; then
3268         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3269     fi
3271     AC_MSG_RESULT([SDK $with_macosx_sdk at $MACOSX_SDK_PATH])
3273     case $with_macosx_sdk in
3274     10.13)
3275         MACOSX_SDK_VERSION=101300
3276         ;;
3277     10.14)
3278         MACOSX_SDK_VERSION=101400
3279         ;;
3280     10.15)
3281         MACOSX_SDK_VERSION=101500
3282         ;;
3283     11.0)
3284         MACOSX_SDK_VERSION=110000
3285         ;;
3286     11.1)
3287         MACOSX_SDK_VERSION=110100
3288         ;;
3289     11.3)
3290         MACOSX_SDK_VERSION=110300
3291         ;;
3292     *)
3293         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value, supported values are 10.13--11.3])
3294         ;;
3295     esac
3297     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3298         AC_MSG_ERROR([with-macosx-sdk $with_macosx_sdk is not a supported value for Apple Silicon])
3299     fi
3301     if test "$with_macosx_version_min_required" = "" ; then
3302         if test "$host_cpu" = x86_64; then
3303             with_macosx_version_min_required="10.10";
3304         else
3305             with_macosx_version_min_required="11.0";
3306         fi
3307     fi
3309     if test "$with_macosx_version_max_allowed" = "" ; then
3310         with_macosx_version_max_allowed="$with_macosx_sdk"
3311     fi
3313     # export this so that "xcrun" invocations later return matching values
3314     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3315     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3316     export DEVELOPER_DIR
3317     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3318     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3320     AC_MSG_CHECKING([whether Xcode is new enough])
3321     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3322     my_xcode_ver2=${my_xcode_ver1#Xcode }
3323     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3324     if test "$my_xcode_ver3" -ge 1103; then
3325         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3326     else
3327         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 11.3])
3328     fi
3330     case "$with_macosx_version_min_required" in
3331     10.10)
3332         MAC_OS_X_VERSION_MIN_REQUIRED="101000"
3333         ;;
3334     10.11)
3335         MAC_OS_X_VERSION_MIN_REQUIRED="101100"
3336         ;;
3337     10.12)
3338         MAC_OS_X_VERSION_MIN_REQUIRED="101200"
3339         ;;
3340     10.13)
3341         MAC_OS_X_VERSION_MIN_REQUIRED="101300"
3342         ;;
3343     10.14)
3344         MAC_OS_X_VERSION_MIN_REQUIRED="101400"
3345         ;;
3346     10.15)
3347         MAC_OS_X_VERSION_MIN_REQUIRED="101500"
3348         ;;
3349     10.16)
3350         MAC_OS_X_VERSION_MIN_REQUIRED="101600"
3351         ;;
3352     11.0)
3353         MAC_OS_X_VERSION_MIN_REQUIRED="110000"
3354         ;;
3355     11.1)
3356         MAC_OS_X_VERSION_MIN_REQUIRED="110100"
3357         ;;
3358     11.3)
3359         MAC_OS_X_VERSION_MIN_REQUIRED="110300"
3360         ;;
3361     *)
3362         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])
3363         ;;
3364     esac
3366     LIBTOOL=/usr/bin/libtool
3367     INSTALL_NAME_TOOL=install_name_tool
3368     if test -z "$save_CC"; then
3369         stdlib=-stdlib=libc++
3371         AC_MSG_CHECKING([what C compiler to use])
3372         CC="`xcrun -find clang`"
3373         CC_BASE=`first_arg_basename "$CC"`
3374         if test "$host_cpu" = x86_64; then
3375             CC+=" -target x86_64-apple-macos"
3376         else
3377             CC+=" -target arm64-apple-macos"
3378         fi
3379         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3380         AC_MSG_RESULT([$CC])
3382         AC_MSG_CHECKING([what C++ compiler to use])
3383         CXX="`xcrun -find clang++`"
3384         CXX_BASE=`first_arg_basename "$CXX"`
3385         if test "$host_cpu" = x86_64; then
3386             CXX+=" -target x86_64-apple-macos"
3387         else
3388             CXX+=" -target arm64-apple-macos"
3389         fi
3390         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3391         AC_MSG_RESULT([$CXX])
3393         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3394         AR=`xcrun -find ar`
3395         NM=`xcrun -find nm`
3396         STRIP=`xcrun -find strip`
3397         LIBTOOL=`xcrun -find libtool`
3398         RANLIB=`xcrun -find ranlib`
3399     fi
3401     case "$with_macosx_version_max_allowed" in
3402     10.10)
3403         MAC_OS_X_VERSION_MAX_ALLOWED="101000"
3404         ;;
3405     10.11)
3406         MAC_OS_X_VERSION_MAX_ALLOWED="101100"
3407         ;;
3408     10.12)
3409         MAC_OS_X_VERSION_MAX_ALLOWED="101200"
3410         ;;
3411     10.13)
3412         MAC_OS_X_VERSION_MAX_ALLOWED="101300"
3413         ;;
3414     10.14)
3415         MAC_OS_X_VERSION_MAX_ALLOWED="101400"
3416         ;;
3417     10.15)
3418         MAC_OS_X_VERSION_MAX_ALLOWED="101500"
3419         ;;
3420     11.0)
3421         MAC_OS_X_VERSION_MAX_ALLOWED="110000"
3422         ;;
3423     11.1)
3424         MAC_OS_X_VERSION_MAX_ALLOWED="110100"
3425         ;;
3426     11.3)
3427         MAC_OS_X_VERSION_MAX_ALLOWED="110300"
3428         ;;
3429     *)
3430         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])
3431         ;;
3432     esac
3434     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macosx-version-max-allowed])
3435     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MAC_OS_X_VERSION_MAX_ALLOWED; then
3436         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])
3437     else
3438         AC_MSG_RESULT([ok])
3439     fi
3441     AC_MSG_CHECKING([that macosx-version-max-allowed is coherent with macos-with-sdk])
3442     if test $MAC_OS_X_VERSION_MAX_ALLOWED -gt $MACOSX_SDK_VERSION; then
3443         AC_MSG_ERROR([the version maximum allowed cannot be greater than the sdk level])
3444     else
3445         AC_MSG_RESULT([ok])
3446     fi
3447     AC_MSG_NOTICE([MAC_OS_X_VERSION_MIN_REQUIRED=$MAC_OS_X_VERSION_MIN_REQUIRED])
3448     AC_MSG_NOTICE([MAC_OS_X_VERSION_MAX_ALLOWED=$MAC_OS_X_VERSION_MAX_ALLOWED])
3450     AC_MSG_CHECKING([whether to do code signing])
3452     if test "$enable_macosx_code_signing" = yes; then
3453         # By default use the first suitable certificate (?).
3455         # http://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3456         # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3457         # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3458         # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3459         # "Developer ID Application" one.
3461         identity=`security find-identity -p codesigning -v 2>/dev/null | grep 'Developer ID Application:' | $AWK '{print $2}' |head -1`
3462         if test -n "$identity"; then
3463             MACOSX_CODESIGNING_IDENTITY=$identity
3464             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3465             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3466         else
3467             AC_MSG_ERROR([cannot determine identity to use])
3468         fi
3469     elif test -n "$enable_macosx_code_signing" -a "$enable_macosx_code_signing" != no ; then
3470         MACOSX_CODESIGNING_IDENTITY=$enable_macosx_code_signing
3471         pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3472         AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3473     else
3474         AC_MSG_RESULT([no])
3475     fi
3477     AC_MSG_CHECKING([whether to create a Mac App Store package])
3479     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3480         AC_MSG_RESULT([no])
3481     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3482         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3483     elif test "$enable_macosx_package_signing" = yes; then
3484         # By default use the first suitable certificate.
3485         # It should be a "3rd Party Mac Developer Installer" one
3487         identity=`security find-identity -v 2>/dev/null | grep '3rd Party Mac Developer Installer:' | awk '{print $2}' |head -1`
3488         if test -n "$identity"; then
3489             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3490             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3491             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3492         else
3493             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3494         fi
3495     else
3496         MACOSX_PACKAGE_SIGNING_IDENTITY=$enable_macosx_package_signing
3497         pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3498         AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3499     fi
3501     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3502         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3503     fi
3505     AC_MSG_CHECKING([whether to sandbox the application])
3507     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3508         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3509     elif test "$enable_macosx_sandbox" = yes; then
3510         ENABLE_MACOSX_SANDBOX=TRUE
3511         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3512         AC_MSG_RESULT([yes])
3513     else
3514         AC_MSG_RESULT([no])
3515     fi
3517     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3518     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3519     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3521 AC_SUBST(MACOSX_SDK_PATH)
3522 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3523 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3524 AC_SUBST(MAC_OS_X_VERSION_MAX_ALLOWED)
3525 AC_SUBST(INSTALL_NAME_TOOL)
3526 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3527 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3528 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3529 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3530 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3532 dnl ===================================================================
3533 dnl Check iOS SDK and compiler
3534 dnl ===================================================================
3536 if test $_os = iOS; then
3537     AC_MSG_CHECKING([what iOS SDK to use])
3538     current_sdk_ver=15.0
3539     older_sdk_vers="14.5"
3540     if test "$enable_ios_simulator" = "yes"; then
3541         platform=iPhoneSimulator
3542         versionmin=-mios-simulator-version-min=13.6
3543     else
3544         platform=iPhoneOS
3545         versionmin=-miphoneos-version-min=13.6
3546     fi
3547     xcode_developer=`xcode-select -print-path`
3549     for sdkver in $current_sdk_ver $older_sdk_vers; do
3550         t=$xcode_developer/Platforms/$platform.platform/Developer/SDKs/$platform$sdkver.sdk
3551         if test -d $t; then
3552             sysroot=$t
3553             break
3554         fi
3555     done
3557     if test -z "$sysroot"; then
3558         AC_MSG_ERROR([Could not find iOS SDK, expected something like $xcode_developer/Platforms/$platform.platform/Developer/SDKs/${platform}${current_sdk_ver}.sdk])
3559     fi
3561     AC_MSG_RESULT($sysroot)
3563     stdlib="-stdlib=libc++"
3565     AC_MSG_CHECKING([what C compiler to use])
3566     CC="`xcrun -find clang`"
3567     CC_BASE=`first_arg_basename "$CC"`
3568     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3569     AC_MSG_RESULT([$CC])
3571     AC_MSG_CHECKING([what C++ compiler to use])
3572     CXX="`xcrun -find clang++`"
3573     CXX_BASE=`first_arg_basename "$CXX"`
3574     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3575     AC_MSG_RESULT([$CXX])
3577     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3578     AR=`xcrun -find ar`
3579     NM=`xcrun -find nm`
3580     STRIP=`xcrun -find strip`
3581     LIBTOOL=`xcrun -find libtool`
3582     RANLIB=`xcrun -find ranlib`
3585 AC_MSG_CHECKING([whether to treat the installation as read-only])
3587 if test $_os = Darwin; then
3588     enable_readonly_installset=yes
3589 elif test "$enable_extensions" != yes; then
3590     enable_readonly_installset=yes
3592 if test "$enable_readonly_installset" = yes; then
3593     AC_MSG_RESULT([yes])
3594     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3595 else
3596     AC_MSG_RESULT([no])
3599 dnl ===================================================================
3600 dnl Structure of install set
3601 dnl ===================================================================
3603 if test $_os = Darwin; then
3604     LIBO_BIN_FOLDER=MacOS
3605     LIBO_ETC_FOLDER=Resources
3606     LIBO_LIBEXEC_FOLDER=MacOS
3607     LIBO_LIB_FOLDER=Frameworks
3608     LIBO_LIB_PYUNO_FOLDER=Resources
3609     LIBO_SHARE_FOLDER=Resources
3610     LIBO_SHARE_HELP_FOLDER=Resources/help
3611     LIBO_SHARE_JAVA_FOLDER=Resources/java
3612     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3613     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3614     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3615     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3616     LIBO_URE_BIN_FOLDER=MacOS
3617     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3618     LIBO_URE_LIB_FOLDER=Frameworks
3619     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3620     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3621 elif test $_os = WINNT; then
3622     LIBO_BIN_FOLDER=program
3623     LIBO_ETC_FOLDER=program
3624     LIBO_LIBEXEC_FOLDER=program
3625     LIBO_LIB_FOLDER=program
3626     LIBO_LIB_PYUNO_FOLDER=program
3627     LIBO_SHARE_FOLDER=share
3628     LIBO_SHARE_HELP_FOLDER=help
3629     LIBO_SHARE_JAVA_FOLDER=program/classes
3630     LIBO_SHARE_PRESETS_FOLDER=presets
3631     LIBO_SHARE_READMES_FOLDER=readmes
3632     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3633     LIBO_SHARE_SHELL_FOLDER=program/shell
3634     LIBO_URE_BIN_FOLDER=program
3635     LIBO_URE_ETC_FOLDER=program
3636     LIBO_URE_LIB_FOLDER=program
3637     LIBO_URE_MISC_FOLDER=program
3638     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3639 else
3640     LIBO_BIN_FOLDER=program
3641     LIBO_ETC_FOLDER=program
3642     LIBO_LIBEXEC_FOLDER=program
3643     LIBO_LIB_FOLDER=program
3644     LIBO_LIB_PYUNO_FOLDER=program
3645     LIBO_SHARE_FOLDER=share
3646     LIBO_SHARE_HELP_FOLDER=help
3647     LIBO_SHARE_JAVA_FOLDER=program/classes
3648     LIBO_SHARE_PRESETS_FOLDER=presets
3649     LIBO_SHARE_READMES_FOLDER=readmes
3650     if test "$enable_fuzzers" != yes; then
3651         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3652     else
3653         LIBO_SHARE_RESOURCE_FOLDER=resource
3654     fi
3655     LIBO_SHARE_SHELL_FOLDER=program/shell
3656     LIBO_URE_BIN_FOLDER=program
3657     LIBO_URE_ETC_FOLDER=program
3658     LIBO_URE_LIB_FOLDER=program
3659     LIBO_URE_MISC_FOLDER=program
3660     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3662 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3663 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3664 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3665 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3666 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3667 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3668 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3669 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3670 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3671 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3672 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3673 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3674 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3675 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3676 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3677 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3679 # Not all of them needed in config_host.mk, add more if need arises
3680 AC_SUBST(LIBO_BIN_FOLDER)
3681 AC_SUBST(LIBO_ETC_FOLDER)
3682 AC_SUBST(LIBO_LIB_FOLDER)
3683 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3684 AC_SUBST(LIBO_SHARE_FOLDER)
3685 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3686 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3687 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3688 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3689 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3690 AC_SUBST(LIBO_URE_BIN_FOLDER)
3691 AC_SUBST(LIBO_URE_ETC_FOLDER)
3692 AC_SUBST(LIBO_URE_LIB_FOLDER)
3693 AC_SUBST(LIBO_URE_MISC_FOLDER)
3694 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3696 dnl ===================================================================
3697 dnl Windows specific tests and stuff
3698 dnl ===================================================================
3700 reg_get_value()
3702     # Return value: $regvalue
3703     unset regvalue
3705     if test "$build_os" = "wsl"; then
3706         regvalue=$($BUILDDIR/solenv/wsl/wsl-lo-helper.exe --read-registry $1 "$2" 2>/dev/null)
3707         return
3708     fi
3710     local _regentry="/proc/registry${1}/${2}"
3711     if test -f "$_regentry"; then
3712         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3713         # Registry keys read via /proc/registry* are always \0 terminated!
3714         local _regvalue=$(tr -d '\0' < "$_regentry")
3715         if test $? -eq 0; then
3716             regvalue=$_regvalue
3717         fi
3718     fi
3721 # Get a value from the 32-bit side of the Registry
3722 reg_get_value_32()
3724     reg_get_value "32" "$1"
3727 # Get a value from the 64-bit side of the Registry
3728 reg_get_value_64()
3730     reg_get_value "64" "$1"
3733 case "$host_os" in
3734 cygwin*|wsl*)
3735     COM=MSC
3736     OS=WNT
3737     RTL_OS=Windows
3738     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3739         P_SEP=";"
3740     else
3741         P_SEP=:
3742     fi
3743     case "$host_cpu" in
3744     x86_64)
3745         CPUNAME=X86_64
3746         RTL_ARCH=X86_64
3747         PLATFORMID=windows_x86_64
3748         WINDOWS_X64=1
3749         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
3750         WIN_HOST_ARCH="x64"
3751         WIN_MULTI_ARCH="x86"
3752         WIN_HOST_BITS=64
3753         ;;
3754     i*86)
3755         CPUNAME=INTEL
3756         RTL_ARCH=x86
3757         PLATFORMID=windows_x86
3758         WIN_HOST_ARCH="x86"
3759         WIN_HOST_BITS=32
3760         WIN_OTHER_ARCH="x64"
3761         ;;
3762     aarch64)
3763         CPUNAME=AARCH64
3764         RTL_ARCH=AARCH64
3765         PLATFORMID=windows_aarch64
3766         WINDOWS_X64=1
3767         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
3768         WIN_HOST_ARCH="arm64"
3769         WIN_HOST_BITS=64
3770         with_ucrt_dir=no
3771         ;;
3772     *)
3773         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
3774         ;;
3775     esac
3777     case "$build_cpu" in
3778     x86_64) WIN_BUILD_ARCH="x64" ;;
3779     i*86) WIN_BUILD_ARCH="x86" ;;
3780     aarch64) WIN_BUILD_ARCH="arm64" ;;
3781     *)
3782         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
3783         ;;
3784     esac
3786     SCPDEFS="$SCPDEFS -D_MSC_VER"
3787     ;;
3788 esac
3790 # multi-arch is an arch, which can execute on the host (x86 on x64), while
3791 # other-arch won't, but wouldn't break the build (x64 on x86).
3792 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
3793     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
3797 if test "$_os" = "iOS" -o "$build_cpu" != "$host_cpu"; then
3798     # To allow building Windows multi-arch releases without cross-tooling
3799     if test -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH"; then
3800         cross_compiling="yes"
3801     fi
3804 ENABLE_WASM_STRIP=''
3805 if test "$cross_compiling" = "yes"; then
3806     export CROSS_COMPILING=TRUE
3807     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
3808         ENABLE_WASM_STRIP=TRUE
3809     fi
3810 else
3811     CROSS_COMPILING=
3812     BUILD_TYPE="$BUILD_TYPE NATIVE"
3814 AC_SUBST(CROSS_COMPILING)
3815 AC_SUBST(ENABLE_WASM_STRIP)
3817 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
3818 # NOTE: must _not_ be used for bundled external libraries!
3819 ISYSTEM=
3820 if test "$GCC" = "yes"; then
3821     AC_MSG_CHECKING( for -isystem )
3822     save_CFLAGS=$CFLAGS
3823     CFLAGS="$CFLAGS -Werror"
3824     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
3825     CFLAGS=$save_CFLAGS
3826     if test -n "$ISYSTEM"; then
3827         AC_MSG_RESULT(yes)
3828     else
3829         AC_MSG_RESULT(no)
3830     fi
3832 if test -z "$ISYSTEM"; then
3833     # fall back to using -I
3834     ISYSTEM=-I
3836 AC_SUBST(ISYSTEM)
3838 dnl ===================================================================
3839 dnl  Check which Visual Studio compiler is used
3840 dnl ===================================================================
3842 map_vs_year_to_version()
3844     # Return value: $vsversion
3846     unset vsversion
3848     case $1 in
3849     2019)
3850         vsversion=16;;
3851     2022)
3852         vsversion=17;;
3853     *)
3854         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
3855     esac
3858 vs_versions_to_check()
3860     # Args: $1 (optional) : versions to check, in the order of preference
3861     # Return value: $vsversions
3863     unset vsversions
3865     if test -n "$1"; then
3866         map_vs_year_to_version "$1"
3867         vsversions=$vsversion
3868     else
3869         # We accept only 2019
3870         vsversions="16"
3871     fi
3874 win_get_env_from_vsvars32bat()
3876     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
3877     # Also seems to be located in another directory under the same name: vsvars32.bat
3878     # https://github.com/bazelbuild/bazel/blob/master/src/main/native/build_windows_jni.sh#L56-L57
3879     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$(cygpath -w $VC_PRODUCT_DIR)" > $WRAPPERBATCHFILEPATH
3880     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
3881     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
3882     local result
3883     if test "$build_os" = "wsl"; then
3884         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
3885     else
3886         chmod +x $WRAPPERBATCHFILEPATH
3887         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
3888     fi
3889     rm -f $WRAPPERBATCHFILEPATH
3890     printf '%s' "$result"
3893 find_ucrt()
3895     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/InstallationFolder"
3896     if test -n "$regvalue"; then
3897         PathFormat "$regvalue"
3898         UCRTSDKDIR=$formatted_path_unix
3899         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0/ProductVersion"
3900         UCRTVERSION=$regvalue
3901         # Rest if not exist
3902         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
3903           UCRTSDKDIR=
3904         fi
3905     fi
3906     if test -z "$UCRTSDKDIR"; then
3907         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
3908         ide_env_file="${ide_env_dir}VsDevCmd.bat"
3909         if test -f "$ide_env_file"; then
3910             PathFormat "$(win_get_env_from_vsvars32bat UniversalCRTSdkDir)"
3911             UCRTSDKDIR=$formatted_path
3912             UCRTVERSION=$(win_get_env_from_vsvars32bat UCRTVersion)
3913             dnl Hack needed at least by tml:
3914             if test "$UCRTVERSION" = 10.0.15063.0 \
3915                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
3916                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
3917             then
3918                 UCRTVERSION=10.0.14393.0
3919             fi
3920         else
3921           AC_MSG_ERROR([No UCRT found])
3922         fi
3923     fi
3926 find_msvc()
3928     # Find Visual C++ 2019
3929     # Args: $1 (optional) : The VS version year
3930     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
3932     unset vctest vctoolset vcnumwithdot vcbuildnumber
3934     vs_versions_to_check "$1"
3935     if test "$build_os" = wsl; then
3936         vswhere="$PROGRAMFILESX86"
3937     else
3938         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
3939     fi
3940     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
3941     PathFormat "$vswhere"
3942     vswhere=$formatted_path_unix
3943     for ver in $vsversions; do
3944         vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3945         # Fall back to all MS products (this includes VC++ Build Tools)
3946         if ! test -n "$vswhereoutput"; then
3947             AC_MSG_CHECKING([VC++ Build Tools and similar])
3948             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr $ver + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
3949         fi
3950         if test -n "$vswhereoutput"; then
3951             PathFormat "$vswhereoutput"
3952             vctest=$formatted_path_unix
3953             break
3954         fi
3955     done
3957     if test -n "$vctest"; then
3958         vcnumwithdot="$ver.0"
3959         case "$vcnumwithdot" in
3960         16.0)
3961             vcyear=2019
3962             vctoolset=v142
3963             ;;
3964         17.0)
3965             vcyear=2022
3966             vctoolset=v143
3967             ;;
3968         esac
3969         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
3971     fi
3974 test_cl_exe()
3976     AC_MSG_CHECKING([$1 compiler])
3978     CL_EXE_PATH="$2/cl.exe"
3980     if test ! -f "$CL_EXE_PATH"; then
3981         if test "$1" = "multi-arch"; then
3982             AC_MSG_WARN([no compiler (cl.exe) in $2])
3983             return 1
3984         else
3985             AC_MSG_ERROR([no compiler (cl.exe) in $2])
3986         fi
3987     fi
3989     dnl ===========================================================
3990     dnl  Check for the corresponding mspdb*.dll
3991     dnl ===========================================================
3993     # MSVC 15.0 has libraries from 14.0?
3994     mspdbnum="140"
3996     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
3997         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
3998     fi
4000     # The compiles has to find its shared libraries
4001     OLD_PATH="$PATH"
4002     TEMP_PATH=`cygpath -d "$2"`
4003     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4005     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4006         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4007     fi
4009     PATH="$OLD_PATH"
4011     AC_MSG_RESULT([$CL_EXE_PATH])
4014 SOLARINC=
4015 MSBUILD_PATH=
4016 DEVENV=
4017 if test "$_os" = "WINNT"; then
4018     AC_MSG_CHECKING([Visual C++])
4019     find_msvc "$with_visual_studio"
4020     if test -z "$vctest"; then
4021         if test -n "$with_visual_studio"; then
4022             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4023         else
4024             AC_MSG_ERROR([no Visual Studio 2019 installation found])
4025         fi
4026     fi
4027     AC_MSG_RESULT([])
4029     VC_PRODUCT_DIR="$vctest/VC"
4030     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4032     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4033     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4034         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4035         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4036         if test $? -ne 0; then
4037             WIN_MULTI_ARCH=""
4038             WIN_OTHER_ARCH=""
4039         fi
4040     fi
4042     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4043         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4044         test_cl_exe "build" "$MSVC_BUILD_PATH"
4045     fi
4047     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4048         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4049         test_cl_exe "host" "$MSVC_HOST_PATH"
4050     else
4051         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4052     fi
4054     AC_MSG_CHECKING([for short pathname of VC product directory])
4055     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4056     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4058     UCRTSDKDIR=
4059     UCRTVERSION=
4061     AC_MSG_CHECKING([for UCRT location])
4062     find_ucrt
4063     # find_ucrt errors out if it doesn't find it
4064     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4065     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4066     ucrtincpath_formatted=$formatted_path
4067     # SOLARINC is used for external modules and must be set too.
4068     # And no, it's not sufficient to set SOLARINC only, as configure
4069     # itself doesn't honour it.
4070     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4071     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4072     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4073     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4075     AC_SUBST(UCRTSDKDIR)
4076     AC_SUBST(UCRTVERSION)
4078     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4079     # Find the proper version of MSBuild.exe to use based on the VS version
4080     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot/MSBuildOverrideTasksPath
4081     if test -z "$regvalue" ; then
4082         if test "$WIN_BUILD_ARCH" != "x64"; then
4083             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4084         else
4085             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4086         fi
4087     fi
4088     if test -d "$regvalue" ; then
4089         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4090         AC_MSG_RESULT([$regvalue])
4091     else
4092         AC_MSG_ERROR([MSBuild.exe location not found])
4093     fi
4095     # Find the version of devenv.exe
4096     # MSVC 2017 devenv does not start properly from a DOS 8.3 path
4097     DEVENV=$(cygpath -lm "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe")
4098     DEVENV_unix=$(cygpath -u "$DEVENV")
4099     if test ! -e "$DEVENV_unix"; then
4100         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4101     fi
4103     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4104     dnl needed when building CLR code:
4105     if test -z "$MSVC_CXX"; then
4106         # This gives us a posix path with 8.3 filename restrictions
4107         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4108     fi
4110     if test -z "$CC"; then
4111         CC=$MSVC_CXX
4112         CC_BASE=`first_arg_basename "$CC"`
4113     fi
4114     if test -z "$CXX"; then
4115         CXX=$MSVC_CXX
4116         CXX_BASE=`first_arg_basename "$CXX"`
4117     fi
4119     if test -n "$CC"; then
4120         # Remove /cl.exe from CC case insensitive
4121         AC_MSG_NOTICE([found Visual C++ $vcyear])
4123         main_include_dir=`cygpath -d -m "$COMPATH/Include"`
4124         CPPFLAGS="$CPPFLAGS -I$main_include_dir"
4126         PathFormat "$COMPATH"
4127         COMPATH=`win_short_path_for_make "$formatted_path"`
4129         VCVER=$vcnumwithdot
4130         VCTOOLSET=$vctoolset
4132         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4133         # are always "better", we list them in reverse chronological order.
4135         case "$vcnumwithdot" in
4136         16.0 | 17.0)
4137             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4138             ;;
4139         esac
4141         # The expectation is that --with-windows-sdk should not need to be used
4142         if test -n "$with_windows_sdk"; then
4143             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4144             *" "$with_windows_sdk" "*)
4145                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4146                 ;;
4147             *)
4148                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4149                 ;;
4150             esac
4151         fi
4153         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4154         ac_objext=obj
4155         ac_exeext=exe
4157     else
4158         AC_MSG_ERROR([Visual C++ not found after all, huh])
4159     fi
4161     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4162     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4163         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4164         // between Visual Studio versions and _MSC_VER:
4165         #if _MSC_VER < 1925
4166         #error
4167         #endif
4168     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4170     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4171     # version of the Explorer extension (and maybe other small
4172     # bits, too) needed when installing a 32-bit LibreOffice on a
4173     # 64-bit OS. The 64-bit Explorer extension is a feature that
4174     # has been present since long in OOo. Don't confuse it with
4175     # building LibreOffice itself as 64-bit code.
4177     BUILD_X64=
4178     CXX_X64_BINARY=
4180     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4181         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4182         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4183              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4184         then
4185             BUILD_X64=TRUE
4186             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4187             AC_MSG_RESULT([found])
4188         else
4189             AC_MSG_RESULT([not found])
4190             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4191         fi
4192     elif test "$WIN_HOST_ARCH" = "x64"; then
4193         CXX_X64_BINARY=$CXX
4194     fi
4195     AC_SUBST(BUILD_X64)
4197     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4198     AC_SUBST(CXX_X64_BINARY)
4200     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4201     # needed to support TWAIN scan on both 32- and 64-bit systems
4203     case "$WIN_HOST_ARCH" in
4204     x64)
4205         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4206         if test -n "$CXX_X86_BINARY"; then
4207             BUILD_X86=TRUE
4208             AC_MSG_RESULT([preset])
4209         elif test -n "$WIN_MULTI_ARCH"; then
4210             BUILD_X86=TRUE
4211             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4212             CXX_X86_BINARY+=" /arch:SSE"
4213             AC_MSG_RESULT([found])
4214         else
4215             AC_MSG_RESULT([not found])
4216             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4217         fi
4218         ;;
4219     x86)
4220         BUILD_X86=TRUE
4221         CXX_X86_BINARY=$MSVC_CXX
4222         ;;
4223     esac
4224     AC_SUBST(BUILD_X86)
4225     AC_SUBST(CXX_X86_BINARY)
4227 AC_SUBST(VCVER)
4228 AC_SUBST(VCTOOLSET)
4229 AC_SUBST(DEVENV)
4230 AC_SUBST(MSVC_CXX)
4232 COM_IS_CLANG=
4233 AC_MSG_CHECKING([whether the compiler is actually Clang])
4234 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4235     #ifndef __clang__
4236     you lose
4237     #endif
4238     int foo=42;
4239     ]])],
4240     [AC_MSG_RESULT([yes])
4241      COM_IS_CLANG=TRUE],
4242     [AC_MSG_RESULT([no])])
4243 AC_SUBST(COM_IS_CLANG)
4245 CC_PLAIN=$CC
4246 CLANGVER=
4247 if test "$COM_IS_CLANG" = TRUE; then
4248     AC_MSG_CHECKING([whether Clang is new enough])
4249     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4250         #if !defined __apple_build_version__
4251         #error
4252         #endif
4253         ]])],
4254         [my_apple_clang=yes],[my_apple_clang=])
4255     if test "$my_apple_clang" = yes; then
4256         AC_MSG_RESULT([assumed yes (Apple Clang)])
4257     elif test "$_os" = Emscripten; then
4258         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4259     else
4260         if test "$_os" = WINNT; then
4261             dnl In which case, assume clang-cl:
4262             my_args="/EP /TC"
4263             dnl Filter out -FIIntrin.h, which needs to be explicitly stated for
4264             dnl clang-cl:
4265             CC_PLAIN=
4266             for i in $CC; do
4267                 case $i in
4268                 -FIIntrin.h)
4269                     ;;
4270                 *)
4271                     CC_PLAIN="$CC_PLAIN $i"
4272                     ;;
4273                 esac
4274             done
4275         else
4276             my_args="-E -P"
4277         fi
4278         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC_PLAIN $my_args - | sed 's/ //g'`
4279         CLANG_FULL_VERSION=`echo __clang_version__ | $CC_PLAIN $my_args -`
4280         CLANGVER=`echo $clang_version \
4281             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4282         if test "$CLANGVER" -ge 50002; then
4283             AC_MSG_RESULT([yes ($clang_version)])
4284         else
4285             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 5.0.2])
4286         fi
4287         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4288         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4289     fi
4292 SHOWINCLUDES_PREFIX=
4293 if test "$_os" = WINNT; then
4294     dnl We need to guess the prefix of the -showIncludes output, it can be
4295     dnl localized
4296     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4297     echo "#include <stdlib.h>" > conftest.c
4298     SHOWINCLUDES_PREFIX=`$CC_PLAIN $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4299         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4300     rm -f conftest.c conftest.obj
4301     if test -z "$SHOWINCLUDES_PREFIX"; then
4302         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4303     else
4304         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4305     fi
4307 AC_SUBST(SHOWINCLUDES_PREFIX)
4310 # prefix C with ccache if needed
4312 UNCACHED_CC="$CC"
4313 if test "$CCACHE" != ""; then
4314     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4316     AC_LANG_PUSH([C])
4317     save_CFLAGS=$CFLAGS
4318     CFLAGS="$CFLAGS --ccache-skip -O2"
4319     dnl an empty program will do, we're checking the compiler flags
4320     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4321                       [use_ccache=yes], [use_ccache=no])
4322     CFLAGS=$save_CFLAGS
4323     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4324         AC_MSG_RESULT([yes])
4325     else
4326         CC="$CCACHE $CC"
4327         CC_BASE="ccache $CC_BASE"
4328         AC_MSG_RESULT([no])
4329     fi
4330     AC_LANG_POP([C])
4333 # ===================================================================
4334 # check various GCC options that Clang does not support now but maybe
4335 # will somewhen in the future, check them even for GCC, so that the
4336 # flags are set
4337 # ===================================================================
4339 HAVE_GCC_GGDB2=
4340 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4341     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4342     save_CFLAGS=$CFLAGS
4343     CFLAGS="$CFLAGS -Werror -ggdb2"
4344     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4345     CFLAGS=$save_CFLAGS
4346     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4347         AC_MSG_RESULT([yes])
4348     else
4349         AC_MSG_RESULT([no])
4350     fi
4352     if test "$host_cpu" = "m68k"; then
4353         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4354         save_CFLAGS=$CFLAGS
4355         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4356         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4357         CFLAGS=$save_CFLAGS
4358         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4359             AC_MSG_RESULT([yes])
4360         else
4361             AC_MSG_ERROR([no])
4362         fi
4363     fi
4365 AC_SUBST(HAVE_GCC_GGDB2)
4367 dnl ===================================================================
4368 dnl  Test the gcc version
4369 dnl ===================================================================
4370 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4371     AC_MSG_CHECKING([the GCC version])
4372     _gcc_version=`$CC -dumpversion`
4373     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4374         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4375     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4377     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4379     if test "$gcc_full_version" -lt 70000; then
4380         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 7.0.0])
4381     fi
4382 else
4383     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4384     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4385     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4386     # (which reports itself as GCC 4.2.1).
4387     GCC_VERSION=
4389 AC_SUBST(GCC_VERSION)
4391 dnl Set the ENABLE_DBGUTIL variable
4392 dnl ===================================================================
4393 AC_MSG_CHECKING([whether to build with additional debug utilities])
4394 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4395     ENABLE_DBGUTIL="TRUE"
4396     # this is an extra var so it can have different default on different MSVC
4397     # versions (in case there are version specific problems with it)
4398     MSVC_USE_DEBUG_RUNTIME="TRUE"
4400     AC_MSG_RESULT([yes])
4401     # cppunit and graphite expose STL in public headers
4402     if test "$with_system_cppunit" = "yes"; then
4403         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4404     else
4405         with_system_cppunit=no
4406     fi
4407     if test "$with_system_graphite" = "yes"; then
4408         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4409     else
4410         with_system_graphite=no
4411     fi
4412     if test "$with_system_orcus" = "yes"; then
4413         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4414     else
4415         with_system_orcus=no
4416     fi
4417     if test "$with_system_libcmis" = "yes"; then
4418         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4419     else
4420         with_system_libcmis=no
4421     fi
4422     if test "$with_system_hunspell" = "yes"; then
4423         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4424     else
4425         with_system_hunspell=no
4426     fi
4427     if test "$with_system_gpgmepp" = "yes"; then
4428         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4429     else
4430         with_system_gpgmepp=no
4431     fi
4432     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4433     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4434     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4435     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4436     # of those two is using the system variant:
4437     if test "$with_system_libnumbertext" = "yes"; then
4438         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4439     else
4440         with_system_libnumbertext=no
4441     fi
4442     if test "$with_system_libwps" = "yes"; then
4443         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4444     else
4445         with_system_libwps=no
4446     fi
4447 else
4448     ENABLE_DBGUTIL=""
4449     MSVC_USE_DEBUG_RUNTIME=""
4450     AC_MSG_RESULT([no])
4452 AC_SUBST(ENABLE_DBGUTIL)
4453 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4455 dnl Set the ENABLE_DEBUG variable.
4456 dnl ===================================================================
4457 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4458     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4460 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4461     if test -z "$libo_fuzzed_enable_debug"; then
4462         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4463     else
4464         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4465         enable_debug=yes
4466     fi
4469 AC_MSG_CHECKING([whether to do a debug build])
4470 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4471     ENABLE_DEBUG="TRUE"
4472     if test -n "$ENABLE_DBGUTIL" ; then
4473         AC_MSG_RESULT([yes (dbgutil)])
4474     else
4475         AC_MSG_RESULT([yes])
4476     fi
4477 else
4478     ENABLE_DEBUG=""
4479     AC_MSG_RESULT([no])
4481 AC_SUBST(ENABLE_DEBUG)
4483 dnl ===================================================================
4484 dnl Select the linker to use (gold/lld/ld.bfd).
4485 dnl This is done only after compiler checks (need to know if Clang is
4486 dnl used, for different defaults) and after checking if a debug build
4487 dnl is wanted (non-debug builds get the default linker if not explicitly
4488 dnl specified otherwise).
4489 dnl All checks for linker features/options should come after this.
4490 dnl ===================================================================
4491 check_use_ld()
4493     use_ld=-fuse-ld=${1%%:*}
4494     use_ld_path=${1#*:}
4495     if test "$use_ld_path" != "$1"; then
4496         use_ld="$use_ld --ld-path=$use_ld_path"
4497     fi
4498     use_ld_fail_if_error=$2
4499     use_ld_ok=
4500     AC_MSG_CHECKING([for $use_ld linker support])
4501     use_ld_ldflags_save="$LDFLAGS"
4502     LDFLAGS="$LDFLAGS $use_ld"
4503     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4504 #include <stdio.h>
4505         ],[
4506 printf ("hello world\n");
4507         ])], USE_LD=$use_ld, [])
4508     if test -n "$USE_LD"; then
4509         AC_MSG_RESULT( yes )
4510         use_ld_ok=yes
4511     else
4512         if test -n "$use_ld_fail_if_error"; then
4513             AC_MSG_ERROR( no )
4514         else
4515             AC_MSG_RESULT( no )
4516         fi
4517     fi
4518     if test -n "$use_ld_ok"; then
4519         dnl keep the value of LDFLAGS
4520         return 0
4521     fi
4522     LDFLAGS="$use_ld_ldflags_save"
4523     return 1
4525 USE_LD=
4526 if test "$enable_ld" != "no"; then
4527     if test "$GCC" = "yes"; then
4528         if test -n "$enable_ld"; then
4529             check_use_ld "$enable_ld" fail_if_error
4530         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4531             dnl non-debug builds default to the default linker
4532             true
4533         elif test -n "$COM_IS_CLANG"; then
4534             check_use_ld lld
4535             if test $? -ne 0; then
4536                 check_use_ld gold
4537             fi
4538         else
4539             # For gcc first try gold, new versions also support lld.
4540             check_use_ld gold
4541             if test $? -ne 0; then
4542                 check_use_ld lld
4543             fi
4544         fi
4545         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4546         rm conftest.out
4547         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD)')
4548         if test -z "$ld_used"; then
4549             ld_used="unknown"
4550         fi
4551         AC_MSG_CHECKING([for linker that is used])
4552         AC_MSG_RESULT([$ld_used])
4553         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4554             if echo "$ld_used" | grep -q "^GNU ld"; then
4555                 AC_MSG_WARN([The default GNU linker is slow, consider using the LLD or the GNU gold linker.])
4556                 add_warning "The default GNU linker is slow, consider using the LLD or the GNU gold linker."
4557             fi
4558         fi
4559     else
4560         if test "$enable_ld" = "yes"; then
4561             AC_MSG_ERROR([--enable-ld not supported])
4562         fi
4563     fi
4565 AC_SUBST(USE_LD)
4567 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4568 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4569     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4570     bsymbolic_functions_ldflags_save=$LDFLAGS
4571     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4572     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4573 #include <stdio.h>
4574         ],[
4575 printf ("hello world\n");
4576         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4577     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4578         AC_MSG_RESULT( found )
4579     else
4580         AC_MSG_RESULT( not found )
4581     fi
4582     LDFLAGS=$bsymbolic_functions_ldflags_save
4584 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4586 LD_GC_SECTIONS=
4587 if test "$GCC" = "yes"; then
4588     for flag in "--gc-sections" "-dead_strip"; do
4589         AC_MSG_CHECKING([for $flag linker support])
4590         ldflags_save=$LDFLAGS
4591         LDFLAGS="$LDFLAGS -Wl,$flag"
4592         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4593 #include <stdio.h>
4594             ],[
4595 printf ("hello world\n");
4596             ])],[
4597             LD_GC_SECTIONS="-Wl,$flag"
4598             AC_MSG_RESULT( found )
4599             ], [
4600             AC_MSG_RESULT( not found )
4601             ])
4602         LDFLAGS=$ldflags_save
4603         if test -n "$LD_GC_SECTIONS"; then
4604             break
4605         fi
4606     done
4608 AC_SUBST(LD_GC_SECTIONS)
4610 HAVE_GSPLIT_DWARF=
4611 if test "$enable_split_debug" != no; then
4612     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4613     if test "$enable_split_debug" = yes -o \( "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4614         AC_MSG_CHECKING([whether $CC_BASE supports -gsplit-dwarf])
4615         save_CFLAGS=$CFLAGS
4616         CFLAGS="$CFLAGS -Werror -gsplit-dwarf"
4617         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_SPLIT_DWARF=TRUE ],[])
4618         CFLAGS=$save_CFLAGS
4619         if test "$HAVE_GCC_SPLIT_DWARF" = "TRUE"; then
4620             AC_MSG_RESULT([yes])
4621         else
4622             if test "$enable_split_debug" = yes; then
4623                 AC_MSG_ERROR([no])
4624             else
4625                 AC_MSG_RESULT([no])
4626             fi
4627         fi
4628     fi
4629     if test -z "$HAVE_GCC_SPLIT_DWARF" -a "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4630         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4631         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4632     fi
4634 AC_SUBST(HAVE_GCC_SPLIT_DWARF)
4636 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4637 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4638 save_CFLAGS=$CFLAGS
4639 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4640 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4641 CFLAGS=$save_CFLAGS
4642 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4643     AC_MSG_RESULT([yes])
4644 else
4645     AC_MSG_RESULT([no])
4647 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4649 ENABLE_GDB_INDEX=
4650 if test "$enable_gdb_index" != "no"; then
4651     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4652     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4653         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4654         save_CFLAGS=$CFLAGS
4655         CFLAGS="$CFLAGS -Werror -ggnu-pubnames"
4656         have_ggnu_pubnames=
4657         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4658         if test "$have_ggnu_pubnames" != "TRUE"; then
4659             if test "$enable_gdb_index" = "yes"; then
4660                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4661             else
4662                 AC_MSG_RESULT( no )
4663             fi
4664         else
4665             AC_MSG_RESULT( yes )
4666             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4667             ldflags_save=$LDFLAGS
4668             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4669             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4670 #include <stdio.h>
4671                 ],[
4672 printf ("hello world\n");
4673                 ])], ENABLE_GDB_INDEX=TRUE, [])
4674             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
4675                 AC_MSG_RESULT( yes )
4676             else
4677                 if test "$enable_gdb_index" = "yes"; then
4678                     AC_MSG_ERROR( no )
4679                 else
4680                     AC_MSG_RESULT( no )
4681                 fi
4682             fi
4683             LDFLAGS=$ldflags_save
4684         fi
4685         CFLAGS=$save_CFLAGS
4686         fi
4687     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4688         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
4689         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
4690     fi
4692 AC_SUBST(ENABLE_GDB_INDEX)
4694 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
4695     enable_sal_log=yes
4697 if test "$enable_sal_log" = yes; then
4698     ENABLE_SAL_LOG=TRUE
4700 AC_SUBST(ENABLE_SAL_LOG)
4702 dnl Check for enable symbols option
4703 dnl ===================================================================
4704 AC_MSG_CHECKING([whether to generate debug information])
4705 if test -z "$enable_symbols"; then
4706     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4707         enable_symbols=yes
4708     else
4709         enable_symbols=no
4710     fi
4712 if test "$enable_symbols" = yes; then
4713     ENABLE_SYMBOLS_FOR=all
4714     AC_MSG_RESULT([yes])
4715 elif test "$enable_symbols" = no; then
4716     ENABLE_SYMBOLS_FOR=
4717     AC_MSG_RESULT([no])
4718 else
4719     # Selective debuginfo.
4720     ENABLE_SYMBOLS_FOR="$enable_symbols"
4721     AC_MSG_RESULT([for "$enable_symbols"])
4723 AC_SUBST(ENABLE_SYMBOLS_FOR)
4725 if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then
4726     # Building on Android with full symbols: without enough memory the linker never finishes currently.
4727     AC_MSG_CHECKING([whether enough memory is available for linking])
4728     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
4729     # Check for 15GB, as Linux reports a bit less than the physical memory size.
4730     if test -n "$mem_size" -a $mem_size -lt 15728640; then
4731         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
4732     else
4733         AC_MSG_RESULT([yes])
4734     fi
4737 ENABLE_OPTIMIZED=
4738 ENABLE_OPTIMIZED_DEBUG=
4739 AC_MSG_CHECKING([whether to compile with optimization flags])
4740 if test -z "$enable_optimized"; then
4741     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4742         enable_optimized=no
4743     else
4744         enable_optimized=yes
4745     fi
4747 if test "$enable_optimized" = yes; then
4748     ENABLE_OPTIMIZED=TRUE
4749     AC_MSG_RESULT([yes])
4750 elif test "$enable_optimized" = debug; then
4751     ENABLE_OPTIMIZED_DEBUG=TRUE
4752     AC_MSG_RESULT([yes (debug)])
4753     HAVE_GCC_OG=
4754     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4755         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
4756         save_CFLAGS=$CFLAGS
4757         CFLAGS="$CFLAGS -Werror -Og"
4758         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
4759         CFLAGS=$save_CFLAGS
4760         if test "$HAVE_GCC_OG" = "TRUE"; then
4761             AC_MSG_RESULT([yes])
4762         else
4763             AC_MSG_RESULT([no])
4764         fi
4765     fi
4766     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
4767         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
4768     fi
4769 else
4770     AC_MSG_RESULT([no])
4772 AC_SUBST(ENABLE_OPTIMIZED)
4773 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
4776 # determine CPUNAME, OS, ...
4778 case "$host_os" in
4780 aix*)
4781     COM=GCC
4782     CPUNAME=POWERPC
4783     OS=AIX
4784     RTL_OS=AIX
4785     RTL_ARCH=PowerPC
4786     PLATFORMID=aix_powerpc
4787     P_SEP=:
4788     ;;
4790 cygwin*|wsl*)
4791     # Already handled
4792     ;;
4794 darwin*|macos*)
4795     COM=GCC
4796     OS=MACOSX
4797     RTL_OS=MacOSX
4798     P_SEP=:
4800     case "$host_cpu" in
4801     aarch64|arm64)
4802         if test "$enable_ios_simulator" = "yes"; then
4803             OS=iOS
4804         else
4805             CPUNAME=AARCH64
4806             RTL_ARCH=AARCH64
4807             PLATFORMID=macosx_aarch64
4808         fi
4809         ;;
4810     x86_64)
4811         if test "$enable_ios_simulator" = "yes"; then
4812             OS=iOS
4813         fi
4814         CPUNAME=X86_64
4815         RTL_ARCH=X86_64
4816         PLATFORMID=macosx_x86_64
4817         ;;
4818     *)
4819         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4820         ;;
4821     esac
4822     ;;
4824 ios*)
4825     COM=GCC
4826     OS=iOS
4827     RTL_OS=iOS
4828     P_SEP=:
4830     case "$host_cpu" in
4831     aarch64|arm64)
4832         if test "$enable_ios_simulator" = "yes"; then
4833             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
4834         fi
4835         ;;
4836     *)
4837         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4838         ;;
4839     esac
4840     CPUNAME=AARCH64
4841     RTL_ARCH=AARCH64
4842     PLATFORMID=ios_arm64
4843     ;;
4845 dragonfly*)
4846     COM=GCC
4847     OS=DRAGONFLY
4848     RTL_OS=DragonFly
4849     P_SEP=:
4851     case "$host_cpu" in
4852     i*86)
4853         CPUNAME=INTEL
4854         RTL_ARCH=x86
4855         PLATFORMID=dragonfly_x86
4856         ;;
4857     x86_64)
4858         CPUNAME=X86_64
4859         RTL_ARCH=X86_64
4860         PLATFORMID=dragonfly_x86_64
4861         ;;
4862     *)
4863         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4864         ;;
4865     esac
4866     ;;
4868 freebsd*)
4869     COM=GCC
4870     RTL_OS=FreeBSD
4871     OS=FREEBSD
4872     P_SEP=:
4874     case "$host_cpu" in
4875     aarch64)
4876         CPUNAME=AARCH64
4877         PLATFORMID=freebsd_aarch64
4878         RTL_ARCH=AARCH64
4879         ;;
4880     i*86)
4881         CPUNAME=INTEL
4882         RTL_ARCH=x86
4883         PLATFORMID=freebsd_x86
4884         ;;
4885     x86_64|amd64)
4886         CPUNAME=X86_64
4887         RTL_ARCH=X86_64
4888         PLATFORMID=freebsd_x86_64
4889         ;;
4890     powerpc64)
4891         CPUNAME=POWERPC64
4892         RTL_ARCH=PowerPC_64
4893         PLATFORMID=freebsd_powerpc64
4894         ;;
4895     powerpc|powerpcspe)
4896         CPUNAME=POWERPC
4897         RTL_ARCH=PowerPC
4898         PLATFORMID=freebsd_powerpc
4899         ;;
4900     *)
4901         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4902         ;;
4903     esac
4904     ;;
4906 haiku*)
4907     COM=GCC
4908     GUIBASE=haiku
4909     RTL_OS=Haiku
4910     OS=HAIKU
4911     P_SEP=:
4913     case "$host_cpu" in
4914     i*86)
4915         CPUNAME=INTEL
4916         RTL_ARCH=x86
4917         PLATFORMID=haiku_x86
4918         ;;
4919     x86_64|amd64)
4920         CPUNAME=X86_64
4921         RTL_ARCH=X86_64
4922         PLATFORMID=haiku_x86_64
4923         ;;
4924     *)
4925         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4926         ;;
4927     esac
4928     ;;
4930 kfreebsd*)
4931     COM=GCC
4932     OS=LINUX
4933     RTL_OS=kFreeBSD
4934     P_SEP=:
4936     case "$host_cpu" in
4938     i*86)
4939         CPUNAME=INTEL
4940         RTL_ARCH=x86
4941         PLATFORMID=kfreebsd_x86
4942         ;;
4943     x86_64)
4944         CPUNAME=X86_64
4945         RTL_ARCH=X86_64
4946         PLATFORMID=kfreebsd_x86_64
4947         ;;
4948     *)
4949         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4950         ;;
4951     esac
4952     ;;
4954 linux-gnu*|linux-musl*)
4955     COM=GCC
4956     OS=LINUX
4957     RTL_OS=Linux
4958     P_SEP=:
4960     case "$host_cpu" in
4962     aarch64)
4963         CPUNAME=AARCH64
4964         PLATFORMID=linux_aarch64
4965         RTL_ARCH=AARCH64
4966         EPM_FLAGS="-a arm64"
4967         ;;
4968     alpha)
4969         CPUNAME=AXP
4970         RTL_ARCH=ALPHA
4971         PLATFORMID=linux_alpha
4972         ;;
4973     arm*)
4974         CPUNAME=ARM
4975         EPM_FLAGS="-a arm"
4976         RTL_ARCH=ARM_EABI
4977         PLATFORMID=linux_arm_eabi
4978         case "$host_cpu" in
4979         arm*-linux)
4980             RTL_ARCH=ARM_OABI
4981             PLATFORMID=linux_arm_oabi
4982             ;;
4983         esac
4984         ;;
4985     hppa)
4986         CPUNAME=HPPA
4987         RTL_ARCH=HPPA
4988         EPM_FLAGS="-a hppa"
4989         PLATFORMID=linux_hppa
4990         ;;
4991     i*86)
4992         CPUNAME=INTEL
4993         RTL_ARCH=x86
4994         PLATFORMID=linux_x86
4995         ;;
4996     ia64)
4997         CPUNAME=IA64
4998         RTL_ARCH=IA64
4999         PLATFORMID=linux_ia64
5000         ;;
5001     mips)
5002         CPUNAME=GODSON
5003         RTL_ARCH=MIPS_EB
5004         EPM_FLAGS="-a mips"
5005         PLATFORMID=linux_mips_eb
5006         ;;
5007     mips64)
5008         CPUNAME=GODSON64
5009         RTL_ARCH=MIPS64_EB
5010         EPM_FLAGS="-a mips64"
5011         PLATFORMID=linux_mips64_eb
5012         ;;
5013     mips64el)
5014         CPUNAME=GODSON64
5015         RTL_ARCH=MIPS64_EL
5016         EPM_FLAGS="-a mips64el"
5017         PLATFORMID=linux_mips64_el
5018         ;;
5019     mipsel)
5020         CPUNAME=GODSON
5021         RTL_ARCH=MIPS_EL
5022         EPM_FLAGS="-a mipsel"
5023         PLATFORMID=linux_mips_el
5024         ;;
5025     m68k)
5026         CPUNAME=M68K
5027         RTL_ARCH=M68K
5028         PLATFORMID=linux_m68k
5029         ;;
5030     powerpc)
5031         CPUNAME=POWERPC
5032         RTL_ARCH=PowerPC
5033         PLATFORMID=linux_powerpc
5034         ;;
5035     powerpc64)
5036         CPUNAME=POWERPC64
5037         RTL_ARCH=PowerPC_64
5038         PLATFORMID=linux_powerpc64
5039         ;;
5040     powerpc64le)
5041         CPUNAME=POWERPC64
5042         RTL_ARCH=PowerPC_64_LE
5043         PLATFORMID=linux_powerpc64_le
5044         ;;
5045     sparc)
5046         CPUNAME=SPARC
5047         RTL_ARCH=SPARC
5048         PLATFORMID=linux_sparc
5049         ;;
5050     sparc64)
5051         CPUNAME=SPARC64
5052         RTL_ARCH=SPARC64
5053         PLATFORMID=linux_sparc64
5054         ;;
5055     s390)
5056         CPUNAME=S390
5057         RTL_ARCH=S390
5058         PLATFORMID=linux_s390
5059         ;;
5060     s390x)
5061         CPUNAME=S390X
5062         RTL_ARCH=S390x
5063         PLATFORMID=linux_s390x
5064         ;;
5065     x86_64)
5066         CPUNAME=X86_64
5067         RTL_ARCH=X86_64
5068         PLATFORMID=linux_x86_64
5069         ;;
5070     *)
5071         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5072         ;;
5073     esac
5074     ;;
5076 linux-android*)
5077     COM=GCC
5078     OS=ANDROID
5079     RTL_OS=Android
5080     P_SEP=:
5082     case "$host_cpu" in
5084     arm|armel)
5085         CPUNAME=ARM
5086         RTL_ARCH=ARM_EABI
5087         PLATFORMID=android_arm_eabi
5088         ;;
5089     aarch64)
5090         CPUNAME=AARCH64
5091         RTL_ARCH=AARCH64
5092         PLATFORMID=android_aarch64
5093         ;;
5094     i*86)
5095         CPUNAME=INTEL
5096         RTL_ARCH=x86
5097         PLATFORMID=android_x86
5098         ;;
5099     x86_64)
5100         CPUNAME=X86_64
5101         RTL_ARCH=X86_64
5102         PLATFORMID=android_x86_64
5103         ;;
5104     *)
5105         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5106         ;;
5107     esac
5108     ;;
5110 *netbsd*)
5111     COM=GCC
5112     OS=NETBSD
5113     RTL_OS=NetBSD
5114     P_SEP=:
5116     case "$host_cpu" in
5117     i*86)
5118         CPUNAME=INTEL
5119         RTL_ARCH=x86
5120         PLATFORMID=netbsd_x86
5121         ;;
5122     powerpc)
5123         CPUNAME=POWERPC
5124         RTL_ARCH=PowerPC
5125         PLATFORMID=netbsd_powerpc
5126         ;;
5127     sparc)
5128         CPUNAME=SPARC
5129         RTL_ARCH=SPARC
5130         PLATFORMID=netbsd_sparc
5131         ;;
5132     x86_64)
5133         CPUNAME=X86_64
5134         RTL_ARCH=X86_64
5135         PLATFORMID=netbsd_x86_64
5136         ;;
5137     *)
5138         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5139         ;;
5140     esac
5141     ;;
5143 openbsd*)
5144     COM=GCC
5145     OS=OPENBSD
5146     RTL_OS=OpenBSD
5147     P_SEP=:
5149     case "$host_cpu" in
5150     i*86)
5151         CPUNAME=INTEL
5152         RTL_ARCH=x86
5153         PLATFORMID=openbsd_x86
5154         ;;
5155     x86_64)
5156         CPUNAME=X86_64
5157         RTL_ARCH=X86_64
5158         PLATFORMID=openbsd_x86_64
5159         ;;
5160     *)
5161         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5162         ;;
5163     esac
5164     SOLARINC="$SOLARINC -I/usr/local/include"
5165     ;;
5167 solaris*)
5168     COM=GCC
5169     OS=SOLARIS
5170     RTL_OS=Solaris
5171     P_SEP=:
5173     case "$host_cpu" in
5174     i*86)
5175         CPUNAME=INTEL
5176         RTL_ARCH=x86
5177         PLATFORMID=solaris_x86
5178         ;;
5179     sparc)
5180         CPUNAME=SPARC
5181         RTL_ARCH=SPARC
5182         PLATFORMID=solaris_sparc
5183         ;;
5184     sparc64)
5185         CPUNAME=SPARC64
5186         RTL_ARCH=SPARC64
5187         PLATFORMID=solaris_sparc64
5188         ;;
5189     *)
5190         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5191         ;;
5192     esac
5193     SOLARINC="$SOLARINC -I/usr/local/include"
5194     ;;
5196 emscripten*)
5197     COM=GCC
5198     OS=EMSCRIPTEN
5199     RTL_OS=Emscripten
5200     P_SEP=:
5202     case "$host_cpu" in
5203     wasm32|wasm64)
5204         ;;
5205     *)
5206         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5207         ;;
5208     esac
5209     CPUNAME=INTEL
5210     RTL_ARCH=x86
5211     PLATFORMID=linux_x86
5212     ;;
5215     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5216     ;;
5217 esac
5219 if test "$with_x" = "no"; then
5220     AC_MSG_ERROR([Use --disable-gui instead. How can we get rid of this option? No idea where it comes from.])
5223 DISABLE_GUI=""
5224 if test "$enable_gui" = "no"; then
5225     if test "$using_x11" != yes; then
5226         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5227     fi
5228     USING_X11=
5229     DISABLE_GUI=TRUE
5230 else
5231     AC_DEFINE(HAVE_FEATURE_UI)
5233 AC_SUBST(DISABLE_GUI)
5235 if test "$using_x11" = yes; then
5236     if test "$USING_X11" = TRUE; then
5237         AC_DEFINE(USING_X11)
5238     else
5239         disable_x11_tests
5240     fi
5241 else
5242     if test "$USING_X11" = TRUE; then
5243         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5244     fi
5247 WORKDIR="${BUILDDIR}/workdir"
5248 INSTDIR="${BUILDDIR}/instdir"
5249 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5250 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5251 SOLARINC="-I$SRC_ROOT/include $SOLARINC"
5252 AC_SUBST(COM)
5253 AC_SUBST(CPUNAME)
5254 AC_SUBST(RTL_OS)
5255 AC_SUBST(RTL_ARCH)
5256 AC_SUBST(EPM_FLAGS)
5257 AC_SUBST(USING_X11)
5258 AC_SUBST([INSTDIR])
5259 AC_SUBST([INSTROOT])
5260 AC_SUBST([INSTROOTBASE])
5261 AC_SUBST(OS)
5262 AC_SUBST(P_SEP)
5263 AC_SUBST(WORKDIR)
5264 AC_SUBST(PLATFORMID)
5265 AC_SUBST(WINDOWS_X64)
5266 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5268 if test "$OS" = WNT -a "$COM" = MSC; then
5269     case "$CPUNAME" in
5270     INTEL) CPPU_ENV=msci ;;
5271     X86_64) CPPU_ENV=mscx ;;
5272     AARCH64) CPPU_ENV=msca ;;
5273     *)
5274         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5275         ;;
5276     esac
5277 else
5278     CPPU_ENV=gcc3
5280 AC_SUBST(CPPU_ENV)
5282 dnl ===================================================================
5283 dnl Test which package format to use
5284 dnl ===================================================================
5285 AC_MSG_CHECKING([which package format to use])
5286 if test -n "$with_package_format" -a "$with_package_format" != no; then
5287     for i in $with_package_format; do
5288         case "$i" in
5289         aix | bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5290             ;;
5291         *)
5292             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5293 aix - AIX software distribution
5294 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5295 deb - Debian software distribution
5296 pkg - Solaris software distribution
5297 rpm - RedHat software distribution
5299 LibreOffice additionally supports:
5300 archive - .tar.gz or .zip
5301 dmg - macOS .dmg
5302 installed - installation tree
5303 msi - Windows .msi
5304         ])
5305             ;;
5306         esac
5307     done
5308     # fakeroot is needed to ensure correct file ownerships/permissions
5309     # inside deb packages and tar archives created on Linux and Solaris.
5310     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5311         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5312         if test "$FAKEROOT" = "no"; then
5313             AC_MSG_ERROR(
5314                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5315         fi
5316     fi
5317     PKGFORMAT="$with_package_format"
5318     AC_MSG_RESULT([$PKGFORMAT])
5319 else
5320     PKGFORMAT=
5321     AC_MSG_RESULT([none])
5323 AC_SUBST(PKGFORMAT)
5325 dnl ===================================================================
5326 dnl handle help related options
5328 dnl If you change help related options, please update README.help
5329 dnl ===================================================================
5331 ENABLE_HTMLHELP=
5332 HELP_OMINDEX_PAGE=
5333 HELP_ONLINE=
5334 WITH_HELPPACKS=
5336 AC_MSG_CHECKING([which help to build])
5337 if test -n "$with_help" -a "$with_help" != "no"; then
5338     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5339     BUILD_TYPE="$BUILD_TYPE HELP"
5340     case "$with_help" in
5341     "html")
5342         ENABLE_HTMLHELP=TRUE
5343         WITH_HELPPACKS=TRUE
5344         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5345         AC_MSG_RESULT([HTML (local)])
5346         ;;
5347     "online")
5348         ENABLE_HTMLHELP=TRUE
5349         HELP_ONLINE=TRUE
5350         AC_MSG_RESULT([HTML (online)])
5351         ;;
5352     yes)
5353         WITH_HELPPACKS=TRUE
5354         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5355         AC_MSG_RESULT([XML (local)])
5356         ;;
5357     *)
5358         AC_MSG_ERROR([Unknown --with-help=$with_help])
5359         ;;
5360     esac
5361 else
5362     AC_MSG_RESULT([no])
5365 AC_MSG_CHECKING([if we need to build the help index tooling])
5366 if test "$with_help" = yes -o "$enable_extension_integration" != no; then
5367     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5368     AC_MSG_RESULT([yes])
5369 else
5370     AC_MSG_RESULT([no])
5373 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5374 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5375     if test "$HELP_ONLINE" != TRUE; then
5376         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5377     fi
5378     case "$with_omindex" in
5379     "server")
5380         HELP_OMINDEX_PAGE=TRUE
5381         AC_MSG_RESULT([SERVER])
5382         ;;
5383     "noxap")
5384         AC_MSG_RESULT([NOXAP])
5385         ;;
5386     *)
5387         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5388         ;;
5389     esac
5390 else
5391     AC_MSG_RESULT([no])
5394 AC_MSG_CHECKING([whether to include the XML-help support])
5395 if test "$enable_xmlhelp" = yes; then
5396     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5397     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5398     AC_MSG_RESULT([yes])
5399 else
5400     if test "$with_help" = yes; then
5401         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5402     fi
5403     AC_MSG_RESULT([no])
5406 dnl Test whether to integrate helppacks into the product's installer
5407 AC_MSG_CHECKING([for helppack integration])
5408 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5409     AC_MSG_RESULT([no integration])
5410 else
5411     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5412     AC_MSG_RESULT([integration])
5415 AC_SUBST([ENABLE_HTMLHELP])
5416 AC_SUBST([HELP_OMINDEX_PAGE])
5417 AC_SUBST([HELP_ONLINE])
5418 # WITH_HELPPACKS is used only in configure
5420 dnl ===================================================================
5421 dnl Set up a different compiler to produce tools to run on the build
5422 dnl machine when doing cross-compilation
5423 dnl ===================================================================
5425 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5426 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5427 if test "$cross_compiling" = "yes"; then
5428     AC_MSG_CHECKING([for BUILD platform configuration])
5429     echo
5430     rm -rf CONF-FOR-BUILD config_build.mk
5431     mkdir CONF-FOR-BUILD
5432     # Here must be listed all files needed when running the configure script. In particular, also
5433     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5434     # keep them in the same order as there.
5435     (cd $SRC_ROOT && tar cf - \
5436         config.guess \
5437         bin/get_config_variables \
5438         solenv/bin/getcompver.awk \
5439         solenv/inc/langlist.mk \
5440         download.lst \
5441         config_host.mk.in \
5442         config_host_lang.mk.in \
5443         Makefile.in \
5444         bin/bffvalidator.sh.in \
5445         bin/odfvalidator.sh.in \
5446         bin/officeotron.sh.in \
5447         hardened_runtime.xcent.in \
5448         instsetoo_native/util/openoffice.lst.in \
5449         config_host/*.in \
5450         sysui/desktop/macosx/Info.plist.in \
5451         .vscode/vs-code-template.code-workspace.in \
5452         ) \
5453     | (cd CONF-FOR-BUILD && tar xf -)
5454     cp configure CONF-FOR-BUILD
5455     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5456     (
5457     unset COM USING_X11 OS CPUNAME
5458     unset CC CXX SYSBASE CFLAGS
5459     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5460     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5461     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5462     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5463     if test -n "$CC_FOR_BUILD"; then
5464         export CC="$CC_FOR_BUILD"
5465         CC_BASE=`first_arg_basename "$CC"`
5466     fi
5467     if test -n "$CXX_FOR_BUILD"; then
5468         export CXX="$CXX_FOR_BUILD"
5469         CXX_BASE=`first_arg_basename "$CXX"`
5470     fi
5471     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5472     cd CONF-FOR-BUILD
5474     # Handle host configuration, which affects the cross-toolset too
5475     sub_conf_opts=""
5476     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5477     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5478     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5479     if test -n "$ENABLE_JAVA"; then
5480         case "$_os" in
5481         iOS) sub_conf_opts="$sub_conf_opts --without-java" ;; # force it off, like it used to be
5482         Android)
5483             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5484             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5485             ;;
5486         *)
5487             if test -z "$with_jdk_home"; then
5488                 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.])
5489             fi
5490             ;;
5491         esac
5492     else
5493         sub_conf_opts="$sub_conf_opts --without-java"
5494     fi
5495     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5496     test "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" && sub_conf_opts="$sub_conf_opts --with-system-icu"
5497     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5498     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5499     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5500     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5501     sub_conf_opts="$sub_conf_opts $with_build_platform_configure_options"
5503     # Don't bother having configure look for stuff not needed for the build platform anyway
5504     ./configure \
5505         --build="$build_alias" \
5506         --disable-cairo-canvas \
5507         --disable-cups \
5508         --disable-firebird-sdbc \
5509         --disable-gpgmepp \
5510         --disable-gstreamer-1-0 \
5511         --disable-gtk3 \
5512         --disable-gtk4 \
5513         --disable-mariadb-sdbc \
5514         --disable-nss \
5515         --disable-online-update \
5516         --disable-opencl \
5517         --disable-pdfimport \
5518         --disable-postgresql-sdbc \
5519         --disable-skia \
5520         --enable-icecream="$enable_icecream" \
5521         --without-doxygen \
5522         --without-webdav \
5523         --with-parallelism="$with_parallelism" \
5524         --with-theme="$with_theme" \
5525         --with-tls=openssl \
5526         $sub_conf_opts \
5527         --srcdir=$srcdir \
5528         2>&1 | sed -e 's/^/    /'
5529     if test [${PIPESTATUS[0]}] -ne 0; then
5530         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5531     fi
5533     # filter permitted build targets
5534     PERMITTED_BUILD_TARGETS="
5535         AVMEDIA
5536         BOOST
5537         CAIRO
5538         CLUCENE
5539         CUCKOO
5540         CURL
5541         DBCONNECTIVITY
5542         DESKTOP
5543         DYNLOADING
5544         EPOXY
5545         EXPAT
5546         GLM
5547         GRAPHITE
5548         HARFBUZZ
5549         HELPTOOLS
5550         ICU
5551         LCMS2
5552         LIBJPEG_TURBO
5553         LIBLANGTAG
5554         LibO
5555         LIBFFI
5556         LIBPN
5557         LIBXML2
5558         LIBXSLT
5559         MDDS
5560         NATIVE
5561         OPENSSL
5562         ORCUS
5563         PYTHON
5564         SCRIPTING
5565         ZLIB
5567     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5568     # newlined lists, to use grep as a filter
5569     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5570     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5571     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5572     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5574     cp config_host.mk ../config_build.mk
5575     cp config_host_lang.mk ../config_build_lang.mk
5576     mv config.log ../config.Build.log
5577     mkdir -p ../config_build
5578     mv config_host/*.h ../config_build
5579     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5581     # all these will get a _FOR_BUILD postfix
5582     DIRECT_FOR_BUILD_SETTINGS="
5583         CC
5584         CPPU_ENV
5585         CXX
5586         ILIB
5587         JAVA_HOME
5588         JAVAIFLAGS
5589         JDK
5590         LIBO_BIN_FOLDER
5591         LIBO_LIB_FOLDER
5592         LIBO_URE_LIB_FOLDER
5593         LIBO_URE_MISC_FOLDER
5594         OS
5595         SDKDIRNAME
5596         SYSTEM_LIBXML
5597         SYSTEM_LIBXSLT
5599     # these overwrite host config with build config
5600     OVERWRITING_SETTINGS="
5601         ANT
5602         ANT_HOME
5603         ANT_LIB
5604         HSQLDB_USE_JDBC_4_1
5605         JAVA_CLASSPATH_NOT_SET
5606         JAVA_SOURCE_VER
5607         JAVA_TARGET_VER
5608         JAVACFLAGS
5609         JAVACOMPILER
5610         JAVADOC
5611         JAVADOCISGJDOC
5613     # these need some special handling
5614     EXTRA_HANDLED_SETTINGS="
5615         INSTDIR
5616         INSTROOT
5617         PATH
5618         WORKDIR
5620     OLD_PATH=$PATH
5621     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
5622     BUILD_PATH=$PATH
5623     PATH=$OLD_PATH
5625     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
5626     echo "$line" >>build-config
5628     for V in $DIRECT_FOR_BUILD_SETTINGS; do
5629         VV='$'$V
5630         VV=`eval "echo $VV"`
5631         if test -n "$VV"; then
5632             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
5633             echo "$line" >>build-config
5634         fi
5635     done
5637     for V in $OVERWRITING_SETTINGS; do
5638         VV='$'$V
5639         VV=`eval "echo $VV"`
5640         if test -n "$VV"; then
5641             line=${V}='${'${V}:-$VV'}'
5642             echo "$line" >>build-config
5643         fi
5644     done
5646     for V in INSTDIR INSTROOT WORKDIR; do
5647         VV='$'$V
5648         VV=`eval "echo $VV"`
5649         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
5650         if test -n "$VV"; then
5651             line="${V}_FOR_BUILD='$VV'"
5652             echo "$line" >>build-config
5653         fi
5654     done
5656     )
5657     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
5658     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])
5659     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
5660              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
5662     eval `cat CONF-FOR-BUILD/build-config`
5664     AC_MSG_RESULT([checking for BUILD platform configuration... done])
5666     rm -rf CONF-FOR-BUILD
5667 else
5668     OS_FOR_BUILD="$OS"
5669     CC_FOR_BUILD="$CC"
5670     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
5671     CXX_FOR_BUILD="$CXX"
5672     INSTDIR_FOR_BUILD="$INSTDIR"
5673     INSTROOT_FOR_BUILD="$INSTROOT"
5674     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
5675     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
5676     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
5677     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
5678     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
5679     WORKDIR_FOR_BUILD="$WORKDIR"
5681 AC_SUBST(OS_FOR_BUILD)
5682 AC_SUBST(INSTDIR_FOR_BUILD)
5683 AC_SUBST(INSTROOT_FOR_BUILD)
5684 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
5685 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
5686 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
5687 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
5688 AC_SUBST(SDKDIRNAME_FOR_BUILD)
5689 AC_SUBST(WORKDIR_FOR_BUILD)
5690 AC_SUBST(CC_FOR_BUILD)
5691 AC_SUBST(CXX_FOR_BUILD)
5692 AC_SUBST(CPPU_ENV_FOR_BUILD)
5694 dnl ===================================================================
5695 dnl Check for syslog header
5696 dnl ===================================================================
5697 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
5699 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
5700 dnl ===================================================================
5701 AC_MSG_CHECKING([whether to turn warnings to errors])
5702 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
5703     ENABLE_WERROR="TRUE"
5704     PYTHONWARNINGS="error"
5705     AC_MSG_RESULT([yes])
5706 else
5707     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
5708         ENABLE_WERROR="TRUE"
5709         PYTHONWARNINGS="error"
5710         AC_MSG_RESULT([yes])
5711     else
5712         AC_MSG_RESULT([no])
5713     fi
5715 AC_SUBST(ENABLE_WERROR)
5716 AC_SUBST(PYTHONWARNINGS)
5718 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
5719 dnl ===================================================================
5720 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
5721 if test -z "$enable_assert_always_abort"; then
5722    if test "$ENABLE_DEBUG" = TRUE; then
5723        enable_assert_always_abort=yes
5724    else
5725        enable_assert_always_abort=no
5726    fi
5728 if test "$enable_assert_always_abort" = "yes"; then
5729     ASSERT_ALWAYS_ABORT="TRUE"
5730     AC_MSG_RESULT([yes])
5731 else
5732     ASSERT_ALWAYS_ABORT="FALSE"
5733     AC_MSG_RESULT([no])
5735 AC_SUBST(ASSERT_ALWAYS_ABORT)
5737 # Determine whether to use ooenv for the instdir installation
5738 # ===================================================================
5739 if test $_os != "WINNT" -a $_os != "Darwin"; then
5740     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
5741     if test -z "$enable_ooenv"; then
5742         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5743             enable_ooenv=yes
5744         else
5745             enable_ooenv=no
5746         fi
5747     fi
5748     if test "$enable_ooenv" = "no"; then
5749         AC_MSG_RESULT([no])
5750     else
5751         ENABLE_OOENV="TRUE"
5752         AC_MSG_RESULT([yes])
5753     fi
5755 AC_SUBST(ENABLE_OOENV)
5757 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
5758     if test "$enable_qt5" = "no"; then
5759         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
5760     else
5761         enable_qt5=yes
5762     fi
5765 dnl ===================================================================
5766 dnl check for cups support
5767 dnl ===================================================================
5769 AC_MSG_CHECKING([whether to enable CUPS support])
5770 if test "$test_cups" = yes -a "$enable_cups" != no; then
5771     ENABLE_CUPS=TRUE
5772     AC_MSG_RESULT([yes])
5774     AC_MSG_CHECKING([whether cups support is present])
5775     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
5776     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
5777     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
5778         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
5779     fi
5780 else
5781     AC_MSG_RESULT([no])
5784 AC_SUBST(ENABLE_CUPS)
5786 # fontconfig checks
5787 if test "$using_freetype_fontconfig" = yes; then
5788     AC_MSG_CHECKING([which fontconfig to use])
5790 if test "$using_freetype_fontconfig" = yes -a "$test_system_fontconfig" != no; then
5791     AC_MSG_RESULT([external])
5792     PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.4.1])
5793     SYSTEM_FONTCONFIG=TRUE
5794     FilterLibs "${FONTCONFIG_LIBS}"
5795     FONTCONFIG_LIBS="${filteredlibs}"
5796 elif test "$using_freetype_fontconfig" = yes; then
5797     AC_MSG_RESULT([internal])
5798     BUILD_TYPE="$BUILD_TYPE FONTCONFIG"
5800 AC_SUBST(FONTCONFIG_CFLAGS)
5801 AC_SUBST(FONTCONFIG_LIBS)
5802 AC_SUBST([SYSTEM_FONTCONFIG])
5804 dnl whether to find & fetch external tarballs?
5805 dnl ===================================================================
5806 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
5807    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
5808        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
5809    else
5810        TARFILE_LOCATION="$LODE_HOME/ext_tar"
5811    fi
5813 if test -z "$TARFILE_LOCATION"; then
5814     if test -d "$SRC_ROOT/src" ; then
5815         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
5816         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
5817     fi
5818     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
5819 else
5820     AbsolutePath "$TARFILE_LOCATION"
5821     PathFormat "${absolute_path}"
5822     TARFILE_LOCATION="${formatted_path}"
5824 AC_SUBST(TARFILE_LOCATION)
5826 AC_MSG_CHECKING([whether we want to fetch tarballs])
5827 if test "$enable_fetch_external" != "no"; then
5828     if test "$with_all_tarballs" = "yes"; then
5829         AC_MSG_RESULT([yes, all of them])
5830         DO_FETCH_TARBALLS="ALL"
5831     else
5832         AC_MSG_RESULT([yes, if we use them])
5833         DO_FETCH_TARBALLS="TRUE"
5834     fi
5835 else
5836     AC_MSG_RESULT([no])
5837     DO_FETCH_TARBALLS=
5839 AC_SUBST(DO_FETCH_TARBALLS)
5841 dnl Test whether to include MySpell dictionaries
5842 dnl ===================================================================
5843 AC_MSG_CHECKING([whether to include MySpell dictionaries])
5844 if test "$with_myspell_dicts" = "yes"; then
5845     AC_MSG_RESULT([yes])
5846     WITH_MYSPELL_DICTS=TRUE
5847     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
5848     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
5849 else
5850     AC_MSG_RESULT([no])
5851     WITH_MYSPELL_DICTS=
5853 AC_SUBST(WITH_MYSPELL_DICTS)
5855 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
5856 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
5857     if test "$with_system_dicts" = yes; then
5858         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
5859     fi
5860     with_system_dicts=no
5863 AC_MSG_CHECKING([whether to use dicts from external paths])
5864 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
5865     AC_MSG_RESULT([yes])
5866     SYSTEM_DICTS=TRUE
5867     AC_MSG_CHECKING([for spelling dictionary directory])
5868     if test -n "$with_external_dict_dir"; then
5869         DICT_SYSTEM_DIR=file://$with_external_dict_dir
5870     else
5871         DICT_SYSTEM_DIR=file:///usr/share/hunspell
5872         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
5873             DICT_SYSTEM_DIR=file:///usr/share/myspell
5874         fi
5875     fi
5876     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
5877     AC_MSG_CHECKING([for hyphenation patterns directory])
5878     if test -n "$with_external_hyph_dir"; then
5879         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
5880     else
5881         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
5882     fi
5883     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
5884     AC_MSG_CHECKING([for thesaurus directory])
5885     if test -n "$with_external_thes_dir"; then
5886         THES_SYSTEM_DIR=file://$with_external_thes_dir
5887     else
5888         THES_SYSTEM_DIR=file:///usr/share/mythes
5889     fi
5890     AC_MSG_RESULT([$THES_SYSTEM_DIR])
5891 else
5892     AC_MSG_RESULT([no])
5893     SYSTEM_DICTS=
5895 AC_SUBST(SYSTEM_DICTS)
5896 AC_SUBST(DICT_SYSTEM_DIR)
5897 AC_SUBST(HYPH_SYSTEM_DIR)
5898 AC_SUBST(THES_SYSTEM_DIR)
5900 dnl ===================================================================
5901 dnl Precompiled headers.
5902 ENABLE_PCH=""
5903 AC_MSG_CHECKING([whether to enable pch feature])
5904 if test -z "$enable_pch"; then
5905     if test "$_os" = "WINNT"; then
5906         # Enabled by default on Windows.
5907         enable_pch=yes
5908     else
5909         enable_pch=no
5910     fi
5912 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
5913     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
5915 if test "$enable_pch" = "system"; then
5916     ENABLE_PCH="1"
5917     AC_MSG_RESULT([yes (system headers)])
5918 elif test "$enable_pch" = "base"; then
5919     ENABLE_PCH="2"
5920     AC_MSG_RESULT([yes (system and base headers)])
5921 elif test "$enable_pch" = "normal"; then
5922     ENABLE_PCH="3"
5923     AC_MSG_RESULT([yes (normal)])
5924 elif test "$enable_pch" = "full"; then
5925     ENABLE_PCH="4"
5926     AC_MSG_RESULT([yes (full)])
5927 elif test "$enable_pch" = "yes"; then
5928     # Pick a suitable default.
5929     if test "$GCC" = "yes"; then
5930         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
5931         # while making the PCHs larger and rebuilds more likely.
5932         ENABLE_PCH="2"
5933         AC_MSG_RESULT([yes (system and base headers)])
5934     else
5935         # With MSVC the highest level makes a significant difference,
5936         # and it was the default when there used to be no PCH levels.
5937         ENABLE_PCH="4"
5938         AC_MSG_RESULT([yes (full)])
5939     fi
5940 elif test "$enable_pch" = "no"; then
5941     AC_MSG_RESULT([no])
5942 else
5943     AC_MSG_ERROR([Unknown value for --enable-pch])
5945 AC_SUBST(ENABLE_PCH)
5946 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
5947 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
5948     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
5949     if test "$CCACHE_BIN" != "not found"; then
5950         AC_MSG_CHECKING([ccache version])
5951         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
5952         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
5953         AC_MSG_RESULT([$CCACHE_VERSION])
5954         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
5955         if test "$CCACHE_NUMVER" -gt "030701"; then
5956             AC_MSG_RESULT([yes])
5957         else
5958             AC_MSG_RESULT([no (not newer than 3.7.1)])
5959             CCACHE_DEPEND_MODE=
5960         fi
5961     fi
5964 PCH_INSTANTIATE_TEMPLATES=
5965 if test -n "$ENABLE_PCH"; then
5966     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
5967     save_CFLAGS=$CFLAGS
5968     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
5969     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
5970     CFLAGS=$save_CFLAGS
5971     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
5972         AC_MSG_RESULT(yes)
5973     else
5974         AC_MSG_RESULT(no)
5975     fi
5977 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
5979 BUILDING_PCH_WITH_OBJ=
5980 if test -n "$ENABLE_PCH"; then
5981     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
5982     save_CFLAGS=$CFLAGS
5983     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
5984     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
5985     CFLAGS=$save_CFLAGS
5986     if test -n "$BUILDING_PCH_WITH_OBJ"; then
5987         AC_MSG_RESULT(yes)
5988     else
5989         AC_MSG_RESULT(no)
5990     fi
5992 AC_SUBST(BUILDING_PCH_WITH_OBJ)
5994 PCH_CODEGEN=
5995 PCH_NO_CODEGEN=
5996 if test -n "$BUILDING_PCH_WITH_OBJ"; then
5997     AC_MSG_CHECKING([whether $CC supports -fpch-codegen])
5998     save_CFLAGS=$CFLAGS
5999     CFLAGS="$CFLAGS -Werror -fpch-codegen"
6000     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6001         [
6002         PCH_CODEGEN="-fpch-codegen"
6003         PCH_NO_CODEGEN="-fno-pch-codegen"
6004         ],[])
6005     CFLAGS=$save_CFLAGS
6006     if test -n "$PCH_CODEGEN"; then
6007         AC_MSG_RESULT(yes)
6008     else
6009         AC_MSG_RESULT(no)
6010     fi
6012 AC_SUBST(PCH_CODEGEN)
6013 AC_SUBST(PCH_NO_CODEGEN)
6014 PCH_DEBUGINFO=
6015 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6016     AC_MSG_CHECKING([whether $CC supports -fpch-debuginfo])
6017     save_CFLAGS=$CFLAGS
6018     CFLAGS="$CFLAGS -Werror -fpch-debuginfo"
6019     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="-fpch-debuginfo" ],[])
6020     CFLAGS=$save_CFLAGS
6021     if test -n "$PCH_DEBUGINFO"; then
6022         AC_MSG_RESULT(yes)
6023     else
6024         AC_MSG_RESULT(no)
6025     fi
6027 AC_SUBST(PCH_DEBUGINFO)
6029 TAB=`printf '\t'`
6031 AC_MSG_CHECKING([the GNU Make version])
6032 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6033 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6034 if test "$_make_longver" -ge "038200"; then
6035     AC_MSG_RESULT([$GNUMAKE $_make_version])
6037 elif test "$_make_longver" -ge "038100"; then
6038     if test "$build_os" = "cygwin"; then
6039         AC_MSG_ERROR([failed ($GNUMAKE version >= 3.82 needed])
6040     fi
6041     AC_MSG_RESULT([$GNUMAKE $_make_version])
6043     dnl ===================================================================
6044     dnl Search all the common names for sha1sum
6045     dnl ===================================================================
6046     AC_CHECK_PROGS(SHA1SUM, sha1sum sha1 shasum openssl)
6047     if test -z "$SHA1SUM"; then
6048         AC_MSG_ERROR([install the appropriate SHA-1 checksumming program for this OS])
6049     elif test "$SHA1SUM" = "openssl"; then
6050         SHA1SUM="openssl sha1"
6051     fi
6052     AC_MSG_CHECKING([for GNU Make bug 20033])
6053     TESTGMAKEBUG20033=`mktemp -d tmp.XXXXXX`
6054     $SED -e "s/<TAB>/$TAB/g" > $TESTGMAKEBUG20033/Makefile << EOF
6055 A := \$(wildcard *.a)
6057 .PHONY: all
6058 all: \$(A:.a=.b)
6059 <TAB>@echo survived bug20033.
6061 .PHONY: setup
6062 setup:
6063 <TAB>@touch 1.a 2.a 3.a 4.a 5.a 6.a
6065 define d1
6066 @echo lala \$(1)
6067 @sleep 1
6068 endef
6070 define d2
6071 @echo tyty \$(1)
6072 @sleep 1
6073 endef
6075 %.b : %.a
6076 <TAB>\$(eval CHECKSUM := \$(word 1,\$(shell cat \$^ | $SHA1SUM))) \$(if \$(wildcard \$(CACHEDIR)/\$(CHECKSUM)),\
6077 <TAB>\$(call d1,\$(CHECKSUM)),\
6078 <TAB>\$(call d2,\$(CHECKSUM)))
6080     if test -z "`(cd $TESTGMAKEBUG20033 && $GNUMAKE setup && $GNUMAKE -j)|grep survived`"; then
6081         no_parallelism_make="YES"
6082         AC_MSG_RESULT([yes, disable parallelism])
6083     else
6084         AC_MSG_RESULT([no, keep parallelism enabled])
6085     fi
6086     rm -rf $TESTGMAKEBUG20033
6087 else
6088     AC_MSG_ERROR([failed ($GNUMAKE version >= 3.81 needed])
6091 # find if gnumake support file function
6092 AC_MSG_CHECKING([whether GNU Make supports the 'file' function])
6093 TESTGMAKEFILEFUNC="`mktemp -d -t tst.XXXXXX`"
6094 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6095     TESTGMAKEFILEFUNC=`cygpath -m $TESTGMAKEFILEFUNC`
6097 $SED -e "s/<TAB>/$TAB/" > $TESTGMAKEFILEFUNC/Makefile << EOF
6098 \$(file >test.txt,Success )
6100 .PHONY: all
6101 all:
6102 <TAB>@cat test.txt
6105 $GNUMAKE -C $TESTGMAKEFILEFUNC 2>/dev/null 1>&2
6106 if test -f $TESTGMAKEFILEFUNC/test.txt; then
6107     HAVE_GNUMAKE_FILE_FUNC=TRUE
6108     AC_MSG_RESULT([yes])
6109 else
6110     AC_MSG_RESULT([no])
6112 rm -rf $TESTGMAKEFILEFUNC
6113 AC_SUBST(HAVE_GNUMAKE_FILE_FUNC)
6115 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6116 STALE_MAKE=
6117 if test "$_make_ver_check" = ""; then
6118    STALE_MAKE=TRUE
6121 HAVE_LD_HASH_STYLE=FALSE
6122 WITH_LINKER_HASH_STYLE=
6123 AC_MSG_CHECKING([for --hash-style gcc linker support])
6124 if test "$GCC" = "yes"; then
6125     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6126         hash_styles="gnu sysv"
6127     elif test "$with_linker_hash_style" = "no"; then
6128         hash_styles=
6129     else
6130         hash_styles="$with_linker_hash_style"
6131     fi
6133     for hash_style in $hash_styles; do
6134         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6135         hash_style_ldflags_save=$LDFLAGS
6136         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6138         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6139             [
6140 #include <stdio.h>
6141             ],[
6142 printf ("");
6143             ])],
6144             [
6145                   HAVE_LD_HASH_STYLE=TRUE
6146                   WITH_LINKER_HASH_STYLE=$hash_style
6147             ],
6148             [HAVE_LD_HASH_STYLE=FALSE],
6149             [HAVE_LD_HASH_STYLE=FALSE])
6150         LDFLAGS=$hash_style_ldflags_save
6151     done
6153     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6154         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6155     else
6156         AC_MSG_RESULT( no )
6157     fi
6158     LDFLAGS=$hash_style_ldflags_save
6159 else
6160     AC_MSG_RESULT( no )
6162 AC_SUBST(HAVE_LD_HASH_STYLE)
6163 AC_SUBST(WITH_LINKER_HASH_STYLE)
6165 dnl ===================================================================
6166 dnl Check whether there's a Perl version available.
6167 dnl ===================================================================
6168 if test -z "$with_perl_home"; then
6169     AC_PATH_PROG(PERL, perl)
6170 else
6171     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6172     _perl_path="$with_perl_home/bin/perl"
6173     if test -x "$_perl_path"; then
6174         PERL=$_perl_path
6175     else
6176         AC_MSG_ERROR([$_perl_path not found])
6177     fi
6180 dnl ===================================================================
6181 dnl Testing for Perl version 5 or greater.
6182 dnl $] is the Perl version variable, it is returned as an integer
6183 dnl ===================================================================
6184 if test "$PERL"; then
6185     AC_MSG_CHECKING([the Perl version])
6186     ${PERL} -e "exit($]);"
6187     _perl_version=$?
6188     if test "$_perl_version" -lt 5; then
6189         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6190     fi
6191     AC_MSG_RESULT([Perl $_perl_version])
6192 else
6193     AC_MSG_ERROR([Perl not found, install Perl 5])
6196 dnl ===================================================================
6197 dnl Testing for required Perl modules
6198 dnl ===================================================================
6200 AC_MSG_CHECKING([for required Perl modules])
6201 perl_use_string="use Cwd ; use Digest::MD5"
6202 if test "$_os" = "WINNT"; then
6203     if test -n "$PKGFORMAT"; then
6204         for i in $PKGFORMAT; do
6205             case "$i" in
6206             msi)
6207                 # for getting fonts versions to use in MSI
6208                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6209                 ;;
6210             esac
6211         done
6212     fi
6214 if test "$with_system_hsqldb" = "yes"; then
6215     perl_use_string="$perl_use_string ; use Archive::Zip"
6217 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6218     # OpenSSL needs that to build
6219     perl_use_string="$perl_use_string ; use FindBin"
6221 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6222     AC_MSG_RESULT([all modules found])
6223 else
6224     AC_MSG_RESULT([failed to find some modules])
6225     # Find out which modules are missing.
6226     for i in $perl_use_string; do
6227         if test "$i" != "use" -a "$i" != ";"; then
6228             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6229                 missing_perl_modules="$missing_perl_modules $i"
6230             fi
6231         fi
6232     done
6233     AC_MSG_ERROR([
6234     The missing Perl modules are: $missing_perl_modules
6235     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6238 dnl ===================================================================
6239 dnl Check for pkg-config
6240 dnl ===================================================================
6241 if test "$_os" != "WINNT"; then
6242     PKG_PROG_PKG_CONFIG
6245 if test "$_os" != "WINNT"; then
6247     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6248     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6249     # explicitly. Or put /path/to/compiler in PATH yourself.
6251     # Use wrappers for LTO
6252     if test "$ENABLE_LTO" = "TRUE" -a "$COM_IS_CLANG" != "TRUE"; then
6253         AC_CHECK_TOOL(AR,gcc-ar)
6254         AC_CHECK_TOOL(NM,gcc-nm)
6255         AC_CHECK_TOOL(RANLIB,gcc-ranlib)
6256     else
6257         AC_CHECK_TOOL(AR,ar)
6258         AC_CHECK_TOOL(NM,nm)
6259         AC_CHECK_TOOL(RANLIB,ranlib)
6260     fi
6261     AC_CHECK_TOOL(OBJDUMP,objdump)
6262     AC_CHECK_TOOL(READELF,readelf)
6263     AC_CHECK_TOOL(STRIP,strip)
6265 AC_SUBST(AR)
6266 AC_SUBST(LD)
6267 AC_SUBST(NM)
6268 AC_SUBST(OBJDUMP)
6269 AC_SUBST(PKG_CONFIG)
6270 AC_SUBST(PKG_CONFIG_PATH)
6271 AC_SUBST(PKG_CONFIG_LIBDIR)
6272 AC_SUBST(RANLIB)
6273 AC_SUBST(READELF)
6274 AC_SUBST(STRIP)
6276 dnl ===================================================================
6277 dnl pkg-config checks on macOS
6278 dnl ===================================================================
6280 if test $_os = Darwin; then
6281     AC_MSG_CHECKING([for bogus pkg-config])
6282     if test -n "$PKG_CONFIG"; then
6283         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6284             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6285         else
6286             if test "$enable_bogus_pkg_config" = "yes"; then
6287                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6288             else
6289                 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.])
6290             fi
6291         fi
6292     else
6293         AC_MSG_RESULT([no, good])
6294     fi
6297 find_csc()
6299     # Return value: $csctest
6301     unset csctest
6303     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client/InstallPath"
6304     if test -n "$regvalue"; then
6305         csctest=$regvalue
6306         return
6307     fi
6310 find_al()
6312     # Return value: $altest
6314     unset altest
6316     # We need this check to detect 4.6.1 or above.
6317     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6318         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools/InstallationFolder"
6319         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6320             altest=$regvalue
6321             return
6322         fi
6323     done
6325     for x in `ls /proc/registry32/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft\ SDKs/Windows`; do
6326         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools/InstallationFolder"
6327         if test -n "$regvalue" -a \( -f "$regvalue/al.exe" -o -f "$regvalue/bin/al.exe" \); then
6328             altest=$regvalue
6329             return
6330         fi
6331     done
6334 find_dotnetsdk46()
6336     unset frametest
6338     for ver in 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6339         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/KitsInstallationFolder"
6340         if test -n "$regvalue"; then
6341             frametest=$regvalue
6342             return
6343         fi
6344     done
6347 find_winsdk_version()
6349     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6350     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6352     unset winsdktest winsdkbinsubdir winsdklibsubdir
6354     case "$1" in
6355     8.0|8.0A)
6356         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot"
6357         if test -n "$regvalue"; then
6358             winsdktest=$regvalue
6359             winsdklibsubdir=win8
6360             return
6361         fi
6362         ;;
6363     8.1|8.1A)
6364         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots/KitsRoot81"
6365         if test -n "$regvalue"; then
6366             winsdktest=$regvalue
6367             winsdklibsubdir=winv6.3
6368             return
6369         fi
6370         ;;
6371     10.0)
6372         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/InstallationFolder"
6373         if test -n "$regvalue"; then
6374             winsdktest=$regvalue
6375             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}/ProductVersion"
6376             if test -n "$regvalue"; then
6377                 winsdkbinsubdir="$regvalue".0
6378                 winsdklibsubdir=$winsdkbinsubdir
6379                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6380                 local tmppath_unix=$(cygpath -u "$tmppath")
6381                 # test exist the SDK path
6382                 if test -d "$tmppath_unix"; then
6383                    # when path is convertible to a short path then path is okay
6384                    cygpath -d "$tmppath" >/dev/null 2>&1
6385                    if test $? -ne 0; then
6386                       AC_MSG_ERROR([Windows SDK doesn't have a 8.3 name, see NtfsDisable8dot3NameCreation])
6387                    fi
6388                 else
6389                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6390                 fi
6391             fi
6392             return
6393         fi
6394         ;;
6395     esac
6398 find_winsdk()
6400     # Return value: From find_winsdk_version
6402     unset winsdktest
6404     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6405         find_winsdk_version $ver
6406         if test -n "$winsdktest"; then
6407             return
6408         fi
6409     done
6412 find_msms()
6414     # Return value: $msmdir
6416     AC_MSG_CHECKING([for MSVC merge modules directory])
6417     local my_msm_files
6418     local my_msm_dir
6420     dnl Order my_msm_files in increasing order. Then check the directories returned
6421     dnl by ls in an inner loop; assuming they are also ordered in increasing order,
6422     dnl the result will be the highest MSM version found in the highest directory.
6424     case "$VCVER" in
6425         16.0 | 17.0)
6426         my_msm_files="Microsoft_VC141_CRT_x86.msm Microsoft_VC142_CRT_x86.msm ${my_msm_files}"
6427         ;;
6428     esac
6429     for f in $my_msm_files; do
6430         echo "$as_me:$LINENO: searching for $f" >&5
6431     done
6433     msmdir=
6434     case "$VCVER" in
6435     16.0 | 17.0)
6436         for f in ${my_msm_files}; do
6437             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6438                 my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6439                 echo "$as_me:$LINENO: looking for $my_msm_dir${f}])" >&5
6440                 if test -e "$my_msm_dir${f}"; then
6441                     msmdir=$my_msm_dir
6442                 fi
6443             done
6444         done
6445         ;;
6446     esac
6448     if test -n "$msmdir"; then
6449         msmdir=`cygpath -m "$msmdir"`
6450         AC_MSG_RESULT([$msmdir])
6451     else
6452         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6453             AC_MSG_FAILURE([not found])
6454         else
6455             AC_MSG_WARN([not found (check config.log)])
6456             add_warning "MSM none of ${my_msm_files} found"
6457         fi
6458     fi
6461 find_msvc_x64_dlls()
6463     # Return value: $msvcdllpath, $msvcdlls
6465     AC_MSG_CHECKING([for MSVC x64 DLL path])
6467     dnl Order crtver in increasing order. Then check the directories returned by
6468     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6469     dnl the result will be the highest CRT version found in the highest directory.
6471     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6472     case "$VCVER" in
6473     16.0 | 17.0)
6474         for crtver in 141 142 143; do
6475             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6476                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6477                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6478                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6479                 fi
6480             done
6481         done
6482         ;;
6483     esac
6484     AC_MSG_RESULT([$msvcdllpath])
6485     AC_MSG_CHECKING([for MSVC x64 DLLs])
6486     msvcdlls="msvcp140.dll vcruntime140.dll"
6487     for dll in $msvcdlls; do
6488         if ! test -f "$msvcdllpath/$dll"; then
6489             AC_MSG_FAILURE([missing $dll])
6490         fi
6491     done
6492     AC_MSG_RESULT([found all ($msvcdlls)])
6495 dnl =========================================
6496 dnl Check for the Windows  SDK.
6497 dnl =========================================
6498 if test "$_os" = "WINNT"; then
6499     AC_MSG_CHECKING([for Windows SDK])
6500     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6501         find_winsdk
6502         WINDOWS_SDK_HOME=$winsdktest
6504         # normalize if found
6505         if test -n "$WINDOWS_SDK_HOME"; then
6506             WINDOWS_SDK_HOME=`cygpath -d "$WINDOWS_SDK_HOME"`
6507             WINDOWS_SDK_HOME=`cygpath -u "$WINDOWS_SDK_HOME"`
6508         fi
6510         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6511     fi
6513     if test -n "$WINDOWS_SDK_HOME"; then
6514         # Remove a possible trailing backslash
6515         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6517         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6518              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6519              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6520             have_windows_sdk_headers=yes
6521         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6522              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6523              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6524             have_windows_sdk_headers=yes
6525         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6526              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6527              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6528             have_windows_sdk_headers=yes
6529         else
6530             have_windows_sdk_headers=no
6531         fi
6533         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6534             have_windows_sdk_libs=yes
6535         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6536             have_windows_sdk_libs=yes
6537         else
6538             have_windows_sdk_libs=no
6539         fi
6541         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6542             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6543 the  Windows SDK are installed.])
6544         fi
6545     fi
6547     if test -z "$WINDOWS_SDK_HOME"; then
6548         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6549     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6550         WINDOWS_SDK_VERSION=80
6551         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6552     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6553         WINDOWS_SDK_VERSION=81
6554         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6555     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6556         WINDOWS_SDK_VERSION=10
6557         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6558     else
6559         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6560     fi
6561     PathFormat "$WINDOWS_SDK_HOME"
6562     WINDOWS_SDK_HOME="$formatted_path"
6563     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6564     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6565         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6566         if test -d "$WINDOWS_SDK_HOME/include/um"; then
6567             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6568         elif test -d "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um"; then
6569             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6570         fi
6571     fi
6573     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6574     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6575     dnl but not in v8.0), so allow this to be overridden with a
6576     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6577     dnl and configuration error if no WiLangId.vbs is found would arguably be
6578     dnl better, but I do not know under which conditions exactly it is needed by
6579     dnl msiglobal.pm:
6580     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6581         WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6582         WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6583         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6584             WINDOWS_SDK_WILANGID="${WINDOWS_SDK_HOME}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6585             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6586         fi
6587         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6588             WINDOWS_SDK_WILANGID=$WINDOWS_SDK_HOME/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6589             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6590         fi
6591         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6592             WINDOWS_SDK_WILANGID=$(cygpath -sm "C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs")
6593             WINDOWS_SDK_WILANGID_unix=$(cygpath -u "$WINDOWS_SDK_WILANGID")
6594         fi
6595     fi
6596     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6597         if test -n "$with_package_format" -a "$with_package_format" != no; then
6598             for i in "$with_package_format"; do
6599                 if test "$i" = "msi"; then
6600                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6601                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6602                     fi
6603                 fi
6604             done
6605         fi
6606     fi
6608 AC_SUBST(WINDOWS_SDK_HOME)
6609 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6610 AC_SUBST(WINDOWS_SDK_VERSION)
6611 AC_SUBST(WINDOWS_SDK_WILANGID)
6613 if test "$build_os" = "cygwin"; then
6614     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6615     dnl dir, it also determines that dir's path w/o an arch segment if any,
6616     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6617     AC_MSG_CHECKING([for midl.exe])
6619     find_winsdk
6620     if test -n "$winsdkbinsubdir" \
6621         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6622     then
6623         MIDL_PATH=$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6624         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin/$winsdkbinsubdir
6625     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6626         MIDL_PATH=$winsdktest/Bin/$WIN_BUILD_ARCH
6627         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6628     elif test -f "$winsdktest/Bin/midl.exe"; then
6629         MIDL_PATH=$winsdktest/Bin
6630         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME/Bin
6631     fi
6632     if test ! -f "$MIDL_PATH/midl.exe"; then
6633         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6634     else
6635         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6636     fi
6638     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6639     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6641     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6642          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6643          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6644          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6645     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6646          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6647          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6648          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6649     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
6650          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
6651          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6652          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
6653     else
6654         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
6655     fi
6657     dnl Check csc.exe
6658     AC_MSG_CHECKING([for csc.exe])
6659     find_csc
6660     if test -f "$csctest/csc.exe"; then
6661         CSC_PATH="$csctest"
6662     fi
6663     if test ! -f "$CSC_PATH/csc.exe"; then
6664         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
6665     else
6666         AC_MSG_RESULT([$CSC_PATH/csc.exe])
6667     fi
6669     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
6671     dnl Check al.exe
6672     AC_MSG_CHECKING([for al.exe])
6673     find_winsdk
6674     if test -n "$winsdkbinsubdir" \
6675         -a -f "$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
6676     then
6677         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
6678     elif test -f "$winsdktest/Bin/$WIN_BUILD_ARCH/al.exe"; then
6679         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
6680     elif test -f "$winsdktest/Bin/al.exe"; then
6681         AL_PATH="$winsdktest/Bin"
6682     fi
6684     if test -z "$AL_PATH"; then
6685         find_al
6686         if test -f "$altest/bin/al.exe"; then
6687             AL_PATH="$altest/bin"
6688         elif test -f "$altest/al.exe"; then
6689             AL_PATH="$altest"
6690         fi
6691     fi
6692     if test ! -f "$AL_PATH/al.exe"; then
6693         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
6694     else
6695         AC_MSG_RESULT([$AL_PATH/al.exe])
6696     fi
6698     AL_PATH=`win_short_path_for_make "$AL_PATH"`
6700     dnl Check mscoree.lib / .NET Framework dir
6701     AC_MSG_CHECKING(.NET Framework)
6702     find_dotnetsdk46
6703     PathFormat "$frametest"
6704     frametest="$formatted_path"
6705     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6706         DOTNET_FRAMEWORK_HOME="$frametest"
6707     else
6708         find_winsdk
6709         if test -f "$winsdktest/lib/mscoree.lib" -o -f "$winsdktest/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
6710             DOTNET_FRAMEWORK_HOME="$winsdktest"
6711         fi
6712     fi
6713     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
6714         AC_MSG_ERROR([mscoree.lib not found])
6715     fi
6716     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
6718     PathFormat "$MIDL_PATH"
6719     MIDL_PATH="$formatted_path"
6721     PathFormat "$AL_PATH"
6722     AL_PATH="$formatted_path"
6724     PathFormat "$DOTNET_FRAMEWORK_HOME"
6725     DOTNET_FRAMEWORK_HOME="$formatted_path"
6727     PathFormat "$CSC_PATH"
6728     CSC_PATH="$formatted_path"
6731 dnl ===================================================================
6732 dnl Testing for C++ compiler and version...
6733 dnl ===================================================================
6735 if test "$_os" != "WINNT"; then
6736     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that
6737     save_CXXFLAGS=$CXXFLAGS
6738     AC_PROG_CXX
6739     CXXFLAGS=$save_CXXFLAGS
6740     if test -z "$CXX_BASE"; then
6741         CXX_BASE=`first_arg_basename "$CXX"`
6742     fi
6745 dnl check for GNU C++ compiler version
6746 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
6747     AC_MSG_CHECKING([the GNU C++ compiler version])
6749     _gpp_version=`$CXX -dumpversion`
6750     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
6752     if test "$_gpp_majmin" -lt "700"; then
6753         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
6754     else
6755         AC_MSG_RESULT([ok (g++ $_gpp_version)])
6756     fi
6758     dnl see https://code.google.com/p/android/issues/detail?id=41770
6759         glibcxx_threads=no
6760         AC_LANG_PUSH([C++])
6761         AC_REQUIRE_CPP
6762         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
6763         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
6764             #include <bits/c++config.h>]],[[
6765             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
6766             && !defined(_GLIBCXX__PTHREADS) \
6767             && !defined(_GLIBCXX_HAS_GTHREADS)
6768             choke me
6769             #endif
6770         ]])],[AC_MSG_RESULT([yes])
6771         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
6772         AC_LANG_POP([C++])
6773         if test $glibcxx_threads = yes; then
6774             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
6775         fi
6777 AC_SUBST(BOOST_CXXFLAGS)
6780 # prefx CXX with ccache if needed
6782 UNCACHED_CXX="$CXX"
6783 if test "$CCACHE" != ""; then
6784     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
6785     AC_LANG_PUSH([C++])
6786     save_CXXFLAGS=$CXXFLAGS
6787     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
6788     dnl an empty program will do, we're checking the compiler flags
6789     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
6790                       [use_ccache=yes], [use_ccache=no])
6791     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
6792         AC_MSG_RESULT([yes])
6793     else
6794         CXX="$CCACHE $CXX"
6795         CXX_BASE="ccache $CXX_BASE"
6796         AC_MSG_RESULT([no])
6797     fi
6798     CXXFLAGS=$save_CXXFLAGS
6799     AC_LANG_POP([C++])
6802 dnl ===================================================================
6803 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
6804 dnl ===================================================================
6806 if test "$_os" != "WINNT"; then
6807     AC_PROG_CXXCPP
6809     dnl Check whether there's a C pre-processor.
6810     AC_PROG_CPP
6814 dnl ===================================================================
6815 dnl Find integral type sizes and alignments
6816 dnl ===================================================================
6818 if test "$_os" != "WINNT"; then
6820     AC_CHECK_SIZEOF(long)
6821     AC_CHECK_SIZEOF(short)
6822     AC_CHECK_SIZEOF(int)
6823     AC_CHECK_SIZEOF(long long)
6824     AC_CHECK_SIZEOF(double)
6825     AC_CHECK_SIZEOF(void*)
6827     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
6828     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
6829     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
6830     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
6831     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
6833     dnl Allow build without AC_CHECK_ALIGNOF, grrr
6834     m4_pattern_allow([AC_CHECK_ALIGNOF])
6835     m4_ifdef([AC_CHECK_ALIGNOF],
6836         [
6837             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
6838             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
6839             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
6840             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
6841         ],
6842         [
6843             case "$_os-$host_cpu" in
6844             Linux-i686)
6845                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6846                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6847                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
6848                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
6849                 ;;
6850             Linux-x86_64)
6851                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
6852                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
6853                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
6854                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
6855                 ;;
6856             *)
6857                 if test -z "$ac_cv_alignof_short" -o \
6858                         -z "$ac_cv_alignof_int" -o \
6859                         -z "$ac_cv_alignof_long" -o \
6860                         -z "$ac_cv_alignof_double"; then
6861                    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.])
6862                 fi
6863                 ;;
6864             esac
6865         ])
6867     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
6868     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
6869     if test $ac_cv_sizeof_long -eq 8; then
6870         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
6871     elif test $ac_cv_sizeof_double -eq 8; then
6872         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
6873     else
6874         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
6875     fi
6877     dnl Check for large file support
6878     AC_SYS_LARGEFILE
6879     if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
6880         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
6881     fi
6882     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
6883         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
6884     fi
6885 else
6886     # Hardcode for MSVC
6887     SAL_TYPES_SIZEOFSHORT=2
6888     SAL_TYPES_SIZEOFINT=4
6889     SAL_TYPES_SIZEOFLONG=4
6890     SAL_TYPES_SIZEOFLONGLONG=8
6891     if test $WIN_HOST_BITS -eq 32; then
6892         SAL_TYPES_SIZEOFPOINTER=4
6893     else
6894         SAL_TYPES_SIZEOFPOINTER=8
6895     fi
6896     SAL_TYPES_ALIGNMENT2=2
6897     SAL_TYPES_ALIGNMENT4=4
6898     SAL_TYPES_ALIGNMENT8=8
6899     LFS_CFLAGS=''
6901 AC_SUBST(LFS_CFLAGS)
6903 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
6904 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
6905 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
6906 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
6907 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
6908 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
6909 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
6910 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
6912 dnl ===================================================================
6913 dnl Check whether to enable runtime optimizations
6914 dnl ===================================================================
6915 ENABLE_RUNTIME_OPTIMIZATIONS=
6916 AC_MSG_CHECKING([whether to enable runtime optimizations])
6917 if test -z "$enable_runtime_optimizations"; then
6918     for i in $CC; do
6919         case $i in
6920         -fsanitize=*)
6921             enable_runtime_optimizations=no
6922             break
6923             ;;
6924         esac
6925     done
6927 if test "$enable_runtime_optimizations" != no; then
6928     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
6929     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
6930     AC_MSG_RESULT([yes])
6931 else
6932     AC_MSG_RESULT([no])
6934 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
6936 dnl ===================================================================
6937 dnl Check if valgrind headers are available
6938 dnl ===================================================================
6939 ENABLE_VALGRIND=
6940 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
6941     prev_cppflags=$CPPFLAGS
6942     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
6943     # or where does it come from?
6944     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
6945     AC_CHECK_HEADER([valgrind/valgrind.h],
6946         [ENABLE_VALGRIND=TRUE])
6947     CPPFLAGS=$prev_cppflags
6949 AC_SUBST([ENABLE_VALGRIND])
6950 if test -z "$ENABLE_VALGRIND"; then
6951     if test "$with_valgrind" = yes; then
6952         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
6953     fi
6954     VALGRIND_CFLAGS=
6956 AC_SUBST([VALGRIND_CFLAGS])
6959 dnl ===================================================================
6960 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
6961 dnl ===================================================================
6963 # We need at least the sys/sdt.h include header.
6964 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
6965 if test "$SDT_H_FOUND" = "TRUE"; then
6966     # Found sys/sdt.h header, now make sure the c++ compiler works.
6967     # Old g++ versions had problems with probes in constructors/destructors.
6968     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
6969     AC_LANG_PUSH([C++])
6970     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
6971     #include <sys/sdt.h>
6972     class ProbeClass
6973     {
6974     private:
6975       int& ref;
6976       const char *name;
6978     public:
6979       ProbeClass(int& v, const char *n) : ref(v), name(n)
6980       {
6981         DTRACE_PROBE2(_test_, cons, name, ref);
6982       }
6984       void method(int min)
6985       {
6986         DTRACE_PROBE3(_test_, meth, name, ref, min);
6987         ref -= min;
6988       }
6990       ~ProbeClass()
6991       {
6992         DTRACE_PROBE2(_test_, dest, name, ref);
6993       }
6994     };
6995     ]],[[
6996     int i = 64;
6997     DTRACE_PROBE1(_test_, call, i);
6998     ProbeClass inst = ProbeClass(i, "call");
6999     inst.method(24);
7000     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7001           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7002     AC_LANG_POP([C++])
7004 AC_CONFIG_HEADERS([config_host/config_probes.h])
7006 dnl ===================================================================
7007 dnl GCC features
7008 dnl ===================================================================
7009 HAVE_GCC_STACK_CLASH_PROTECTION=
7010 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7011     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7012     save_CFLAGS=$CFLAGS
7013     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7014     AC_LINK_IFELSE(
7015         [AC_LANG_PROGRAM(, [[return 0;]])],
7016         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE],
7017         [AC_MSG_RESULT([no])])
7018     CFLAGS=$save_CFLAGS
7020     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7021     save_CFLAGS=$CFLAGS
7022     CFLAGS="$CFLAGS -Werror -mno-avx"
7023     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7024     CFLAGS=$save_CFLAGS
7025     if test "$HAVE_GCC_AVX" = "TRUE"; then
7026         AC_MSG_RESULT([yes])
7027     else
7028         AC_MSG_RESULT([no])
7029     fi
7031     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7032     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7033     int v = 0;
7034     if (__sync_add_and_fetch(&v, 1) != 1 ||
7035         __sync_sub_and_fetch(&v, 1) != 0)
7036         return 1;
7037     __sync_synchronize();
7038     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7039         v != 1)
7040         return 1;
7041     return 0;
7042 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7043     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7044         AC_MSG_RESULT([yes])
7045         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7046     else
7047         AC_MSG_RESULT([no])
7048     fi
7050     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7051     AC_LANG_PUSH([C++])
7052     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7053             #include <cstddef>
7054             #include <cxxabi.h>
7055             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7056         ])], [
7057             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7058             AC_MSG_RESULT([yes])
7059         ], [AC_MSG_RESULT([no])])
7060     AC_LANG_POP([C++])
7062     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7063     AC_LANG_PUSH([C++])
7064     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7065             #include <cstddef>
7066             #include <cxxabi.h>
7067             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7068         ])], [
7069             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7070             AC_MSG_RESULT([yes])
7071         ], [AC_MSG_RESULT([no])])
7072     AC_LANG_POP([C++])
7074     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7075     AC_LANG_PUSH([C++])
7076     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7077             #include <cxxabi.h>
7078             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7079         ])], [
7080             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7081             AC_MSG_RESULT([yes])
7082         ], [AC_MSG_RESULT([no])])
7083     AC_LANG_POP([C++])
7085     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7086     AC_LANG_PUSH([C++])
7087     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7088             #include <cstddef>
7089             #include <cxxabi.h>
7090             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7091         ])], [
7092             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7093             AC_MSG_RESULT([yes])
7094         ], [AC_MSG_RESULT([no])])
7095     AC_LANG_POP([C++])
7097     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7098     AC_LANG_PUSH([C++])
7099     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7100             #include <cstddef>
7101             #include <cxxabi.h>
7102             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7103         ])], [
7104             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7105             AC_MSG_RESULT([yes])
7106         ], [AC_MSG_RESULT([no])])
7107     AC_LANG_POP([C++])
7109     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7110     AC_LANG_PUSH([C++])
7111     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7112             #include <cxxabi.h>
7113             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7114         ])], [
7115             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7116             AC_MSG_RESULT([yes])
7117         ], [AC_MSG_RESULT([no])])
7118     AC_LANG_POP([C++])
7120     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7121     AC_LANG_PUSH([C++])
7122     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7123             #include <cxxabi.h>
7124             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7125         ])], [
7126             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7127             AC_MSG_RESULT([yes])
7128         ], [AC_MSG_RESULT([no])])
7129     AC_LANG_POP([C++])
7131     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7132     AC_LANG_PUSH([C++])
7133     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7134             #include <cxxabi.h>
7135             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7136         ])], [
7137             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7138             AC_MSG_RESULT([yes])
7139         ], [AC_MSG_RESULT([no])])
7140     AC_LANG_POP([C++])
7142     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7143     AC_LANG_PUSH([C++])
7144     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7145             #include <cstddef>
7146             #include <cxxabi.h>
7147             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7148         ])], [
7149             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7150             AC_MSG_RESULT([yes])
7151         ], [AC_MSG_RESULT([no])])
7152     AC_LANG_POP([C++])
7154     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7155     AC_LANG_PUSH([C++])
7156     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7157             #include <cstddef>
7158             #include <cxxabi.h>
7159             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7160         ])], [
7161             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7162             AC_MSG_RESULT([yes])
7163         ], [AC_MSG_RESULT([no])])
7164     AC_LANG_POP([C++])
7167 AC_SUBST(HAVE_GCC_AVX)
7168 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7169 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7171 dnl ===================================================================
7172 dnl Identify the C++ library
7173 dnl ===================================================================
7175 AC_MSG_CHECKING([what the C++ library is])
7176 AC_LANG_PUSH([C++])
7177 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7178 #include <utility>
7179 #ifndef __GLIBCXX__
7180 foo bar
7181 #endif
7182 ]])],
7183     [CPP_LIBRARY=GLIBCXX
7184      cpp_library_name="GNU libstdc++"
7185     ],
7186     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7187 #include <utility>
7188 #ifndef _LIBCPP_VERSION
7189 foo bar
7190 #endif
7191 ]])],
7192     [CPP_LIBRARY=LIBCPP
7193      cpp_library_name="LLVM libc++"
7194      AC_DEFINE([HAVE_LIBCXX])
7195     ],
7196     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7197 #include <utility>
7198 #ifndef _MSC_VER
7199 foo bar
7200 #endif
7201 ]])],
7202     [CPP_LIBRARY=MSVCRT
7203      cpp_library_name="Microsoft"
7204     ],
7205     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7206 AC_MSG_RESULT([$cpp_library_name])
7207 AC_LANG_POP([C++])
7209 dnl ===================================================================
7210 dnl Check for gperf
7211 dnl ===================================================================
7212 AC_PATH_PROG(GPERF, gperf)
7213 if test -z "$GPERF"; then
7214     AC_MSG_ERROR([gperf not found but needed. Install it.])
7216 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7217     GPERF=`cygpath -m $GPERF`
7219 AC_MSG_CHECKING([whether gperf is new enough])
7220 my_gperf_ver1=$($GPERF --version | head -n 1)
7221 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7222 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7223 if test "$my_gperf_ver3" -ge 301; then
7224     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7225 else
7226     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7228 AC_SUBST(GPERF)
7230 dnl ===================================================================
7231 dnl Check for system libcmis
7232 dnl ===================================================================
7233 # libcmis requires curl and we can't build curl for iOS
7234 if test "$test_cmis" = "yes" -a "$enable_cmis" = "yes"; then
7235     libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.5 >= 0.5.2])
7236     ENABLE_LIBCMIS=TRUE
7237 else
7238     ENABLE_LIBCMIS=
7240 AC_SUBST(ENABLE_LIBCMIS)
7242 dnl ===================================================================
7243 dnl C++11
7244 dnl ===================================================================
7246 AC_MSG_CHECKING([whether $CXX_BASE supports C++17])
7247 CXXFLAGS_CXX11=
7248 if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7249     if test "$with_latest_c__" = yes; then
7250         CXXFLAGS_CXX11=-std:c++latest
7251     else
7252         CXXFLAGS_CXX11=-std:c++17
7253     fi
7254     CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus"
7255 elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7256     my_flags='-std=c++17 -std=c++1z'
7257     if test "$with_latest_c__" = yes; then
7258         my_flags="-std=c++23 -std=c++2b -std=c++20 -std=c++2a $my_flags"
7259     fi
7260     for flag in $my_flags; do
7261         if test "$COM" = MSC; then
7262             flag="-Xclang $flag"
7263         fi
7264         save_CXXFLAGS=$CXXFLAGS
7265         CXXFLAGS="$CXXFLAGS $flag -Werror"
7266         if test "$SYSTEM_LIBCMIS" = TRUE; then
7267             CXXFLAGS="$CXXFLAGS -DSYSTEM_LIBCMIS $LIBCMIS_CFLAGS"
7268         fi
7269         AC_LANG_PUSH([C++])
7270         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7271             #include <algorithm>
7272             #include <functional>
7273             #include <vector>
7275             #if defined SYSTEM_LIBCMIS
7276             // See ucb/source/ucp/cmis/auth_provider.hxx:
7277             #if !defined __clang__
7278             #pragma GCC diagnostic push
7279             #pragma GCC diagnostic ignored "-Wdeprecated"
7280             #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
7281             #endif
7282             #include <libcmis/libcmis.hxx>
7283             #if !defined __clang__
7284             #pragma GCC diagnostic pop
7285             #endif
7286             #endif
7288             void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7289                 std::sort(v.begin(), v.end(), fn);
7290             }
7291             ]])],[CXXFLAGS_CXX11=$flag])
7292         AC_LANG_POP([C++])
7293         CXXFLAGS=$save_CXXFLAGS
7294         if test -n "$CXXFLAGS_CXX11"; then
7295             break
7296         fi
7297     done
7299 if test -n "$CXXFLAGS_CXX11"; then
7300     AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7301 else
7302     AC_MSG_ERROR(no)
7304 AC_SUBST(CXXFLAGS_CXX11)
7306 if test "$GCC" = "yes"; then
7307     save_CXXFLAGS=$CXXFLAGS
7308     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7309     CHECK_L_ATOMIC
7310     CXXFLAGS=$save_CXXFLAGS
7311     AC_SUBST(ATOMIC_LIB)
7314 dnl Test for temporarily incompatible libstdc++ 4.7.{0,1}, where
7315 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=179528> introduced
7316 dnl an additional member _M_size into C++11 std::list towards 4.7.0 and
7317 dnl <https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=189186> removed it
7318 dnl again towards 4.7.2:
7319 if test $CPP_LIBRARY = GLIBCXX; then
7320     AC_MSG_CHECKING([whether using C++11 causes libstdc++ 4.7.0/4.7.1 ABI breakage])
7321     AC_LANG_PUSH([C++])
7322     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7323 #include <list>
7324 #if !defined __GLIBCXX__ || (__GLIBCXX__ != 20120322 && __GLIBCXX__ != 20120614)
7325     // according to <https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>:
7326     //   GCC 4.7.0: 20120322
7327     //   GCC 4.7.1: 20120614
7328     // and using a range check is not possible as the mapping between
7329     // __GLIBCXX__ values and GCC versions is not monotonic
7330 /* ok */
7331 #else
7332 abi broken
7333 #endif
7334         ]])], [AC_MSG_RESULT(no, ok)],
7335         [AC_MSG_ERROR(yes)])
7336     AC_LANG_POP([C++])
7339 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7340 save_CXXFLAGS=$CXXFLAGS
7341 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7342 AC_LANG_PUSH([C++])
7344 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7345 #include <stddef.h>
7347 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7349 namespace
7351         struct b
7352         {
7353                 int i;
7354                 int j;
7355         };
7357 ]], [[
7358 struct a
7360         int i;
7361         int j;
7363 a thinga[]={{0,0}, {1,1}};
7364 b thingb[]={{0,0}, {1,1}};
7365 size_t i = sizeof(sal_n_array_size(thinga));
7366 size_t j = sizeof(sal_n_array_size(thingb));
7367 return !(i != 0 && j != 0);
7369     ], [ AC_MSG_RESULT(yes) ],
7370     [ AC_MSG_ERROR(no)])
7371 AC_LANG_POP([C++])
7372 CXXFLAGS=$save_CXXFLAGS
7374 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7375 if test "$GCC" = yes; then
7376     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7377     AC_LANG_PUSH([C++])
7378     save_CXXFLAGS=$CXXFLAGS
7379     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7380     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7381     CXXFLAGS=$save_CXXFLAGS
7382     AC_LANG_POP([C++])
7383     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7384         AC_MSG_RESULT([yes])
7385     else
7386         AC_MSG_RESULT([no])
7387     fi
7389 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7391 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
7392 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
7393 dnl from consteval constructor initializing const variable",
7394 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
7395 dnl expression' with consteval constructor", or <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
7396 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
7397 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'":
7398 AC_LANG_PUSH([C++])
7399 save_CXXFLAGS=$CXXFLAGS
7400 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7401 AC_RUN_IFELSE([AC_LANG_PROGRAM([
7402         struct S {
7403             consteval S() { i = 1; }
7404             int i = 0;
7405         };
7406         S const s;
7408         struct S1 { consteval S1(int) {} };
7409         struct S2 {
7410             S1 x;
7411             S2(): x(0) {}
7412         };
7414         struct S3 {
7415             consteval S3() {}
7416             union {
7417                 int a;
7418                 unsigned b = 0;
7419             };
7420         };
7421         void f() { S3(); }
7422     ], [
7423         return (s.i == 1) ? 0 : 1;
7424     ])], [
7425         AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
7426         AC_MSG_RESULT([yes])
7427     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
7428 CXXFLAGS=$save_CXXFLAGS
7429 AC_LANG_POP([C++])
7431 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7432 AC_LANG_PUSH([C++])
7433 save_CXXFLAGS=$CXXFLAGS
7434 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7435 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7436         #include <algorithm>
7437         #include <initializer_list>
7438         #include <vector>
7439         template<typename T> class S {
7440         private:
7441             std::vector<T> v_;
7442         public:
7443             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7444         };
7445         constinit S<int> s{3, 2, 1};
7446     ])], [
7447         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7448         AC_MSG_RESULT([yes])
7449     ], [AC_MSG_RESULT([no])])
7450 CXXFLAGS=$save_CXXFLAGS
7451 AC_LANG_POP([C++])
7453 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a <span> with unsigned size_type])
7454 AC_LANG_PUSH([C++])
7455 save_CXXFLAGS=$CXXFLAGS
7456 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7457 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7458         #include <span>
7459         #include <type_traits>
7460         // Don't check size_type directly, as it was called index_type before P1872R0:
7461         void f(std::span<int> s) { static_assert(std::is_unsigned_v<decltype(s.size())>); };
7462     ])], [
7463         AC_DEFINE([HAVE_CPP_SPAN],[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 implements C++ DR P1155R3])
7470 AC_LANG_PUSH([C++])
7471 save_CXXFLAGS=$CXXFLAGS
7472 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7473 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7474         struct S1 { S1(S1 &&); };
7475         struct S2: S1 {};
7476         S1 f(S2 s) { return s; }
7477     ])], [
7478         AC_DEFINE([HAVE_P1155R3],[1])
7479         AC_MSG_RESULT([yes])
7480     ], [AC_MSG_RESULT([no])])
7481 CXXFLAGS=$save_CXXFLAGS
7482 AC_LANG_POP([C++])
7484 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7485 dnl which is included in -Wextra anyway):
7486 HAVE_WDEPRECATED_COPY_DTOR=
7487 if test "$GCC" = yes; then
7488     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7489     AC_LANG_PUSH([C++])
7490     save_CXXFLAGS=$CXXFLAGS
7491     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7492     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7493             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7494             AC_MSG_RESULT([yes])
7495         ], [AC_MSG_RESULT([no])])
7496     CXXFLAGS=$save_CXXFLAGS
7497     AC_LANG_POP([C++])
7499 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7501 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7502 dnl uninitialized warning for code like
7504 dnl   OString f();
7505 dnl   boost::optional<OString> * g(bool b) {
7506 dnl       boost::optional<OString> o;
7507 dnl       if (b) o = f();
7508 dnl       return new boost::optional<OString>(o);
7509 dnl   }
7511 dnl (as is e.g. present, in a slightly more elaborate form, in
7512 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7513 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7514 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7515 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7516     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7517     AC_LANG_PUSH([C++])
7518     save_CXXFLAGS=$CXXFLAGS
7519     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7520     if test "$ENABLE_OPTIMIZED" = TRUE; then
7521         CXXFLAGS="$CXXFLAGS -O2"
7522     else
7523         CXXFLAGS="$CXXFLAGS -O0"
7524     fi
7525     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7526             #include <new>
7527             void f1(int);
7528             struct S1 {
7529                 ~S1() { f1(n); }
7530                 int n = 0;
7531             };
7532             struct S2 {
7533                 S2() {}
7534                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7535                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7536                 void set(S1 s) {
7537                     new (stg) S1(s);
7538                     init = true;
7539                 }
7540                 bool init = false;
7541                 char stg[sizeof (S1)];
7542             } ;
7543             S1 f2();
7544             S2 * f3(bool b) {
7545                 S2 o;
7546                 if (b) o.set(f2());
7547                 return new S2(o);
7548             }
7549         ]])], [AC_MSG_RESULT([no])], [
7550             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7551             AC_MSG_RESULT([yes])
7552         ])
7553     CXXFLAGS=$save_CXXFLAGS
7554     AC_LANG_POP([C++])
7556 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7558 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7559 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7560 dnl hits us e.g. with GCC 10 and --enable-optimized at
7562 dnl   In file included from include/rtl/string.hxx:49,
7563 dnl                    from include/rtl/ustring.hxx:43,
7564 dnl                    from include/osl/file.hxx:35,
7565 dnl                    from include/codemaker/global.hxx:28,
7566 dnl                    from include/codemaker/options.hxx:23,
7567 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7568 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7569 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,
7570 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,
7571 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,
7572 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7573 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7574 dnl      78 |         memcpy( buffer, data, length );
7575 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7576 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7577 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7578     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7579     AC_LANG_PUSH([C++])
7580     save_CXXFLAGS=$CXXFLAGS
7581     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7582     if test "$ENABLE_OPTIMIZED" = TRUE; then
7583         CXXFLAGS="$CXXFLAGS -O2"
7584     else
7585         CXXFLAGS="$CXXFLAGS -O0"
7586     fi
7587     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7588     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7589             void fill(char const * begin, char const * end, char c);
7590             struct q {
7591                 char ids[4];
7592                 char username[6];
7593             };
7594             void test(q & c) {
7595                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
7596                 __builtin_strncpy(c.username, "root", sizeof(c.username));
7597             }
7598         ]])], [AC_MSG_RESULT([no])], [
7599             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
7600             AC_MSG_RESULT([yes])
7601         ])
7602     CXXFLAGS=$save_CXXFLAGS
7603     AC_LANG_POP([C++])
7605 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
7607 HAVE_DLLEXPORTINLINES=
7608 if test "$_os" = "WINNT"; then
7609     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
7610     AC_LANG_PUSH([C++])
7611     save_CXXFLAGS=$CXXFLAGS
7612     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
7613     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7614             HAVE_DLLEXPORTINLINES=TRUE
7615             AC_MSG_RESULT([yes])
7616         ], [AC_MSG_RESULT([no])])
7617     CXXFLAGS=$save_CXXFLAGS
7618     AC_LANG_POP([C++])
7620 AC_SUBST([HAVE_DLLEXPORTINLINES])
7622 dnl ===================================================================
7623 dnl CPU Intrinsics support - SSE, AVX
7624 dnl ===================================================================
7626 CXXFLAGS_INTRINSICS_SSE2=
7627 CXXFLAGS_INTRINSICS_SSSE3=
7628 CXXFLAGS_INTRINSICS_SSE41=
7629 CXXFLAGS_INTRINSICS_SSE42=
7630 CXXFLAGS_INTRINSICS_AVX=
7631 CXXFLAGS_INTRINSICS_AVX2=
7632 CXXFLAGS_INTRINSICS_AVX512=
7633 CXXFLAGS_INTRINSICS_AVX512F=
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_avx512f=-mavx512f
7647     flag_f16c=-mf16c
7648     flag_fma=-mfma
7649 else
7650     # https://docs.microsoft.com/en-us/cpp/build/reference/arch-x86
7651     # MSVC seems to differentiate only between SSE and SSE2, where in fact
7652     # SSE2 seems to be SSE2+.
7653     # Even if -arch:SSE2 is the default, set it explicitly, so that the variable
7654     # is not empty (and can be tested in gbuild).
7655     flag_sse2=-arch:SSE2
7656     flag_ssse3=-arch:SSE2
7657     flag_sse41=-arch:SSE2
7658     flag_sse42=-arch:SSE2
7659     flag_avx=-arch:AVX
7660     flag_avx2=-arch:AVX2
7661     flag_avx512=-arch:AVX512
7662     flag_avx512f=-arch:AVX512
7663     # These are part of -arch:AVX2
7664     flag_f16c=-arch:AVX2
7665     flag_fma=-arch:AVX2
7668 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
7669 AC_LANG_PUSH([C++])
7670 save_CXXFLAGS=$CXXFLAGS
7671 CXXFLAGS="$CXXFLAGS $flag_sse2"
7672 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7673     #include <emmintrin.h>
7674     int main () {
7675         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7676         c = _mm_xor_si128 (a, b);
7677         return 0;
7678     }
7679     ])],
7680     [can_compile_sse2=yes],
7681     [can_compile_sse2=no])
7682 AC_LANG_POP([C++])
7683 CXXFLAGS=$save_CXXFLAGS
7684 AC_MSG_RESULT([${can_compile_sse2}])
7685 if test "${can_compile_sse2}" = "yes" ; then
7686     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
7689 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
7690 AC_LANG_PUSH([C++])
7691 save_CXXFLAGS=$CXXFLAGS
7692 CXXFLAGS="$CXXFLAGS $flag_ssse3"
7693 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7694     #include <tmmintrin.h>
7695     int main () {
7696         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7697         c = _mm_maddubs_epi16 (a, b);
7698         return 0;
7699     }
7700     ])],
7701     [can_compile_ssse3=yes],
7702     [can_compile_ssse3=no])
7703 AC_LANG_POP([C++])
7704 CXXFLAGS=$save_CXXFLAGS
7705 AC_MSG_RESULT([${can_compile_ssse3}])
7706 if test "${can_compile_ssse3}" = "yes" ; then
7707     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
7710 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
7711 AC_LANG_PUSH([C++])
7712 save_CXXFLAGS=$CXXFLAGS
7713 CXXFLAGS="$CXXFLAGS $flag_sse41"
7714 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7715     #include <smmintrin.h>
7716     int main () {
7717         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7718         c = _mm_cmpeq_epi64 (a, b);
7719         return 0;
7720     }
7721     ])],
7722     [can_compile_sse41=yes],
7723     [can_compile_sse41=no])
7724 AC_LANG_POP([C++])
7725 CXXFLAGS=$save_CXXFLAGS
7726 AC_MSG_RESULT([${can_compile_sse41}])
7727 if test "${can_compile_sse41}" = "yes" ; then
7728     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
7731 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
7732 AC_LANG_PUSH([C++])
7733 save_CXXFLAGS=$CXXFLAGS
7734 CXXFLAGS="$CXXFLAGS $flag_sse42"
7735 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7736     #include <nmmintrin.h>
7737     int main () {
7738         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
7739         c = _mm_cmpgt_epi64 (a, b);
7740         return 0;
7741     }
7742     ])],
7743     [can_compile_sse42=yes],
7744     [can_compile_sse42=no])
7745 AC_LANG_POP([C++])
7746 CXXFLAGS=$save_CXXFLAGS
7747 AC_MSG_RESULT([${can_compile_sse42}])
7748 if test "${can_compile_sse42}" = "yes" ; then
7749     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
7752 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
7753 AC_LANG_PUSH([C++])
7754 save_CXXFLAGS=$CXXFLAGS
7755 CXXFLAGS="$CXXFLAGS $flag_avx"
7756 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7757     #include <immintrin.h>
7758     int main () {
7759         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
7760         c = _mm256_xor_ps(a, b);
7761         return 0;
7762     }
7763     ])],
7764     [can_compile_avx=yes],
7765     [can_compile_avx=no])
7766 AC_LANG_POP([C++])
7767 CXXFLAGS=$save_CXXFLAGS
7768 AC_MSG_RESULT([${can_compile_avx}])
7769 if test "${can_compile_avx}" = "yes" ; then
7770     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
7773 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
7774 AC_LANG_PUSH([C++])
7775 save_CXXFLAGS=$CXXFLAGS
7776 CXXFLAGS="$CXXFLAGS $flag_avx2"
7777 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7778     #include <immintrin.h>
7779     int main () {
7780         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
7781         c = _mm256_maddubs_epi16(a, b);
7782         return 0;
7783     }
7784     ])],
7785     [can_compile_avx2=yes],
7786     [can_compile_avx2=no])
7787 AC_LANG_POP([C++])
7788 CXXFLAGS=$save_CXXFLAGS
7789 AC_MSG_RESULT([${can_compile_avx2}])
7790 if test "${can_compile_avx2}" = "yes" ; then
7791     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
7794 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
7795 AC_LANG_PUSH([C++])
7796 save_CXXFLAGS=$CXXFLAGS
7797 CXXFLAGS="$CXXFLAGS $flag_avx512"
7798 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7799     #include <immintrin.h>
7800     int main () {
7801         __m512i a = _mm512_loadu_si512(0);
7802         return 0;
7803     }
7804     ])],
7805     [can_compile_avx512=yes],
7806     [can_compile_avx512=no])
7807 AC_LANG_POP([C++])
7808 CXXFLAGS=$save_CXXFLAGS
7809 AC_MSG_RESULT([${can_compile_avx512}])
7810 if test "${can_compile_avx512}" = "yes" ; then
7811     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
7812     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
7815 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
7816 AC_LANG_PUSH([C++])
7817 save_CXXFLAGS=$CXXFLAGS
7818 CXXFLAGS="$CXXFLAGS $flag_f16c"
7819 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7820     #include <immintrin.h>
7821     int main () {
7822         __m128i a = _mm_set1_epi32 (0);
7823         __m128 c;
7824         c = _mm_cvtph_ps(a);
7825         return 0;
7826     }
7827     ])],
7828     [can_compile_f16c=yes],
7829     [can_compile_f16c=no])
7830 AC_LANG_POP([C++])
7831 CXXFLAGS=$save_CXXFLAGS
7832 AC_MSG_RESULT([${can_compile_f16c}])
7833 if test "${can_compile_f16c}" = "yes" ; then
7834     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
7837 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
7838 AC_LANG_PUSH([C++])
7839 save_CXXFLAGS=$CXXFLAGS
7840 CXXFLAGS="$CXXFLAGS $flag_fma"
7841 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7842     #include <immintrin.h>
7843     int main () {
7844         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
7845         d = _mm256_fmadd_ps(a, b, c);
7846         return 0;
7847     }
7848     ])],
7849     [can_compile_fma=yes],
7850     [can_compile_fma=no])
7851 AC_LANG_POP([C++])
7852 CXXFLAGS=$save_CXXFLAGS
7853 AC_MSG_RESULT([${can_compile_fma}])
7854 if test "${can_compile_fma}" = "yes" ; then
7855     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
7858 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
7859 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
7860 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
7861 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
7862 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
7863 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
7864 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
7865 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
7866 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
7867 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
7869 dnl ===================================================================
7870 dnl system stl sanity tests
7871 dnl ===================================================================
7872 if test "$_os" != "WINNT"; then
7874     AC_LANG_PUSH([C++])
7876     save_CPPFLAGS="$CPPFLAGS"
7877     if test -n "$MACOSX_SDK_PATH"; then
7878         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
7879     fi
7881     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
7882     # only.
7883     if test "$CPP_LIBRARY" = GLIBCXX; then
7884         dnl gcc#19664, gcc#22482, rhbz#162935
7885         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
7886         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
7887         AC_MSG_RESULT([$stlvisok])
7888         if test "$stlvisok" = "no"; then
7889             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
7890         fi
7891     fi
7893     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
7894     # when we don't make any dynamic libraries?
7895     if test "$DISABLE_DYNLOADING" = ""; then
7896         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
7897         cat > conftestlib1.cc <<_ACEOF
7898 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7899 struct S2: S1<int> { virtual ~S2(); };
7900 S2::~S2() {}
7901 _ACEOF
7902         cat > conftestlib2.cc <<_ACEOF
7903 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
7904 struct S2: S1<int> { virtual ~S2(); };
7905 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
7906 _ACEOF
7907         gccvisinlineshiddenok=yes
7908         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
7909             gccvisinlineshiddenok=no
7910         else
7911             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
7912             dnl known to not work with -z defs (unsetting which makes the test
7913             dnl moot, though):
7914             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
7915             if test "$COM_IS_CLANG" = TRUE; then
7916                 for i in $CXX $CXXFLAGS; do
7917                     case $i in
7918                     -fsanitize=*)
7919                         my_linkflagsnoundefs=
7920                         break
7921                         ;;
7922                     esac
7923                 done
7924             fi
7925             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
7926                 gccvisinlineshiddenok=no
7927             fi
7928         fi
7930         rm -fr libconftest*
7931         AC_MSG_RESULT([$gccvisinlineshiddenok])
7932         if test "$gccvisinlineshiddenok" = "no"; then
7933             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
7934         fi
7935     fi
7937    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
7938     cat >visibility.cxx <<_ACEOF
7939 #pragma GCC visibility push(hidden)
7940 struct __attribute__ ((visibility ("default"))) TestStruct {
7941   static void Init();
7943 __attribute__ ((visibility ("default"))) void TestFunc() {
7944   TestStruct::Init();
7946 _ACEOF
7947     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
7948         gccvisbroken=yes
7949     else
7950         case "$host_cpu" in
7951         i?86|x86_64)
7952             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
7953                 gccvisbroken=no
7954             else
7955                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
7956                     gccvisbroken=no
7957                 else
7958                     gccvisbroken=yes
7959                 fi
7960             fi
7961             ;;
7962         *)
7963             gccvisbroken=no
7964             ;;
7965         esac
7966     fi
7967     rm -f visibility.s visibility.cxx
7969     AC_MSG_RESULT([$gccvisbroken])
7970     if test "$gccvisbroken" = "yes"; then
7971         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
7972     fi
7974     CPPFLAGS="$save_CPPFLAGS"
7976     AC_LANG_POP([C++])
7979 dnl ===================================================================
7980 dnl  Clang++ tests
7981 dnl ===================================================================
7983 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
7984 if test "$GCC" = "yes"; then
7985     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
7986     AC_LANG_PUSH([C++])
7987     save_CXXFLAGS=$CXXFLAGS
7988     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
7989     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
7990     CXXFLAGS=$save_CXXFLAGS
7991     AC_LANG_POP([C++])
7992     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
7993         AC_MSG_RESULT([yes])
7994     else
7995         AC_MSG_RESULT([no])
7996     fi
7998 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8000 dnl ===================================================================
8001 dnl Compiler plugins
8002 dnl ===================================================================
8004 COMPILER_PLUGINS=
8005 # currently only Clang
8007 if test "$COM_IS_CLANG" != "TRUE"; then
8008     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8009         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8010         enable_compiler_plugins=no
8011     fi
8014 COMPILER_PLUGINS_COM_IS_CLANG=
8015 if test "$COM_IS_CLANG" = "TRUE"; then
8016     if test -n "$enable_compiler_plugins"; then
8017         compiler_plugins="$enable_compiler_plugins"
8018     elif test -n "$ENABLE_DBGUTIL"; then
8019         compiler_plugins=test
8020     else
8021         compiler_plugins=no
8022     fi
8023     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8024         if test "$CLANGVER" -lt 50002; then
8025             if test "$compiler_plugins" = yes; then
8026                 AC_MSG_ERROR([Clang $CLANGVER is too old to build compiler plugins; need >= 5.0.2.])
8027             else
8028                 compiler_plugins=no
8029             fi
8030         fi
8031     fi
8032     if test "$compiler_plugins" != "no"; then
8033         dnl The prefix where Clang resides, override to where Clang resides if
8034         dnl using a source build:
8035         if test -z "$CLANGDIR"; then
8036             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8037         fi
8038         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8039         if test -z "$COMPILER_PLUGINS_CXX"; then
8040             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8041         fi
8042         clangbindir=$CLANGDIR/bin
8043         if test "$build_os" = "cygwin"; then
8044             clangbindir=$(cygpath -u "$clangbindir")
8045         fi
8046         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8047         if test -n "$LLVM_CONFIG"; then
8048             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8049             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8050             if test -z "$CLANGLIBDIR"; then
8051                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8052             fi
8053             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8054             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8055             clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8056             if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8057                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8058             fi
8059             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8060             clangobjdir=$($LLVM_CONFIG --obj-root)
8061             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8062                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8063             fi
8064         fi
8065         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8066         AC_LANG_PUSH([C++])
8067         save_CXX=$CXX
8068         save_CXXCPP=$CXXCPP
8069         save_CPPFLAGS=$CPPFLAGS
8070         save_CXXFLAGS=$CXXFLAGS
8071         save_LDFLAGS=$LDFLAGS
8072         save_LIBS=$LIBS
8073         CXX=$COMPILER_PLUGINS_CXX
8074         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8075         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8076         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8077         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8078             [COMPILER_PLUGINS=TRUE],
8079             [
8080             if test "$compiler_plugins" = "yes"; then
8081                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8082             else
8083                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8084                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8085             fi
8086             ])
8087         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8088         dnl comment in compilerplugins/Makefile-clang.mk:
8089         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8090             LDFLAGS=""
8091             AC_MSG_CHECKING([for clang libraries to use])
8092             if test -z "$CLANGTOOLLIBS"; then
8093                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8094  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8095                 AC_LINK_IFELSE([
8096                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8097                         [[ clang::FullSourceLoc().dump(); ]])
8098                 ],[CLANGTOOLLIBS="$LIBS"],[])
8099             fi
8100             if test -z "$CLANGTOOLLIBS"; then
8101                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8102                 AC_LINK_IFELSE([
8103                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8104                         [[ clang::FullSourceLoc().dump(); ]])
8105                 ],[CLANGTOOLLIBS="$LIBS"],[])
8106             fi
8107             AC_MSG_RESULT([$CLANGTOOLLIBS])
8108             if test -z "$CLANGTOOLLIBS"; then
8109                 if test "$compiler_plugins" = "yes"; then
8110                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8111                 else
8112                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8113                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8114                 fi
8115                 COMPILER_PLUGINS=
8116             fi
8117             if test -n "$COMPILER_PLUGINS"; then
8118                 if test -z "$CLANGSYSINCLUDE"; then
8119                     if test -n "$LLVM_CONFIG"; then
8120                         # Path to the clang system headers (no idea if there's a better way to get it).
8121                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8122                     fi
8123                 fi
8124             fi
8125         fi
8126         CXX=$save_CXX
8127         CXXCPP=$save_CXXCPP
8128         CPPFLAGS=$save_CPPFLAGS
8129         CXXFLAGS=$save_CXXFLAGS
8130         LDFLAGS=$save_LDFLAGS
8131         LIBS="$save_LIBS"
8132         AC_LANG_POP([C++])
8134         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8135         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8136             #ifndef __clang__
8137             you lose
8138             #endif
8139             int foo=42;
8140             ]])],
8141             [AC_MSG_RESULT([yes])
8142              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8143             [AC_MSG_RESULT([no])])
8144         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8145     fi
8146 else
8147     if test "$enable_compiler_plugins" = "yes"; then
8148         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8149     fi
8151 COMPILER_PLUGINS_ANALYZER_PCH=
8152 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8153     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8155 AC_SUBST(COMPILER_PLUGINS)
8156 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8157 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8158 AC_SUBST(COMPILER_PLUGINS_CXX)
8159 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8160 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8161 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8162 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8163 AC_SUBST(CLANGDIR)
8164 AC_SUBST(CLANGLIBDIR)
8165 AC_SUBST(CLANGTOOLLIBS)
8166 AC_SUBST(CLANGSYSINCLUDE)
8168 # Plugin to help linker.
8169 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8170 # This makes --enable-lto build with clang work.
8171 AC_SUBST(LD_PLUGIN)
8173 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8174 AC_SUBST(HAVE_POSIX_FALLOCATE)
8176 JITC_PROCESSOR_TYPE=""
8177 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8178     # IBMs JDK needs this...
8179     JITC_PROCESSOR_TYPE=6
8180     export JITC_PROCESSOR_TYPE
8182 AC_SUBST([JITC_PROCESSOR_TYPE])
8184 # Misc Windows Stuff
8185 AC_ARG_WITH(ucrt-dir,
8186     AS_HELP_STRING([--with-ucrt-dir],
8187         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8188         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8189         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8190             Windows6.1-KB2999226-x64.msu
8191             Windows6.1-KB2999226-x86.msu
8192             Windows8.1-KB2999226-x64.msu
8193             Windows8.1-KB2999226-x86.msu
8194             Windows8-RT-KB2999226-x64.msu
8195             Windows8-RT-KB2999226-x86.msu
8196         A zip archive including those files is available from Microsoft site:
8197         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8200 UCRT_REDISTDIR="$with_ucrt_dir"
8201 if test $_os = "WINNT"; then
8202     find_msvc_x64_dlls
8203     for i in $PKGFORMAT; do
8204         if test "$i" = msi; then
8205             find_msms
8206             break
8207         fi
8208     done
8209     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8210     MSVC_DLLS="$msvcdlls"
8211     test -n "$msmdir" && MSM_PATH=`win_short_path_for_make "$msmdir"`
8212     # MSVC 15.3 changed it to VC141
8213     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8214         SCPDEFS="$SCPDEFS -DWITH_VC143_REDIST"
8215     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8216         SCPDEFS="$SCPDEFS -DWITH_VC142_REDIST"
8217     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8218         SCPDEFS="$SCPDEFS -DWITH_VC141_REDIST"
8219     else
8220         SCPDEFS="$SCPDEFS -DWITH_VC${VCVER}_REDIST"
8221     fi
8223     if test "$UCRT_REDISTDIR" = "no"; then
8224         dnl explicitly disabled
8225         UCRT_REDISTDIR=""
8226     else
8227         if ! test -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x64.msu" -a \
8228                   -f "$UCRT_REDISTDIR/Windows6.1-KB2999226-x86.msu" -a \
8229                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x64.msu" -a \
8230                   -f "$UCRT_REDISTDIR/Windows8.1-KB2999226-x86.msu" -a \
8231                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x64.msu" -a \
8232                   -f "$UCRT_REDISTDIR/Windows8-RT-KB2999226-x86.msu"; then
8233             UCRT_REDISTDIR=""
8234             if test -n "$PKGFORMAT"; then
8235                for i in $PKGFORMAT; do
8236                    case "$i" in
8237                    msi)
8238                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8239                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8240                        ;;
8241                    esac
8242                done
8243             fi
8244         fi
8245     fi
8248 AC_SUBST(UCRT_REDISTDIR)
8249 AC_SUBST(MSVC_DLL_PATH)
8250 AC_SUBST(MSVC_DLLS)
8251 AC_SUBST(MSM_PATH)
8254 dnl ===================================================================
8255 dnl Checks for Java
8256 dnl ===================================================================
8257 if test "$ENABLE_JAVA" != ""; then
8259     # Windows-specific tests
8260     if test "$build_os" = "cygwin"; then
8261         if test -z "$with_jdk_home"; then
8262             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8263             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8264             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/CurrentVersion"
8265             if test -n "$regvalue"; then
8266                 ver=$regvalue
8267                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver/JavaHome"
8268                 with_jdk_home=$regvalue
8269             fi
8270             howfound="found automatically"
8271         else
8272             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8273             howfound="you passed"
8274         fi
8276         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8277             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])
8278         fi
8279     fi
8281     # 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.
8282     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8283     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8284         with_jdk_home=`/usr/libexec/java_home`
8285     fi
8287     JAVA_HOME=; export JAVA_HOME
8288     if test -z "$with_jdk_home"; then
8289         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8290     else
8291         _java_path="$with_jdk_home/bin/$with_java"
8292         dnl Check if there is a Java interpreter at all.
8293         if test -x "$_java_path"; then
8294             JAVAINTERPRETER=$_java_path
8295         else
8296             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8297         fi
8298     fi
8300     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8301     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8302     dnl loaded by java to run JunitTests:
8303     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8304         shortjdkhome=`cygpath -d "$with_jdk_home"`
8305         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
8306             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8307             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8308         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
8309             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8310             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8311         fi
8313         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8314             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8315         fi
8316         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8317     elif test "$cross_compiling" != "yes"; then
8318         case $CPUNAME in
8319             AARCH64|AXP|X86_64|HPPA|IA64|POWERPC64|S390X|SPARC64|GODSON64)
8320                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8321                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8322                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8323                 fi
8324                 ;;
8325             *) # assumption: everything else 32-bit
8326                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8327                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8328                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8329                 fi
8330                 ;;
8331         esac
8332     fi
8335 dnl ===================================================================
8336 dnl Checks for JDK.
8337 dnl ===================================================================
8339 # Whether all the complexity here actually is needed any more or not, no idea.
8341 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8342     _gij_longver=0
8343     AC_MSG_CHECKING([the installed JDK])
8344     if test -n "$JAVAINTERPRETER"; then
8345         dnl java -version sends output to stderr!
8346         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8347             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8348         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8349             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8350         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8351             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8352         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8353             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8354         else
8355             JDK=sun
8357             dnl Sun JDK specific tests
8358             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8359             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8361             if test "$_jdk_ver" -lt 10900; then
8362                 AC_MSG_ERROR([JDK is too old, you need at least 9 ($_jdk_ver < 10900)])
8363             fi
8364             if test "$_jdk_ver" -gt 10900; then
8365                 JAVA_CLASSPATH_NOT_SET=TRUE
8366             fi
8368             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8369             if test "$_os" = "WINNT"; then
8370                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8371             fi
8372             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8374             # set to limit VM usage for JunitTests
8375             JAVAIFLAGS=-Xmx64M
8376             # set to limit VM usage for javac
8377             JAVACFLAGS=-J-Xmx128M
8378         fi
8379     else
8380         AC_MSG_ERROR([Java not found. You need at least JDK 9])
8381     fi
8382 else
8383     if test -z "$ENABLE_JAVA"; then
8384         dnl Java disabled
8385         JAVA_HOME=
8386         export JAVA_HOME
8387     elif test "$cross_compiling" = "yes"; then
8388         # Just assume compatibility of build and host JDK
8389         JDK=$JDK_FOR_BUILD
8390         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8391     fi
8394 dnl ===================================================================
8395 dnl Checks for javac
8396 dnl ===================================================================
8397 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8398     javacompiler="javac"
8399     : ${JAVA_SOURCE_VER=8}
8400     : ${JAVA_TARGET_VER=8}
8401     if test -z "$with_jdk_home"; then
8402         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8403     else
8404         _javac_path="$with_jdk_home/bin/$javacompiler"
8405         dnl Check if there is a Java compiler at all.
8406         if test -x "$_javac_path"; then
8407             JAVACOMPILER=$_javac_path
8408         fi
8409     fi
8410     if test -z "$JAVACOMPILER"; then
8411         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8412     fi
8413     if test "$build_os" = "cygwin"; then
8414         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8415             JAVACOMPILER="${JAVACOMPILER}.exe"
8416         fi
8417         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8418     fi
8421 dnl ===================================================================
8422 dnl Checks for javadoc
8423 dnl ===================================================================
8424 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8425     if test -z "$with_jdk_home"; then
8426         AC_PATH_PROG(JAVADOC, javadoc)
8427     else
8428         _javadoc_path="$with_jdk_home/bin/javadoc"
8429         dnl Check if there is a javadoc at all.
8430         if test -x "$_javadoc_path"; then
8431             JAVADOC=$_javadoc_path
8432         else
8433             AC_PATH_PROG(JAVADOC, javadoc)
8434         fi
8435     fi
8436     if test -z "$JAVADOC"; then
8437         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8438     fi
8439     if test "$build_os" = "cygwin"; then
8440         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8441             JAVADOC="${JAVADOC}.exe"
8442         fi
8443         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8444     fi
8446     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8447     JAVADOCISGJDOC="yes"
8448     fi
8450 AC_SUBST(JAVADOC)
8451 AC_SUBST(JAVADOCISGJDOC)
8453 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8454     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8455     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8456         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8457            # try to recover first by looking whether we have an alternative
8458            # system as in Debian or newer SuSEs where following /usr/bin/javac
8459            # over /etc/alternatives/javac leads to the right bindir where we
8460            # just need to strip a bit away to get a valid JAVA_HOME
8461            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8462         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8463             # maybe only one level of symlink (e.g. on Mac)
8464             JAVA_HOME=$(readlink $JAVACOMPILER)
8465             if test "$(dirname $JAVA_HOME)" = "."; then
8466                 # we've got no path to trim back
8467                 JAVA_HOME=""
8468             fi
8469         else
8470             # else warn
8471             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8472             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8473             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8474             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8475         fi
8476         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8477         if test "$JAVA_HOME" != "/usr"; then
8478             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8479                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8480                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8481                 dnl Tiger already returns a JDK path...
8482                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8483             else
8484                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8485                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8486                 dnl that checks which version to run
8487                 if test -f "$JAVA_HOME"; then
8488                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8489                 fi
8490             fi
8491         fi
8492     fi
8493     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8495     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8496     if test -z "$JAVA_HOME"; then
8497         if test "x$with_jdk_home" = "x"; then
8498             cat > findhome.java <<_ACEOF
8499 [import java.io.File;
8501 class findhome
8503     public static void main(String args[])
8504     {
8505         String jrelocation = System.getProperty("java.home");
8506         File jre = new File(jrelocation);
8507         System.out.println(jre.getParent());
8508     }
8510 _ACEOF
8511             AC_MSG_CHECKING([if javac works])
8512             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8513             AC_TRY_EVAL(javac_cmd)
8514             if test $? = 0 -a -f ./findhome.class; then
8515                 AC_MSG_RESULT([javac works])
8516             else
8517                 echo "configure: javac test failed" >&5
8518                 cat findhome.java >&5
8519                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8520             fi
8521             AC_MSG_CHECKING([if gij knows its java.home])
8522             JAVA_HOME=`$JAVAINTERPRETER findhome`
8523             if test $? = 0 -a "$JAVA_HOME" != ""; then
8524                 AC_MSG_RESULT([$JAVA_HOME])
8525             else
8526                 echo "configure: java test failed" >&5
8527                 cat findhome.java >&5
8528                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8529             fi
8530             # clean-up after ourselves
8531             rm -f ./findhome.java ./findhome.class
8532         else
8533             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8534         fi
8535     fi
8537     # now check if $JAVA_HOME is really valid
8538     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8539         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8540             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8541             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8542             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8543             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8544             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8545             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8546         fi
8547     fi
8548     PathFormat "$JAVA_HOME"
8549     JAVA_HOME="$formatted_path"
8552 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
8553     "$_os" != Darwin
8554 then
8555     AC_MSG_CHECKING([for JAWT lib])
8556     if test "$_os" = WINNT; then
8557         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
8558         JAWTLIB=jawt.lib
8559     else
8560         case "$host_cpu" in
8561         arm*)
8562             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
8563             JAVA_ARCH=$my_java_arch
8564             ;;
8565         i*86)
8566             my_java_arch=i386
8567             ;;
8568         m68k)
8569             my_java_arch=m68k
8570             ;;
8571         powerpc)
8572             my_java_arch=ppc
8573             ;;
8574         powerpc64)
8575             my_java_arch=ppc64
8576             ;;
8577         powerpc64le)
8578             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
8579             JAVA_ARCH=$my_java_arch
8580             ;;
8581         sparc64)
8582             my_java_arch=sparcv9
8583             ;;
8584         x86_64)
8585             my_java_arch=amd64
8586             ;;
8587         *)
8588             my_java_arch=$host_cpu
8589             ;;
8590         esac
8591         # This is where JDK9 puts the library
8592         if test -e "$JAVA_HOME/lib/libjawt.so"; then
8593             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
8594         else
8595             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
8596         fi
8597         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
8598     fi
8599     AC_MSG_RESULT([$JAWTLIB])
8601 AC_SUBST(JAWTLIB)
8603 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
8604     case "$host_os" in
8606     aix*)
8607         JAVAINC="-I$JAVA_HOME/include"
8608         JAVAINC="$JAVAINC -I$JAVA_HOME/include/aix"
8609         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8610         ;;
8612     cygwin*|wsl*)
8613         JAVAINC="-I$JAVA_HOME/include/win32"
8614         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
8615         ;;
8617     darwin*|macos*)
8618         if test -d "$JAVA_HOME/include/darwin"; then
8619             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
8620         else
8621             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
8622         fi
8623         ;;
8625     dragonfly*)
8626         JAVAINC="-I$JAVA_HOME/include"
8627         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8628         ;;
8630     freebsd*)
8631         JAVAINC="-I$JAVA_HOME/include"
8632         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
8633         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
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     k*bsd*-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     linux-gnu*)
8645         JAVAINC="-I$JAVA_HOME/include"
8646         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
8647         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8648         ;;
8650     *netbsd*)
8651         JAVAINC="-I$JAVA_HOME/include"
8652         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
8653         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8654        ;;
8656     openbsd*)
8657         JAVAINC="-I$JAVA_HOME/include"
8658         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
8659         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8660         ;;
8662     solaris*)
8663         JAVAINC="-I$JAVA_HOME/include"
8664         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
8665         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
8666         ;;
8667     esac
8669 SOLARINC="$SOLARINC $JAVAINC"
8671 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8672     JAVA_HOME_FOR_BUILD=$JAVA_HOME
8673     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
8674     JDK_FOR_BUILD=$JDK
8677 AC_SUBST(JAVACFLAGS)
8678 AC_SUBST(JAVACOMPILER)
8679 AC_SUBST(JAVAINTERPRETER)
8680 AC_SUBST(JAVAIFLAGS)
8681 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
8682 AC_SUBST(JAVA_CLASSPATH_NOT_SET)
8683 AC_SUBST(JAVA_HOME)
8684 AC_SUBST(JAVA_HOME_FOR_BUILD)
8685 AC_SUBST(JDK)
8686 AC_SUBST(JDK_FOR_BUILD)
8687 AC_SUBST(JAVA_SOURCE_VER)
8688 AC_SUBST(JAVA_TARGET_VER)
8691 dnl ===================================================================
8692 dnl Export file validation
8693 dnl ===================================================================
8694 AC_MSG_CHECKING([whether to enable export file validation])
8695 if test "$with_export_validation" != "no"; then
8696     if test -z "$ENABLE_JAVA"; then
8697         if test "$with_export_validation" = "yes"; then
8698             AC_MSG_ERROR([requested, but Java is disabled])
8699         else
8700             AC_MSG_RESULT([no, as Java is disabled])
8701         fi
8702     elif ! test -d "${SRC_ROOT}/schema"; then
8703         if test "$with_export_validation" = "yes"; then
8704             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
8705         else
8706             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
8707         fi
8708     else
8709         AC_MSG_RESULT([yes])
8710         AC_DEFINE(HAVE_EXPORT_VALIDATION)
8712         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
8713         if test -z "$ODFVALIDATOR"; then
8714             # remember to download the ODF toolkit with validator later
8715             AC_MSG_NOTICE([no odfvalidator found, will download it])
8716             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
8717             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
8719             # and fetch name of odfvalidator jar name from download.lst
8720             ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8721             AC_SUBST(ODFVALIDATOR_JAR)
8723             if test -z "$ODFVALIDATOR_JAR"; then
8724                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
8725             fi
8726         fi
8727         if test "$build_os" = "cygwin"; then
8728             # In case of Cygwin it will be executed from Windows,
8729             # so we need to run bash and absolute path to validator
8730             # so instead of "odfvalidator" it will be
8731             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8732             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
8733         else
8734             ODFVALIDATOR="sh $ODFVALIDATOR"
8735         fi
8736         AC_SUBST(ODFVALIDATOR)
8739         AC_PATH_PROGS(OFFICEOTRON, officeotron)
8740         if test -z "$OFFICEOTRON"; then
8741             # remember to download the officeotron with validator later
8742             AC_MSG_NOTICE([no officeotron found, will download it])
8743             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
8744             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
8746             # and fetch name of officeotron jar name from download.lst
8747             OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
8748             AC_SUBST(OFFICEOTRON_JAR)
8750             if test -z "$OFFICEOTRON_JAR"; then
8751                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
8752             fi
8753         else
8754             # check version of existing officeotron
8755             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
8756             if test 0"$OFFICEOTRON_VER" -lt 704; then
8757                 AC_MSG_ERROR([officeotron too old])
8758             fi
8759         fi
8760         if test "$build_os" = "cygwin"; then
8761             # In case of Cygwin it will be executed from Windows,
8762             # so we need to run bash and absolute path to validator
8763             # so instead of "odfvalidator" it will be
8764             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
8765             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
8766         else
8767             OFFICEOTRON="sh $OFFICEOTRON"
8768         fi
8769     fi
8770     AC_SUBST(OFFICEOTRON)
8771 else
8772     AC_MSG_RESULT([no])
8775 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
8776 if test "$with_bffvalidator" != "no"; then
8777     AC_DEFINE(HAVE_BFFVALIDATOR)
8779     if test "$with_export_validation" = "no"; then
8780         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
8781     fi
8783     if test "$with_bffvalidator" = "yes"; then
8784         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
8785     else
8786         BFFVALIDATOR="$with_bffvalidator"
8787     fi
8789     if test "$build_os" = "cygwin"; then
8790         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
8791             AC_MSG_RESULT($BFFVALIDATOR)
8792         else
8793             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8794         fi
8795     elif test -n "$BFFVALIDATOR"; then
8796         # We are not in Cygwin but need to run Windows binary with wine
8797         AC_PATH_PROGS(WINE, wine)
8799         # so swap in a shell wrapper that converts paths transparently
8800         BFFVALIDATOR_EXE="$BFFVALIDATOR"
8801         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
8802         AC_SUBST(BFFVALIDATOR_EXE)
8803         AC_MSG_RESULT($BFFVALIDATOR)
8804     else
8805         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
8806     fi
8807     AC_SUBST(BFFVALIDATOR)
8808 else
8809     AC_MSG_RESULT([no])
8812 dnl ===================================================================
8813 dnl Check for C preprocessor to use
8814 dnl ===================================================================
8815 AC_MSG_CHECKING([which C preprocessor to use in idlc])
8816 SYSTEM_UCPP_IS_GCC=
8817 if test -n "$with_idlc_cpp"; then
8818     AC_MSG_RESULT([$with_idlc_cpp])
8819     AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
8820     AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
8821     # ucpp will accept -v (to output version), warn about the others as unknown
8822     # and return 1 (due to -v)
8823     # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
8824     # and return 0 (due to --version ) if all options are supported
8825     $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
8826     if test $? -eq 0;  then
8827         SYSTEM_UCPP_IS_GCC=TRUE
8828         AC_MSG_RESULT([yes])
8829     else
8830         AC_MSG_RESULT([no])
8831     fi
8832 else
8833     AC_MSG_RESULT([ucpp])
8834     AC_MSG_CHECKING([which ucpp to use])
8835     if test -n "$with_system_ucpp" -a "$with_system_ucpp" != "no"; then
8836         AC_MSG_RESULT([external])
8837         AC_PATH_PROG(SYSTEM_UCPP, ucpp)
8838     else
8839         AC_MSG_RESULT([internal])
8840         BUILD_TYPE="$BUILD_TYPE UCPP"
8841     fi
8843 AC_SUBST(SYSTEM_UCPP)
8844 AC_SUBST(SYSTEM_UCPP_IS_GCC)
8846 dnl ===================================================================
8847 dnl Check for epm (not needed for Windows)
8848 dnl ===================================================================
8849 AC_MSG_CHECKING([whether to enable EPM for packing])
8850 if test "$enable_epm" = "yes"; then
8851     AC_MSG_RESULT([yes])
8852     if test "$_os" != "WINNT"; then
8853         if test $_os = Darwin; then
8854             EPM=internal
8855         elif test -n "$with_epm"; then
8856             EPM=$with_epm
8857         else
8858             AC_PATH_PROG(EPM, epm, no)
8859         fi
8860         if test "$EPM" = "no" -o "$EPM" = "internal"; then
8861             AC_MSG_NOTICE([EPM will be built.])
8862             BUILD_TYPE="$BUILD_TYPE EPM"
8863             EPM=${WORKDIR}/UnpackedTarball/epm/epm
8864         else
8865             # Gentoo has some epm which is something different...
8866             AC_MSG_CHECKING([whether the found epm is the right epm])
8867             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
8868                 AC_MSG_RESULT([yes])
8869             else
8870                 AC_MSG_ERROR([no. Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8871             fi
8872             AC_MSG_CHECKING([epm version])
8873             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
8874             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
8875                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
8876                 AC_MSG_RESULT([OK, >= 3.7])
8877             else
8878                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
8879                 AC_MSG_ERROR([Install ESP Package Manager (http://www.msweet.org/projects.php?Z2) and/or specify the path to the right epm])
8880             fi
8881         fi
8882     fi
8884     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
8885         AC_MSG_CHECKING([for rpm])
8886         for a in "$RPM" rpmbuild rpm; do
8887             $a --usage >/dev/null 2> /dev/null
8888             if test $? -eq 0; then
8889                 RPM=$a
8890                 break
8891             else
8892                 $a --version >/dev/null 2> /dev/null
8893                 if test $? -eq 0; then
8894                     RPM=$a
8895                     break
8896                 fi
8897             fi
8898         done
8899         if test -z "$RPM"; then
8900             AC_MSG_ERROR([not found])
8901         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
8902             RPM_PATH=`which $RPM`
8903             AC_MSG_RESULT([$RPM_PATH])
8904             SCPDEFS="$SCPDEFS -DWITH_RPM"
8905         else
8906             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
8907         fi
8908     fi
8909     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
8910         AC_PATH_PROG(DPKG, dpkg, no)
8911         if test "$DPKG" = "no"; then
8912             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
8913         fi
8914     fi
8915     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
8916        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8917         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
8918             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
8919                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
8920                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
8921                     AC_MSG_RESULT([yes])
8922                 else
8923                     AC_MSG_RESULT([no])
8924                     if echo "$PKGFORMAT" | $GREP -q rpm; then
8925                         _pt="rpm"
8926                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
8927                         add_warning "the rpms will need to be installed with --nodeps"
8928                     else
8929                         _pt="pkg"
8930                     fi
8931                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
8932                     add_warning "the ${_pt}s will not be relocatable"
8933                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
8934                                  relocation will work, you need to patch your epm with the
8935                                  patch in epm/epm-3.7.patch or build with
8936                                  --with-epm=internal which will build a suitable epm])
8937                 fi
8938             fi
8939         fi
8940     fi
8941     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
8942         AC_PATH_PROG(PKGMK, pkgmk, no)
8943         if test "$PKGMK" = "no"; then
8944             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
8945         fi
8946     fi
8947     AC_SUBST(RPM)
8948     AC_SUBST(DPKG)
8949     AC_SUBST(PKGMK)
8950 else
8951     for i in $PKGFORMAT; do
8952         case "$i" in
8953         aix | bsd | deb | pkg | rpm | native | portable)
8954             AC_MSG_ERROR(
8955                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
8956             ;;
8957         esac
8958     done
8959     AC_MSG_RESULT([no])
8960     EPM=NO
8962 AC_SUBST(EPM)
8964 ENABLE_LWP=
8965 if test "$enable_lotuswordpro" = "yes"; then
8966     ENABLE_LWP="TRUE"
8968 AC_SUBST(ENABLE_LWP)
8970 dnl ===================================================================
8971 dnl Check for building ODK
8972 dnl ===================================================================
8973 if test "$enable_odk" != yes; then
8974     unset DOXYGEN
8975 else
8976     if test "$with_doxygen" = no; then
8977         AC_MSG_CHECKING([for doxygen])
8978         unset DOXYGEN
8979         AC_MSG_RESULT([no])
8980     else
8981         if test "$with_doxygen" = yes; then
8982             AC_PATH_PROG([DOXYGEN], [doxygen])
8983             if test -z "$DOXYGEN"; then
8984                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
8985             fi
8986             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
8987                 if ! dot -V 2>/dev/null; then
8988                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
8989                 fi
8990             fi
8991         else
8992             AC_MSG_CHECKING([for doxygen])
8993             DOXYGEN=$with_doxygen
8994             AC_MSG_RESULT([$DOXYGEN])
8995         fi
8996         if test -n "$DOXYGEN"; then
8997             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
8998             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
8999             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9000                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9001             fi
9002         fi
9003     fi
9005 AC_SUBST([DOXYGEN])
9007 AC_MSG_CHECKING([whether to build the ODK])
9008 if test "$enable_odk" = yes; then
9009     AC_MSG_RESULT([yes])
9010     BUILD_TYPE="$BUILD_TYPE ODK"
9011 else
9012     AC_MSG_RESULT([no])
9015 dnl ===================================================================
9016 dnl Check for system zlib
9017 dnl ===================================================================
9018 if test "$with_system_zlib" = "auto"; then
9019     case "$_os" in
9020     WINNT)
9021         with_system_zlib="$with_system_libs"
9022         ;;
9023     *)
9024         if test "$enable_fuzzers" != "yes"; then
9025             with_system_zlib=yes
9026         else
9027             with_system_zlib=no
9028         fi
9029         ;;
9030     esac
9033 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9034 dnl and has no pkg-config for it at least on some tinderboxes,
9035 dnl so leaving that out for now
9036 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9037 AC_MSG_CHECKING([which zlib to use])
9038 if test "$with_system_zlib" = "yes"; then
9039     AC_MSG_RESULT([external])
9040     SYSTEM_ZLIB=TRUE
9041     AC_CHECK_HEADER(zlib.h, [],
9042         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9043     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9044         [AC_MSG_ERROR(zlib not found or functional)], [])
9045 else
9046     AC_MSG_RESULT([internal])
9047     SYSTEM_ZLIB=
9048     BUILD_TYPE="$BUILD_TYPE ZLIB"
9049     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9050     ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9052 AC_SUBST(ZLIB_CFLAGS)
9053 AC_SUBST(ZLIB_LIBS)
9054 AC_SUBST(SYSTEM_ZLIB)
9056 dnl ===================================================================
9057 dnl Check for system jpeg
9058 dnl ===================================================================
9059 AC_MSG_CHECKING([which libjpeg to use])
9060 if test "$with_system_jpeg" = "yes"; then
9061     AC_MSG_RESULT([external])
9062     SYSTEM_LIBJPEG=TRUE
9063     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9064         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9065     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9066         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9067 else
9068     SYSTEM_LIBJPEG=
9069     AC_MSG_RESULT([internal, libjpeg-turbo])
9070     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9071     LIBJPEG_CFLAGS="-I${WORKDIR}/UnpackedTarball/libjpeg-turbo"
9072     if test "$COM" = "MSC"; then
9073         LIBJPEG_LIBS="${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs/libjpeg.lib"
9074     else
9075         LIBJPEG_LIBS="-L${WORKDIR}/UnpackedTarball/libjpeg-turbo/.libs -ljpeg"
9076     fi
9078     case "$host_cpu" in
9079     x86_64 | amd64 | i*86 | x86 | ia32)
9080         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9081         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9082             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9083                 NASM="$LODE_HOME/opt/bin/nasm"
9084             elif test -x "/opt/lo/bin/nasm"; then
9085                 NASM="/opt/lo/bin/nasm"
9086             fi
9087         fi
9089         if test -n "$NASM"; then
9090             AC_MSG_CHECKING([for object file format of host system])
9091             case "$host_os" in
9092               cygwin* | mingw* | pw32* | wsl*)
9093                 case "$host_cpu" in
9094                   x86_64)
9095                     objfmt='Win64-COFF'
9096                     ;;
9097                   *)
9098                     objfmt='Win32-COFF'
9099                     ;;
9100                 esac
9101               ;;
9102               msdosdjgpp* | go32*)
9103                 objfmt='COFF'
9104               ;;
9105               os2-emx*) # not tested
9106                 objfmt='MSOMF' # obj
9107               ;;
9108               linux*coff* | linux*oldld*)
9109                 objfmt='COFF' # ???
9110               ;;
9111               linux*aout*)
9112                 objfmt='a.out'
9113               ;;
9114               linux*)
9115                 case "$host_cpu" in
9116                   x86_64)
9117                     objfmt='ELF64'
9118                     ;;
9119                   *)
9120                     objfmt='ELF'
9121                     ;;
9122                 esac
9123               ;;
9124               kfreebsd* | freebsd* | netbsd* | openbsd*)
9125                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9126                   objfmt='BSD-a.out'
9127                 else
9128                   case "$host_cpu" in
9129                     x86_64 | amd64)
9130                       objfmt='ELF64'
9131                       ;;
9132                     *)
9133                       objfmt='ELF'
9134                       ;;
9135                   esac
9136                 fi
9137               ;;
9138               solaris* | sunos* | sysv* | sco*)
9139                 case "$host_cpu" in
9140                   x86_64)
9141                     objfmt='ELF64'
9142                     ;;
9143                   *)
9144                     objfmt='ELF'
9145                     ;;
9146                 esac
9147               ;;
9148               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9149                 case "$host_cpu" in
9150                   x86_64)
9151                     objfmt='Mach-O64'
9152                     ;;
9153                   *)
9154                     objfmt='Mach-O'
9155                     ;;
9156                 esac
9157               ;;
9158               *)
9159                 objfmt='ELF ?'
9160               ;;
9161             esac
9163             AC_MSG_RESULT([$objfmt])
9164             if test "$objfmt" = 'ELF ?'; then
9165               objfmt='ELF'
9166               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9167             fi
9169             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9170             case "$objfmt" in
9171               MSOMF)      NAFLAGS='-fobj -DOBJ32';;
9172               Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
9173               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
9174               COFF)       NAFLAGS='-fcoff -DCOFF';;
9175               a.out)      NAFLAGS='-faout -DAOUT';;
9176               BSD-a.out)  NAFLAGS='-faoutb -DAOUT';;
9177               ELF)        NAFLAGS='-felf -DELF';;
9178               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__';;
9179               RDF)        NAFLAGS='-frdf -DRDF';;
9180               Mach-O)     NAFLAGS='-fmacho -DMACHO';;
9181               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
9182             esac
9183             AC_MSG_RESULT([$NAFLAGS])
9185             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9186             cat > conftest.asm << EOF
9187             [%line __oline__ "configure"
9188                     section .text
9189                     global  _main,main
9190             _main:
9191             main:   xor     eax,eax
9192                     ret
9193             ]
9195             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9196             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9197               AC_MSG_RESULT(yes)
9198             else
9199               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9200               cat conftest.asm >&AS_MESSAGE_LOG_FD
9201               rm -rf conftest*
9202               AC_MSG_RESULT(no)
9203               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9204               NASM=""
9205             fi
9207         fi
9209         if test -z "$NASM"; then
9210 cat << _EOS
9211 ****************************************************************************
9212 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9213 To get one please:
9215 _EOS
9216             if test "$build_os" = "cygwin"; then
9217 cat << _EOS
9218 install a pre-compiled binary for Win32
9220 mkdir -p /opt/lo/bin
9221 cd /opt/lo/bin
9222 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9223 chmod +x nasm
9225 or get and install one from http://www.nasm.us/
9227 Then re-run autogen.sh
9229 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9230 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`which nasm\` finds it.
9232 _EOS
9233             else
9234 cat << _EOS
9235 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md
9237 _EOS
9238             fi
9239             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9240             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9241         fi
9242       ;;
9243     esac
9246 AC_SUBST(NASM)
9247 AC_SUBST(LIBJPEG_CFLAGS)
9248 AC_SUBST(LIBJPEG_LIBS)
9249 AC_SUBST(SYSTEM_LIBJPEG)
9251 dnl ===================================================================
9252 dnl Check for system clucene
9253 dnl ===================================================================
9254 dnl we should rather be using
9255 dnl libo_CHECK_SYSTEM_MODULE([clucence],[CLUCENE],[liblucence-core]) here
9256 dnl but the contribs-lib check seems tricky
9257 if test "$enable_xmlhelp" = yes -o "$enable_extension_integration" = yes; then
9258 AC_MSG_CHECKING([which clucene to use])
9259 if test "$with_system_clucene" = "yes"; then
9260     AC_MSG_RESULT([external])
9261     SYSTEM_CLUCENE=TRUE
9262     PKG_CHECK_MODULES(CLUCENE, libclucene-core)
9263     CLUCENE_CFLAGS=[$(printf '%s' "$CLUCENE_CFLAGS" | sed -e 's@-I[^ ]*/CLucene/ext@@' -e "s/-I/${ISYSTEM?}/g")]
9264     FilterLibs "${CLUCENE_LIBS}"
9265     CLUCENE_LIBS="${filteredlibs}"
9266     AC_LANG_PUSH([C++])
9267     save_CXXFLAGS=$CXXFLAGS
9268     save_CPPFLAGS=$CPPFLAGS
9269     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9270     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9271     dnl http://sourceforge.net/tracker/index.php?func=detail&aid=3392466&group_id=80013&atid=558446
9272     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9273     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9274                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9275     CXXFLAGS=$save_CXXFLAGS
9276     CPPFLAGS=$save_CPPFLAGS
9277     AC_LANG_POP([C++])
9279     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9280 else
9281     AC_MSG_RESULT([internal])
9282     SYSTEM_CLUCENE=
9283     BUILD_TYPE="$BUILD_TYPE CLUCENE"
9286 AC_SUBST(SYSTEM_CLUCENE)
9287 AC_SUBST(CLUCENE_CFLAGS)
9288 AC_SUBST(CLUCENE_LIBS)
9290 dnl ===================================================================
9291 dnl Check for system expat
9292 dnl ===================================================================
9293 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9295 dnl ===================================================================
9296 dnl Check for system xmlsec
9297 dnl ===================================================================
9298 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.28])
9300 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9301 if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_eot" = "yes"; then
9302     ENABLE_EOT="TRUE"
9303     AC_DEFINE([ENABLE_EOT])
9304     AC_MSG_RESULT([yes])
9306     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9307 else
9308     ENABLE_EOT=
9309     AC_MSG_RESULT([no])
9311 AC_SUBST([ENABLE_EOT])
9313 dnl ===================================================================
9314 dnl Check for DLP libs
9315 dnl ===================================================================
9316 AS_IF([test "$COM" = "MSC"],
9317       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9318       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9320 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"])
9322 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9324 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9326 AS_IF([test "$COM" = "MSC"],
9327       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9328       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9330 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10],["-I${WORKDIR}/UnpackedTarball/libwpd/inc"],["-L${libwpd_libdir} -lwpd-0.10"])
9332 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9334 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9335 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.12])
9337 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9339 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9341 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9343 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.1])
9344 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.20])
9346 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9347 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9349 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9351 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9352 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9354 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9356 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9358 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9360 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9362 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9363 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9365 dnl ===================================================================
9366 dnl Check for system lcms2
9367 dnl ===================================================================
9368 if test "$with_system_lcms2" != "yes"; then
9369     SYSTEM_LCMS2=
9371 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2],["-I${WORKDIR}/UnpackedTarball/lcms2/include"],["-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"])
9372 if test "$GCC" = "yes"; then
9373     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9375 if test "$COM" = "MSC"; then # override the above
9376     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9379 dnl ===================================================================
9380 dnl Check for system cppunit
9381 dnl ===================================================================
9382 if test "$_os" != "Android" ; then
9383     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9386 dnl ===================================================================
9387 dnl Check whether freetype is available
9388 dnl ===================================================================
9389 if test "$using_freetype_fontconfig" = yes; then
9390     AC_MSG_CHECKING([which freetype to use])
9392 if test "$using_freetype_fontconfig" = yes -a "$test_system_freetype" != no; then
9393     AC_MSG_RESULT([external])
9394     # FreeType has 3 different kinds of versions
9395     # * release, like 2.4.10
9396     # * libtool, like 13.0.7 (this what pkg-config returns)
9397     # * soname
9398     # FreeType's docs/VERSION.DLL provides a table mapping between the three
9399     #
9400     # 9.9.3 is 2.2.0
9401     # When the minimal version is at least 2.8.1, remove Skia's check down below.
9402     PKG_CHECK_MODULES(FREETYPE, freetype2 >= 9.9.3)
9403     FREETYPE_CFLAGS=$(printf '%s' "$FREETYPE_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9404     FilterLibs "${FREETYPE_LIBS}"
9405     FREETYPE_LIBS="${filteredlibs}"
9406     SYSTEM_FREETYPE=TRUE
9407 elif test "$using_freetype_fontconfig" = yes; then
9408     AC_MSG_RESULT([internal])
9409     FREETYPE_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9410     if test "x$ac_config_site_64bit_host" = xYES; then
9411         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9412     else
9413         FREETYPE_LIBS="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9414     fi
9415     BUILD_TYPE="$BUILD_TYPE FREETYPE"
9417 AC_SUBST(FREETYPE_CFLAGS)
9418 AC_SUBST(FREETYPE_LIBS)
9419 AC_SUBST([SYSTEM_FREETYPE])
9421 # ===================================================================
9422 # Check for system libxslt
9423 # to prevent incompatibilities between internal libxml2 and external libxslt,
9424 # or vice versa, use with_system_libxml here
9425 # ===================================================================
9426 if test "$with_system_libxml" = "auto"; then
9427     case "$_os" in
9428     WINNT|iOS|Android)
9429         with_system_libxml="$with_system_libs"
9430         ;;
9431     Emscripten)
9432         with_system_libxml=no
9433         ;;
9434     *)
9435         if test "$enable_fuzzers" != "yes"; then
9436             with_system_libxml=yes
9437         else
9438             with_system_libxml=no
9439         fi
9440         ;;
9441     esac
9444 AC_MSG_CHECKING([which libxslt to use])
9445 if test "$with_system_libxml" = "yes"; then
9446     AC_MSG_RESULT([external])
9447     SYSTEM_LIBXSLT=TRUE
9448     if test "$_os" = "Darwin"; then
9449         dnl make sure to use SDK path
9450         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9451         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9452         dnl omit -L/usr/lib
9453         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9454         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9455     else
9456         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9457         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9458         FilterLibs "${LIBXSLT_LIBS}"
9459         LIBXSLT_LIBS="${filteredlibs}"
9460         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9461         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9462         FilterLibs "${LIBEXSLT_LIBS}"
9463         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9464     fi
9466     dnl Check for xsltproc
9467     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9468     if test "$XSLTPROC" = "no"; then
9469         AC_MSG_ERROR([xsltproc is required])
9470     fi
9471 else
9472     AC_MSG_RESULT([internal])
9473     SYSTEM_LIBXSLT=
9474     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9476 AC_SUBST(SYSTEM_LIBXSLT)
9477 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9478     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9480 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9482 AC_SUBST(LIBEXSLT_CFLAGS)
9483 AC_SUBST(LIBEXSLT_LIBS)
9484 AC_SUBST(LIBXSLT_CFLAGS)
9485 AC_SUBST(LIBXSLT_LIBS)
9486 AC_SUBST(XSLTPROC)
9488 # ===================================================================
9489 # Check for system libxml
9490 # ===================================================================
9491 AC_MSG_CHECKING([which libxml to use])
9492 if test "$with_system_libxml" = "yes"; then
9493     AC_MSG_RESULT([external])
9494     SYSTEM_LIBXML=TRUE
9495     if test "$_os" = "Darwin"; then
9496         dnl make sure to use SDK path
9497         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9498         dnl omit -L/usr/lib
9499         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9500     elif test $_os = iOS; then
9501         dnl make sure to use SDK path
9502         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9503         LIBXML_CFLAGS="-I$usr/include/libxml2"
9504         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9505     else
9506         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9507         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9508         FilterLibs "${LIBXML_LIBS}"
9509         LIBXML_LIBS="${filteredlibs}"
9510     fi
9512     dnl Check for xmllint
9513     AC_PATH_PROG(XMLLINT, xmllint, no)
9514     if test "$XMLLINT" = "no"; then
9515         AC_MSG_ERROR([xmllint is required])
9516     fi
9517 else
9518     AC_MSG_RESULT([internal])
9519     SYSTEM_LIBXML=
9520     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9521     if test "$COM" = "MSC"; then
9522         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9523     fi
9524     if test "$COM" = "MSC"; then
9525         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9526     else
9527         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9528         if test "$_os" = Android; then
9529             LIBXML_LIBS="$LIBXML_LIBS -lm"
9530         fi
9531     fi
9532     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9534 AC_SUBST(SYSTEM_LIBXML)
9535 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9536     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9538 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9539 AC_SUBST(LIBXML_CFLAGS)
9540 AC_SUBST(LIBXML_LIBS)
9541 AC_SUBST(XMLLINT)
9543 # =====================================================================
9544 # Checking for a Python interpreter with version >= 3.3.
9545 # Optionally user can pass an option to configure, i. e.
9546 # ./configure PYTHON=/usr/bin/python
9547 # =====================================================================
9548 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9549     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9550     # unless PYTHON is defined as above which allows 'system'
9551     enable_python=internal
9553 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9554     if test -n "$PYTHON"; then
9555         PYTHON_FOR_BUILD=$PYTHON
9556     else
9557         # This allows a lack of system python with no error, we use internal one in that case.
9558         AM_PATH_PYTHON([3.3],, [:])
9559         # Clean PYTHON_VERSION checked below if cross-compiling
9560         PYTHON_VERSION=""
9561         if test "$PYTHON" != ":"; then
9562             PYTHON_FOR_BUILD=$PYTHON
9563         fi
9564     fi
9566 AC_SUBST(PYTHON_FOR_BUILD)
9568 # Checks for Python to use for Pyuno
9569 AC_MSG_CHECKING([which Python to use for Pyuno])
9570 case "$enable_python" in
9571 no|disable)
9572     if test -z $PYTHON_FOR_BUILD; then
9573         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9574         # requirement from the choice whether to include Python stuff in the installer, but why
9575         # bother?
9576         if test "$cross_compiling" = yes; then
9577             enable_python=system
9578         else
9579             AC_MSG_ERROR([Python is required at build time.])
9580         fi
9581     fi
9582     enable_python=no
9583     AC_MSG_RESULT([none])
9584     ;;
9585 ""|yes|auto)
9586     if test "$DISABLE_SCRIPTING" = TRUE -a -n "$PYTHON_FOR_BUILD"; then
9587         AC_MSG_RESULT([no, overridden by --disable-scripting])
9588         enable_python=no
9589     elif test $build_os = cygwin; then
9590         dnl When building on Windows we don't attempt to use any installed
9591         dnl "system"  Python.
9592         AC_MSG_RESULT([fully internal])
9593         enable_python=internal
9594     elif test "$cross_compiling" = yes; then
9595         AC_MSG_RESULT([system])
9596         enable_python=system
9597     else
9598         # Unset variables set by the above AM_PATH_PYTHON so that
9599         # we actually do check anew.
9600         AC_MSG_RESULT([])
9601         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
9602         AM_PATH_PYTHON([3.3],, [:])
9603         AC_MSG_CHECKING([which Python to use for Pyuno])
9604         if test "$PYTHON" = ":"; then
9605             if test -z "$PYTHON_FOR_BUILD"; then
9606                 AC_MSG_RESULT([fully internal])
9607             else
9608                 AC_MSG_RESULT([internal])
9609             fi
9610             enable_python=internal
9611         else
9612             AC_MSG_RESULT([system])
9613             enable_python=system
9614         fi
9615     fi
9616     ;;
9617 internal)
9618     AC_MSG_RESULT([internal])
9619     ;;
9620 fully-internal)
9621     AC_MSG_RESULT([fully internal])
9622     enable_python=internal
9623     ;;
9624 system)
9625     AC_MSG_RESULT([system])
9626     if test "$_os" = Darwin -a -z "$PYTHON"; then
9627         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
9628     fi
9629     ;;
9631     AC_MSG_ERROR([Incorrect --enable-python option])
9632     ;;
9633 esac
9635 if test $enable_python != no; then
9636     BUILD_TYPE="$BUILD_TYPE PYUNO"
9639 if test $enable_python = system; then
9640     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
9641         # Fallback: Accept these in the environment, or as set above
9642         # for MacOSX.
9643         :
9644     elif test "$cross_compiling" != yes; then
9645         # Unset variables set by the above AM_PATH_PYTHON so that
9646         # we actually do check anew.
9647         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
9648         # This causes an error if no python command is found
9649         AM_PATH_PYTHON([3.3])
9650         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
9651         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
9652         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
9653         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
9654         if test -z "$PKG_CONFIG"; then
9655             PYTHON_CFLAGS="-I$python_include"
9656             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9657         elif $PKG_CONFIG --exists python-$python_version-embed; then
9658             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
9659             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
9660         elif $PKG_CONFIG --exists python-$python_version; then
9661             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
9662             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
9663         else
9664             PYTHON_CFLAGS="-I$python_include"
9665             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
9666         fi
9667         FilterLibs "${PYTHON_LIBS}"
9668         PYTHON_LIBS="${filteredlibs}"
9669     else
9670         dnl How to find out the cross-compilation Python installation path?
9671         AC_MSG_CHECKING([for python version])
9672         AS_IF([test -n "$PYTHON_VERSION"],
9673               [AC_MSG_RESULT([$PYTHON_VERSION])],
9674               [AC_MSG_RESULT([not found])
9675                AC_MSG_ERROR([no usable python found])])
9676         test -n "$PYTHON_CFLAGS" && break
9677     fi
9679     dnl Check if the headers really work
9680     save_CPPFLAGS="$CPPFLAGS"
9681     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
9682     AC_CHECK_HEADER(Python.h)
9683     CPPFLAGS="$save_CPPFLAGS"
9685     # let the PYTHON_FOR_BUILD match the same python installation that
9686     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
9687     # better for PythonTests.
9688     PYTHON_FOR_BUILD=$PYTHON
9691 if test "$with_lxml" != no; then
9692     if test -z "$PYTHON_FOR_BUILD"; then
9693         case $build_os in
9694             cygwin)
9695                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
9696                 ;;
9697             *)
9698                 if test "$cross_compiling" != yes ; then
9699                     BUILD_TYPE="$BUILD_TYPE LXML"
9700                 fi
9701                 ;;
9702         esac
9703     else
9704         AC_MSG_CHECKING([for python lxml])
9705         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
9706             AC_MSG_RESULT([yes])
9707         else
9708             case $build_os in
9709                 cygwin)
9710                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
9711                     ;;
9712                 *)
9713                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
9714                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
9715                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
9716                         else
9717                             BUILD_TYPE="$BUILD_TYPE LXML"
9718                             AC_MSG_RESULT([no, using internal lxml])
9719                         fi
9720                     else
9721                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
9722                     fi
9723                     ;;
9724             esac
9725         fi
9726     fi
9729 dnl By now enable_python should be "system", "internal" or "no"
9730 case $enable_python in
9731 system)
9732     SYSTEM_PYTHON=TRUE
9734     if test "x$ac_cv_header_Python_h" != "xyes"; then
9735        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
9736     fi
9738     AC_LANG_PUSH(C)
9739     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
9740     AC_MSG_CHECKING([for correct python library version])
9741        AC_RUN_IFELSE([AC_LANG_SOURCE([[
9742 #include <Python.h>
9744 int main(int argc, char **argv) {
9745    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
9746    else return 1;
9748        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
9749     AC_LANG_POP(C)
9751     dnl FIXME Check if the Python library can be linked with, too?
9752     ;;
9754 internal)
9755     SYSTEM_PYTHON=
9756     PYTHON_VERSION_MAJOR=3
9757     PYTHON_VERSION_MINOR=8
9758     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
9759     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
9760         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
9761     fi
9762     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
9763     BUILD_TYPE="$BUILD_TYPE PYTHON"
9764     if test "$OS" = LINUX -o "$OS" = WNT ; then
9765         BUILD_TYPE="$BUILD_TYPE LIBFFI"
9766     fi
9767     # Embedded Python dies without Home set
9768     if test "$HOME" = ""; then
9769         export HOME=""
9770     fi
9771     ;;
9773     DISABLE_PYTHON=TRUE
9774     SYSTEM_PYTHON=
9775     ;;
9777     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
9778     ;;
9779 esac
9781 AC_SUBST(DISABLE_PYTHON)
9782 AC_SUBST(SYSTEM_PYTHON)
9783 AC_SUBST(PYTHON_CFLAGS)
9784 AC_SUBST(PYTHON_LIBS)
9785 AC_SUBST(PYTHON_VERSION)
9786 AC_SUBST(PYTHON_VERSION_MAJOR)
9787 AC_SUBST(PYTHON_VERSION_MINOR)
9789 AC_MSG_CHECKING([whether to build LibreLogo])
9790 case "$enable_python" in
9791 no|disable)
9792     AC_MSG_RESULT([no; Python disabled])
9793     ;;
9795     if test "${enable_librelogo}" = "no"; then
9796         AC_MSG_RESULT([no])
9797     else
9798         AC_MSG_RESULT([yes])
9799         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
9800         AC_DEFINE([ENABLE_LIBRELOGO],1)
9801     fi
9802     ;;
9803 esac
9804 AC_SUBST(ENABLE_LIBRELOGO)
9806 ENABLE_MARIADBC=
9807 MARIADBC_MAJOR=1
9808 MARIADBC_MINOR=0
9809 MARIADBC_MICRO=2
9810 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
9811 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
9812     ENABLE_MARIADBC=TRUE
9813     AC_MSG_RESULT([yes])
9814     BUILD_TYPE="$BUILD_TYPE MARIADBC"
9815 else
9816     AC_MSG_RESULT([no])
9818 AC_SUBST(ENABLE_MARIADBC)
9819 AC_SUBST(MARIADBC_MAJOR)
9820 AC_SUBST(MARIADBC_MINOR)
9821 AC_SUBST(MARIADBC_MICRO)
9823 if test "$ENABLE_MARIADBC" = "TRUE"; then
9824     dnl ===================================================================
9825     dnl Check for system MariaDB
9826     dnl ===================================================================
9827     AC_MSG_CHECKING([which MariaDB to use])
9828     if test "$with_system_mariadb" = "yes"; then
9829         AC_MSG_RESULT([external])
9830         SYSTEM_MARIADB_CONNECTOR_C=TRUE
9831         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
9832         if test -z "$MARIADBCONFIG"; then
9833             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
9834             if test -z "$MARIADBCONFIG"; then
9835                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
9836                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
9837             fi
9838         fi
9839         AC_MSG_CHECKING([MariaDB version])
9840         MARIADB_VERSION=`$MARIADBCONFIG --version`
9841         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
9842         if test "$MARIADB_MAJOR" -ge "5"; then
9843             AC_MSG_RESULT([OK])
9844         else
9845             AC_MSG_ERROR([too old, use 5.0.x or later])
9846         fi
9847         AC_MSG_CHECKING([for MariaDB Client library])
9848         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
9849         if test "$COM_IS_CLANG" = TRUE; then
9850             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
9851         fi
9852         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
9853         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
9854         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
9855         dnl linux32:
9856         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
9857             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
9858             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
9859                 | sed -e 's|/lib64/|/lib/|')
9860         fi
9861         FilterLibs "${MARIADB_LIBS}"
9862         MARIADB_LIBS="${filteredlibs}"
9863         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
9864         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
9865         if test "$enable_bundle_mariadb" = "yes"; then
9866             AC_MSG_RESULT([yes])
9867             BUNDLE_MARIADB_CONNECTOR_C=TRUE
9868             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
9870 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
9872 /g' | grep -E '(mysqlclient|mariadb)')
9873             if test "$_os" = "Darwin"; then
9874                 LIBMARIADB=${LIBMARIADB}.dylib
9875             elif test "$_os" = "WINNT"; then
9876                 LIBMARIADB=${LIBMARIADB}.dll
9877             else
9878                 LIBMARIADB=${LIBMARIADB}.so
9879             fi
9880             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
9881             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
9882             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
9883                 AC_MSG_RESULT([found.])
9884                 PathFormat "$LIBMARIADB_PATH"
9885                 LIBMARIADB_PATH="$formatted_path"
9886             else
9887                 AC_MSG_ERROR([not found.])
9888             fi
9889         else
9890             AC_MSG_RESULT([no])
9891             BUNDLE_MARIADB_CONNECTOR_C=
9892         fi
9893     else
9894         AC_MSG_RESULT([internal])
9895         SYSTEM_MARIADB_CONNECTOR_C=
9896         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
9897         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
9898         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
9899     fi
9901     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
9902     AC_SUBST(MARIADB_CFLAGS)
9903     AC_SUBST(MARIADB_LIBS)
9904     AC_SUBST(LIBMARIADB)
9905     AC_SUBST(LIBMARIADB_PATH)
9906     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
9909 dnl ===================================================================
9910 dnl Check for system hsqldb
9911 dnl ===================================================================
9912 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
9913     HSQLDB_USE_JDBC_4_1=
9914     AC_MSG_CHECKING([which hsqldb to use])
9915     if test "$with_system_hsqldb" = "yes"; then
9916         AC_MSG_RESULT([external])
9917         SYSTEM_HSQLDB=TRUE
9918         if test -z $HSQLDB_JAR; then
9919             HSQLDB_JAR=/usr/share/java/hsqldb.jar
9920         fi
9921         if ! test -f $HSQLDB_JAR; then
9922                AC_MSG_ERROR(hsqldb.jar not found.)
9923         fi
9924         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
9925         export HSQLDB_JAR
9926         if $PERL -e \
9927            'use Archive::Zip;
9928             my $file = "$ENV{'HSQLDB_JAR'}";
9929             my $zip = Archive::Zip->new( $file );
9930             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
9931             if ( $mf =~ m/Specification-Version: 1.8.*/ )
9932             {
9933                 push @l, split(/\n/, $mf);
9934                 foreach my $line (@l)
9935                 {
9936                     if ($line =~ m/Specification-Version:/)
9937                     {
9938                         ($t, $version) = split (/:/,$line);
9939                         $version =~ s/^\s//;
9940                         ($a, $b, $c, $d) = split (/\./,$version);
9941                         if ($c == "0" && $d > "8")
9942                         {
9943                             exit 0;
9944                         }
9945                         else
9946                         {
9947                             exit 1;
9948                         }
9949                     }
9950                 }
9951             }
9952             else
9953             {
9954                 exit 1;
9955             }'; then
9956             AC_MSG_RESULT([yes])
9957         else
9958             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
9959         fi
9960     else
9961         AC_MSG_RESULT([internal])
9962         SYSTEM_HSQLDB=
9963         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9964         NEED_ANT=TRUE
9965         AC_MSG_CHECKING([whether hsqldb should be built with JDBC 4.1])
9966         javanumver=`$JAVAINTERPRETER -version 2>&1 | $AWK -v num=true -f $SRC_ROOT/solenv/bin/getcompver.awk`
9967         if expr "$javanumver" '>=' 000100060000 > /dev/null; then
9968             AC_MSG_RESULT([yes])
9969             HSQLDB_USE_JDBC_4_1=TRUE
9970         else
9971             AC_MSG_RESULT([no])
9972         fi
9973     fi
9974 else
9975     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
9976         BUILD_TYPE="$BUILD_TYPE HSQLDB"
9977     fi
9979 AC_SUBST(SYSTEM_HSQLDB)
9980 AC_SUBST(HSQLDB_JAR)
9981 AC_SUBST([HSQLDB_USE_JDBC_4_1])
9983 dnl ===================================================================
9984 dnl Check for PostgreSQL stuff
9985 dnl ===================================================================
9986 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
9987 if test "x$enable_postgresql_sdbc" != "xno"; then
9988     AC_MSG_RESULT([yes])
9989     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
9991     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
9992         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
9993     fi
9994     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
9995         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
9996     fi
9998     postgres_interface=""
9999     if test "$with_system_postgresql" = "yes"; then
10000         postgres_interface="external PostgreSQL"
10001         SYSTEM_POSTGRESQL=TRUE
10002         if test "$_os" = Darwin; then
10003             supp_path=''
10004             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10005                 pg_supp_path="$P_SEP$d$pg_supp_path"
10006             done
10007         fi
10008         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10009         if test -n "$PGCONFIG"; then
10010             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10011             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10012         else
10013             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10014               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10015               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10016             ],[
10017               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10018             ])
10019         fi
10020         FilterLibs "${POSTGRESQL_LIB}"
10021         POSTGRESQL_LIB="${filteredlibs}"
10022     else
10023         # if/when anything else than PostgreSQL uses Kerberos,
10024         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10025         WITH_KRB5=
10026         WITH_GSSAPI=
10027         case "$_os" in
10028         Darwin)
10029             # macOS has system MIT Kerberos 5 since 10.4
10030             if test "$with_krb5" != "no"; then
10031                 WITH_KRB5=TRUE
10032                 save_LIBS=$LIBS
10033                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10034                 # that the libraries where these functions are located on macOS will change, is it?
10035                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10036                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10037                 KRB5_LIBS=$LIBS
10038                 LIBS=$save_LIBS
10039                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10040                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10041                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10042                 LIBS=$save_LIBS
10043             fi
10044             if test "$with_gssapi" != "no"; then
10045                 WITH_GSSAPI=TRUE
10046                 save_LIBS=$LIBS
10047                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10048                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10049                 GSSAPI_LIBS=$LIBS
10050                 LIBS=$save_LIBS
10051             fi
10052             ;;
10053         WINNT)
10054             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10055                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10056             fi
10057             ;;
10058         Linux|GNU|*BSD|DragonFly)
10059             if test "$with_krb5" != "no"; then
10060                 WITH_KRB5=TRUE
10061                 save_LIBS=$LIBS
10062                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10063                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10064                 KRB5_LIBS=$LIBS
10065                 LIBS=$save_LIBS
10066                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10067                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10068                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10069                 LIBS=$save_LIBS
10070             fi
10071             if test "$with_gssapi" != "no"; then
10072                 WITH_GSSAPI=TRUE
10073                 save_LIBS=$LIBS
10074                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10075                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10076                 GSSAPI_LIBS=$LIBS
10077                 LIBS=$save_LIBS
10078             fi
10079             ;;
10080         *)
10081             if test "$with_krb5" = "yes"; then
10082                 WITH_KRB5=TRUE
10083                 save_LIBS=$LIBS
10084                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10085                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10086                 KRB5_LIBS=$LIBS
10087                 LIBS=$save_LIBS
10088                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10089                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10090                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10091                 LIBS=$save_LIBS
10092             fi
10093             if test "$with_gssapi" = "yes"; then
10094                 WITH_GSSAPI=TRUE
10095                 save_LIBS=$LIBS
10096                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10097                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10098                 LIBS=$save_LIBS
10099                 GSSAPI_LIBS=$LIBS
10100             fi
10101         esac
10103         if test -n "$with_libpq_path"; then
10104             SYSTEM_POSTGRESQL=TRUE
10105             postgres_interface="external libpq"
10106             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10107             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10108         else
10109             SYSTEM_POSTGRESQL=
10110             postgres_interface="internal"
10111             POSTGRESQL_LIB=""
10112             POSTGRESQL_INC="%OVERRIDE_ME%"
10113             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10114         fi
10115     fi
10117     AC_MSG_CHECKING([PostgreSQL C interface])
10118     AC_MSG_RESULT([$postgres_interface])
10120     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10121         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10122         save_CFLAGS=$CFLAGS
10123         save_CPPFLAGS=$CPPFLAGS
10124         save_LIBS=$LIBS
10125         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10126         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10127         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10128         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10129             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10130         CFLAGS=$save_CFLAGS
10131         CPPFLAGS=$save_CPPFLAGS
10132         LIBS=$save_LIBS
10133     fi
10134     BUILD_POSTGRESQL_SDBC=TRUE
10135 else
10136     AC_MSG_RESULT([no])
10138 AC_SUBST(WITH_KRB5)
10139 AC_SUBST(WITH_GSSAPI)
10140 AC_SUBST(GSSAPI_LIBS)
10141 AC_SUBST(KRB5_LIBS)
10142 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10143 AC_SUBST(SYSTEM_POSTGRESQL)
10144 AC_SUBST(POSTGRESQL_INC)
10145 AC_SUBST(POSTGRESQL_LIB)
10147 dnl ===================================================================
10148 dnl Check for Firebird stuff
10149 dnl ===================================================================
10150 ENABLE_FIREBIRD_SDBC=
10151 if test "$enable_firebird_sdbc" = "yes" ; then
10152     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10154     dnl ===================================================================
10155     dnl Check for system Firebird
10156     dnl ===================================================================
10157     AC_MSG_CHECKING([which Firebird to use])
10158     if test "$with_system_firebird" = "yes"; then
10159         AC_MSG_RESULT([external])
10160         SYSTEM_FIREBIRD=TRUE
10161         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10162         if test -z "$FIREBIRDCONFIG"; then
10163             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10164             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10165                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10166             ])
10167             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10168         else
10169             AC_MSG_NOTICE([fb_config found])
10170             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10171             AC_MSG_CHECKING([for Firebird Client library])
10172             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10173             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10174             FilterLibs "${FIREBIRD_LIBS}"
10175             FIREBIRD_LIBS="${filteredlibs}"
10176         fi
10177         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10178         AC_MSG_CHECKING([Firebird version])
10179         if test -n "${FIREBIRD_VERSION}"; then
10180             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10181             if test "$FIREBIRD_MAJOR" -ge "3"; then
10182                 AC_MSG_RESULT([OK])
10183             else
10184                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10185             fi
10186         else
10187             save_CFLAGS="${CFLAGS}"
10188             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10189             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10190 #if defined(FB_API_VER) && FB_API_VER == 30
10191 int fb_api_is_30(void) { return 0; }
10192 #else
10193 #error "Wrong Firebird API version"
10194 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10195             CFLAGS="$save_CFLAGS"
10196         fi
10197         ENABLE_FIREBIRD_SDBC=TRUE
10198         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10199     elif test "$enable_database_connectivity" = no; then
10200         AC_MSG_RESULT([none])
10201     elif test "$cross_compiling" = "yes"; then
10202         AC_MSG_RESULT([none])
10203     else
10204         dnl Embedded Firebird has version 3.0
10205         dnl We need libatomic_ops for any non X86/X64 system
10206         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10207             dnl ===================================================================
10208             dnl Check for system libatomic_ops
10209             dnl ===================================================================
10210             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10211             if test "$with_system_libatomic_ops" = "yes"; then
10212                 SYSTEM_LIBATOMIC_OPS=TRUE
10213                 AC_CHECK_HEADERS(atomic_ops.h, [],
10214                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10215             else
10216                 SYSTEM_LIBATOMIC_OPS=
10217                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10218                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10219                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10220             fi
10221         fi
10223         AC_MSG_RESULT([internal])
10224         SYSTEM_FIREBIRD=
10225         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10226         FIREBIRD_LIBS="-lfbclient"
10228         if test "$with_system_libtommath" = "yes"; then
10229             SYSTEM_LIBTOMMATH=TRUE
10230             dnl check for tommath presence
10231             save_LIBS=$LIBS
10232             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10233             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10234             LIBS=$save_LIBS
10235         else
10236             SYSTEM_LIBTOMMATH=
10237             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10238             LIBTOMMATH_LIBS="-ltommath"
10239             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10240         fi
10242         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10243         ENABLE_FIREBIRD_SDBC=TRUE
10244         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10245     fi
10247 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10248 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10249 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10250 AC_SUBST(LIBATOMIC_OPS_LIBS)
10251 AC_SUBST(SYSTEM_FIREBIRD)
10252 AC_SUBST(FIREBIRD_CFLAGS)
10253 AC_SUBST(FIREBIRD_LIBS)
10254 AC_SUBST(SYSTEM_LIBTOMMATH)
10255 AC_SUBST(LIBTOMMATH_CFLAGS)
10256 AC_SUBST(LIBTOMMATH_LIBS)
10258 dnl ===================================================================
10259 dnl Check for system curl
10260 dnl ===================================================================
10261 AC_MSG_CHECKING([which libcurl to use])
10262 if test "$with_system_curl" = "auto"; then
10263     with_system_curl="$with_system_libs"
10266 if test "$enable_curl" = "yes" -a "$with_system_curl" = "yes"; then
10267     AC_MSG_RESULT([external])
10268     SYSTEM_CURL=TRUE
10270     # First try PKGCONFIG and then fall back
10271     PKG_CHECK_MODULES(CURL, libcurl >= 7.19.4,, [:])
10273     if test -n "$CURL_PKG_ERRORS"; then
10274         AC_PATH_PROG(CURLCONFIG, curl-config)
10275         if test -z "$CURLCONFIG"; then
10276             AC_MSG_ERROR([curl development files not found])
10277         fi
10278         CURL_LIBS=`$CURLCONFIG --libs`
10279         FilterLibs "${CURL_LIBS}"
10280         CURL_LIBS="${filteredlibs}"
10281         CURL_CFLAGS=$("$CURLCONFIG" --cflags | sed -e "s/-I/${ISYSTEM?}/g")
10282         curl_version=`$CURLCONFIG --version | $SED -e 's/^libcurl //'`
10284         AC_MSG_CHECKING([whether libcurl is >= 7.19.4])
10285         case $curl_version in
10286         dnl brackets doubled below because Autoconf uses them as m4 quote characters,
10287         dnl so they need to be doubled to end up in the configure script
10288         7.19.4|7.19.[[5-9]]|7.[[2-9]]?.*|7.???.*|[[8-9]].*|[[1-9]][[0-9]].*)
10289             AC_MSG_RESULT([yes])
10290             ;;
10291         *)
10292             AC_MSG_ERROR([no, you have $curl_version])
10293             ;;
10294         esac
10295     fi
10297     ENABLE_CURL=TRUE
10298 elif test "$enable_curl" = "no"; then
10299     AC_MSG_RESULT([none])
10300 else
10301     AC_MSG_RESULT([internal])
10302     SYSTEM_CURL=
10303     BUILD_TYPE="$BUILD_TYPE CURL"
10304     ENABLE_CURL=TRUE
10306 AC_SUBST(SYSTEM_CURL)
10307 AC_SUBST(CURL_CFLAGS)
10308 AC_SUBST(CURL_LIBS)
10309 AC_SUBST(ENABLE_CURL)
10311 dnl ===================================================================
10312 dnl Check for system boost
10313 dnl ===================================================================
10314 AC_MSG_CHECKING([which boost to use])
10315 if test "$with_system_boost" = "yes"; then
10316     AC_MSG_RESULT([external])
10317     SYSTEM_BOOST=TRUE
10318     AX_BOOST_BASE([1.66],,[AC_MSG_ERROR([no suitable Boost found])])
10319     AX_BOOST_DATE_TIME
10320     AX_BOOST_FILESYSTEM
10321     AX_BOOST_IOSTREAMS
10322     AX_BOOST_LOCALE
10323     AC_LANG_PUSH([C++])
10324     save_CXXFLAGS=$CXXFLAGS
10325     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10326     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10327        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10328     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10329        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10330     CXXFLAGS=$save_CXXFLAGS
10331     AC_LANG_POP([C++])
10332     # this is in m4/ax_boost_base.m4
10333     FilterLibs "${BOOST_LDFLAGS}"
10334     BOOST_LDFLAGS="${filteredlibs}"
10335 else
10336     AC_MSG_RESULT([internal])
10337     BUILD_TYPE="$BUILD_TYPE BOOST"
10338     SYSTEM_BOOST=
10339     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10340         # use warning-suppressing wrapper headers
10341         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10342     else
10343         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10344     fi
10346 AC_SUBST(SYSTEM_BOOST)
10348 dnl ===================================================================
10349 dnl Check for system mdds
10350 dnl ===================================================================
10351 libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], ["-I${WORKDIR}/UnpackedTarball/mdds/include"])
10353 dnl ===================================================================
10354 dnl Check for system cuckoo
10355 dnl ===================================================================
10356 AC_MSG_CHECKING([which cuckoo to use])
10357 if test "$with_system_cuckoo" = "yes"; then
10358     AC_MSG_RESULT([external])
10359     SYSTEM_CUCKOO=TRUE
10360     AC_LANG_PUSH([C++])
10361     AC_CHECK_HEADER([libcuckoo/cuckoohash_map.hh], [],
10362        [AC_MSG_ERROR([libcuckoo/cuckoohash_map.hh not found. install cuckoo])], [])
10363     AC_LANG_POP([C++])
10364 else
10365     AC_MSG_RESULT([internal])
10366     BUILD_TYPE="$BUILD_TYPE CUCKOO"
10367     SYSTEM_CUCKOO=
10368     CUCKOO_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/cuckoo"
10370 AC_SUBST([CUCKOO_CFLAGS])
10371 AC_SUBST([SYSTEM_CUCKOO])
10373 dnl ===================================================================
10374 dnl Check for system glm
10375 dnl ===================================================================
10376 AC_MSG_CHECKING([which glm to use])
10377 if test "$with_system_glm" = "yes"; then
10378     AC_MSG_RESULT([external])
10379     SYSTEM_GLM=TRUE
10380     AC_LANG_PUSH([C++])
10381     AC_CHECK_HEADER([glm/glm.hpp], [],
10382        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10383     AC_LANG_POP([C++])
10384 else
10385     AC_MSG_RESULT([internal])
10386     BUILD_TYPE="$BUILD_TYPE GLM"
10387     SYSTEM_GLM=
10388     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10390 AC_SUBST([GLM_CFLAGS])
10391 AC_SUBST([SYSTEM_GLM])
10393 dnl ===================================================================
10394 dnl Check for system odbc
10395 dnl ===================================================================
10396 AC_MSG_CHECKING([which odbc headers to use])
10397 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
10398     AC_MSG_RESULT([external])
10399     SYSTEM_ODBC_HEADERS=TRUE
10401     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10402         save_CPPFLAGS=$CPPFLAGS
10403         find_winsdk
10404         PathFormat "$winsdktest"
10405         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"
10406         AC_CHECK_HEADER(sqlext.h, [],
10407             [AC_MSG_ERROR(odbc not found. install odbc)],
10408             [#include <windows.h>])
10409         CPPFLAGS=$save_CPPFLAGS
10410     else
10411         AC_CHECK_HEADER(sqlext.h, [],
10412             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10413     fi
10414 elif test "$enable_database_connectivity" = no; then
10415     AC_MSG_RESULT([none])
10416 else
10417     AC_MSG_RESULT([internal])
10418     SYSTEM_ODBC_HEADERS=
10420 AC_SUBST(SYSTEM_ODBC_HEADERS)
10422 dnl ===================================================================
10423 dnl Check for system NSS
10424 dnl ===================================================================
10425 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10426     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8])
10427     AC_DEFINE(HAVE_FEATURE_NSS)
10428     ENABLE_NSS=TRUE
10429 elif test $_os != iOS ; then
10430     with_tls=openssl
10432 AC_SUBST(ENABLE_NSS)
10434 dnl ===================================================================
10435 dnl Enable LDAP support
10436 dnl ===================================================================
10438 if test "$test_openldap" = yes; then
10439     AC_MSG_CHECKING([whether to enable LDAP support])
10440     if test "$enable_ldap" = yes -a \( "$ENABLE_NSS" = TRUE -o "$with_system_openldap" = yes \); then
10441         AC_MSG_RESULT([yes])
10442         ENABLE_LDAP=TRUE
10443     else
10444         if test "$enable_ldap" != "yes"; then
10445             AC_MSG_RESULT([no])
10446         else
10447             AC_MSG_RESULT([no (needs NSS or system openldap)])
10448         fi
10449     fi
10451 dnl ===================================================================
10452 dnl Check for system openldap
10453 dnl ===================================================================
10455     if test "$ENABLE_LDAP" = TRUE; then
10456         AC_MSG_CHECKING([which openldap library to use])
10457         if test "$with_system_openldap" = yes; then
10458             AC_MSG_RESULT([external])
10459             SYSTEM_OPENLDAP=TRUE
10460             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10461             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10462             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10463         else
10464             AC_MSG_RESULT([internal])
10465             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10466         fi
10467     fi
10470 AC_SUBST(ENABLE_LDAP)
10471 AC_SUBST(SYSTEM_OPENLDAP)
10473 dnl ===================================================================
10474 dnl Check for TLS/SSL and cryptographic implementation to use
10475 dnl ===================================================================
10476 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10477 if test -n "$with_tls"; then
10478     case $with_tls in
10479     openssl)
10480         AC_DEFINE(USE_TLS_OPENSSL)
10481         TLS=OPENSSL
10482         AC_MSG_RESULT([$TLS])
10484         if test "$enable_openssl" != "yes"; then
10485             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10486         fi
10488         # warn that OpenSSL has been selected but not all TLS code has this option
10489         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS])
10490         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS or GNUTLS"
10491         ;;
10492     nss)
10493         AC_DEFINE(USE_TLS_NSS)
10494         TLS=NSS
10495         AC_MSG_RESULT([$TLS])
10496         ;;
10497     no)
10498         AC_MSG_RESULT([none])
10499         AC_MSG_WARN([Skipping TLS/SSL])
10500         ;;
10501     *)
10502         AC_MSG_RESULT([])
10503         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10504 openssl - OpenSSL
10505 nss - Mozilla's Network Security Services (NSS)
10506     ])
10507         ;;
10508     esac
10509 else
10510     # default to using NSS, it results in smaller oox lib
10511     AC_DEFINE(USE_TLS_NSS)
10512     TLS=NSS
10513     AC_MSG_RESULT([$TLS])
10515 AC_SUBST(TLS)
10517 dnl ===================================================================
10518 dnl Check for system sane
10519 dnl ===================================================================
10520 AC_MSG_CHECKING([which sane header to use])
10521 if test "$with_system_sane" = "yes"; then
10522     AC_MSG_RESULT([external])
10523     AC_CHECK_HEADER(sane/sane.h, [],
10524       [AC_MSG_ERROR(sane not found. install sane)], [])
10525 else
10526     AC_MSG_RESULT([internal])
10527     BUILD_TYPE="$BUILD_TYPE SANE"
10530 dnl ===================================================================
10531 dnl Check for system icu
10532 dnl ===================================================================
10533 SYSTEM_GENBRK=
10534 SYSTEM_GENCCODE=
10535 SYSTEM_GENCMN=
10537 ICU_MAJOR=69
10538 ICU_MINOR=1
10539 ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10540 ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10541 ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10542 AC_MSG_CHECKING([which icu to use])
10543 if test "$with_system_icu" = "yes"; then
10544     AC_MSG_RESULT([external])
10545     SYSTEM_ICU=TRUE
10546     AC_LANG_PUSH([C++])
10547     AC_MSG_CHECKING([for unicode/rbbi.h])
10548     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10549     AC_LANG_POP([C++])
10551     if test "$cross_compiling" != "yes"; then
10552         PKG_CHECK_MODULES(ICU, icu-i18n >= 4.6)
10553         ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10554         ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10555         ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10556     fi
10558     if test "$cross_compiling" = "yes" -a \( "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force" \); then
10559         ICU_VERSION_FOR_BUILD=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10560         ICU_MAJOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f1`
10561         ICU_MINOR_FOR_BUILD=`echo $ICU_VERSION_FOR_BUILD | cut -d"." -f2`
10562         AC_MSG_CHECKING([if MinGW and system versions of ICU are compatible])
10563         if test "$ICU_MAJOR" -eq "$ICU_MAJOR_FOR_BUILD" -a "$ICU_MINOR" -eq "$ICU_MINOR_FOR_BUILD"; then
10564             AC_MSG_RESULT([yes])
10565         else
10566             AC_MSG_RESULT([no])
10567             if test "$with_system_icu_for_build" != "force"; then
10568                 AC_MSG_ERROR([System ICU is not version-compatible with MinGW ICU.
10569 You can use --with-system-icu-for-build=force to use it anyway.])
10570             fi
10571         fi
10572     fi
10574     if test "$cross_compiling" != "yes" -o "$with_system_icu_for_build" = "yes" -o "$with_system_icu_for_build" = "force"; then
10575         # using the system icu tools can lead to version confusion, use the
10576         # ones from the build environment when cross-compiling
10577         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10578         if test -z "$SYSTEM_GENBRK"; then
10579             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10580         fi
10581         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10582         if test -z "$SYSTEM_GENCCODE"; then
10583             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10584         fi
10585         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10586         if test -z "$SYSTEM_GENCMN"; then
10587             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10588         fi
10589         if test "$ICU_MAJOR" -ge "49"; then
10590             ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE"
10591             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE"
10592             ICU_RECLASSIFIED_HEBREW_LETTER="TRUE"
10593         else
10594             ICU_RECLASSIFIED_PREPEND_SET_EMPTY=
10595             ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER=
10596             ICU_RECLASSIFIED_HEBREW_LETTER=
10597         fi
10598     fi
10600     if test "$cross_compiling" = "yes"; then
10601         if test "$ICU_MAJOR" -ge "50"; then
10602             AC_MSG_RESULT([Ignore ICU_MINOR as obviously the libraries don't include the minor version in their names any more])
10603             ICU_MINOR=""
10604         fi
10605     fi
10606 else
10607     AC_MSG_RESULT([internal])
10608     SYSTEM_ICU=
10609     BUILD_TYPE="$BUILD_TYPE ICU"
10610     # surprisingly set these only for "internal" (to be used by various other
10611     # external libs): the system icu-config is quite unhelpful and spits out
10612     # dozens of weird flags and also default path -I/usr/include
10613     ICU_CFLAGS="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10614     ICU_LIBS="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10616 if test "$ICU_MAJOR" -ge "59"; then
10617     # As of ICU 59 it defaults to typedef char16_t UChar; which is available
10618     # with -std=c++11 but not all external libraries can be built with that,
10619     # for those use a bit-compatible typedef uint16_t UChar; see
10620     # icu/source/common/unicode/umachine.h
10621     ICU_UCHAR_TYPE="-DUCHAR_TYPE=uint16_t"
10622 else
10623     ICU_UCHAR_TYPE=""
10625 AC_SUBST(SYSTEM_ICU)
10626 AC_SUBST(SYSTEM_GENBRK)
10627 AC_SUBST(SYSTEM_GENCCODE)
10628 AC_SUBST(SYSTEM_GENCMN)
10629 AC_SUBST(ICU_MAJOR)
10630 AC_SUBST(ICU_MINOR)
10631 AC_SUBST(ICU_RECLASSIFIED_PREPEND_SET_EMPTY)
10632 AC_SUBST(ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER)
10633 AC_SUBST(ICU_RECLASSIFIED_HEBREW_LETTER)
10634 AC_SUBST(ICU_CFLAGS)
10635 AC_SUBST(ICU_LIBS)
10636 AC_SUBST(ICU_UCHAR_TYPE)
10638 dnl ==================================================================
10639 dnl Breakpad
10640 dnl ==================================================================
10641 DEFAULT_CRASHDUMP_VALUE="true"
10642 AC_MSG_CHECKING([whether to enable breakpad])
10643 if test "$enable_breakpad" != yes; then
10644     AC_MSG_RESULT([no])
10645 else
10646     AC_MSG_RESULT([yes])
10647     ENABLE_BREAKPAD="TRUE"
10648     AC_DEFINE(ENABLE_BREAKPAD)
10649     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
10650     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
10652     AC_MSG_CHECKING([for disable crash dump])
10653     if test "$enable_crashdump" = no; then
10654         DEFAULT_CRASHDUMP_VALUE="false"
10655         AC_MSG_RESULT([yes])
10656     else
10657        AC_MSG_RESULT([no])
10658     fi
10660     AC_MSG_CHECKING([for crashreport config])
10661     if test "$with_symbol_config" = "no"; then
10662         BREAKPAD_SYMBOL_CONFIG="invalid"
10663         AC_MSG_RESULT([no])
10664     else
10665         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
10666         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
10667         AC_MSG_RESULT([yes])
10668     fi
10669     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
10671 AC_SUBST(ENABLE_BREAKPAD)
10672 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
10674 dnl ==================================================================
10675 dnl libfuzzer
10676 dnl ==================================================================
10677 AC_MSG_CHECKING([whether to enable fuzzers])
10678 if test "$enable_fuzzers" != yes; then
10679     AC_MSG_RESULT([no])
10680 else
10681     if test -z $LIB_FUZZING_ENGINE; then
10682       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
10683     fi
10684     AC_MSG_RESULT([yes])
10685     ENABLE_FUZZERS="TRUE"
10686     AC_DEFINE([ENABLE_FUZZERS],1)
10687     BUILD_TYPE="$BUILD_TYPE FUZZERS"
10689 AC_SUBST(LIB_FUZZING_ENGINE)
10690 AC_SUBST(ENABLE_FUZZERS)
10692 dnl ===================================================================
10693 dnl Orcus
10694 dnl ===================================================================
10695 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
10696 if test "$with_system_orcus" != "yes"; then
10697     if test "$SYSTEM_BOOST" = "TRUE"; then
10698         # ===========================================================
10699         # Determine if we are going to need to link with Boost.System
10700         # ===========================================================
10701         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
10702         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
10703         dnl in documentation has no effect.
10704         AC_MSG_CHECKING([if we need to link with Boost.System])
10705         AC_LANG_PUSH([C++])
10706         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
10707                 @%:@include <boost/version.hpp>
10708             ]],[[
10709                 #if BOOST_VERSION >= 105000
10710                 #   error yes, we need to link with Boost.System
10711                 #endif
10712             ]])],[
10713                 AC_MSG_RESULT([no])
10714             ],[
10715                 AC_MSG_RESULT([yes])
10716                 AX_BOOST_SYSTEM
10717         ])
10718         AC_LANG_POP([C++])
10719     fi
10721 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
10722 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
10723 AC_SUBST([BOOST_SYSTEM_LIB])
10724 AC_SUBST(SYSTEM_LIBORCUS)
10726 dnl ===================================================================
10727 dnl HarfBuzz
10728 dnl ===================================================================
10729 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3],
10730                          ["-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"],
10731                          ["-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"])
10733 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 0.9.42],
10734                          ["-I${WORKDIR}/UnpackedTarball/harfbuzz/src"],
10735                          ["-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"])
10737 if test "$COM" = "MSC"; then # override the above
10738     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
10739     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
10742 if test "$with_system_harfbuzz" = "yes"; then
10743     if test "$with_system_graphite" = "no"; then
10744         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
10745     fi
10746     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
10747     save_LIBS="$LIBS"
10748     save_CFLAGS="$CFLAGS"
10749     LIBS="$LIBS $HARFBUZZ_LIBS"
10750     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
10751     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
10752     LIBS="$save_LIBS"
10753     CFLAGS="$save_CFLAGS"
10754 else
10755     if test "$with_system_graphite" = "yes"; then
10756         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
10757     fi
10760 if test "$USING_X11" = TRUE; then
10761     AC_PATH_X
10762     AC_PATH_XTRA
10763     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
10765     if test -z "$x_includes"; then
10766         x_includes="default_x_includes"
10767     fi
10768     if test -z "$x_libraries"; then
10769         x_libraries="default_x_libraries"
10770     fi
10771     CFLAGS="$CFLAGS $X_CFLAGS"
10772     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
10773     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
10774 else
10775     x_includes="no_x_includes"
10776     x_libraries="no_x_libraries"
10779 if test "$USING_X11" = TRUE; then
10780     dnl ===================================================================
10781     dnl Check for extension headers
10782     dnl ===================================================================
10783     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
10784      [#include <X11/extensions/shape.h>])
10786     # vcl needs ICE and SM
10787     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
10788     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
10789         [AC_MSG_ERROR(ICE library not found)])
10790     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
10791     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
10792         [AC_MSG_ERROR(SM library not found)])
10795 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
10796     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
10797     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
10800 dnl ===================================================================
10801 dnl Check for system Xrender
10802 dnl ===================================================================
10803 AC_MSG_CHECKING([whether to use Xrender])
10804 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
10805     AC_MSG_RESULT([yes])
10806     PKG_CHECK_MODULES(XRENDER, xrender)
10807     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10808     FilterLibs "${XRENDER_LIBS}"
10809     XRENDER_LIBS="${filteredlibs}"
10810     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
10811       [AC_MSG_ERROR(libXrender not found or functional)], [])
10812     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
10813       [AC_MSG_ERROR(Xrender not found. install X)], [])
10814 else
10815     AC_MSG_RESULT([no])
10817 AC_SUBST(XRENDER_CFLAGS)
10818 AC_SUBST(XRENDER_LIBS)
10820 dnl ===================================================================
10821 dnl Check for XRandr
10822 dnl ===================================================================
10823 AC_MSG_CHECKING([whether to enable RandR support])
10824 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
10825     AC_MSG_RESULT([yes])
10826     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
10827     if test "$ENABLE_RANDR" != "TRUE"; then
10828         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
10829                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
10830         XRANDR_CFLAGS=" "
10831         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
10832           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
10833         XRANDR_LIBS="-lXrandr "
10834         ENABLE_RANDR="TRUE"
10835     fi
10836     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
10837     FilterLibs "${XRANDR_LIBS}"
10838     XRANDR_LIBS="${filteredlibs}"
10839 else
10840     ENABLE_RANDR=""
10841     AC_MSG_RESULT([no])
10843 AC_SUBST(XRANDR_CFLAGS)
10844 AC_SUBST(XRANDR_LIBS)
10845 AC_SUBST(ENABLE_RANDR)
10847 if test "$test_webdav" = yes; then
10848     if test -z "$with_webdav"; then
10849         WITH_WEBDAV=neon
10850         if test "$enable_mpl_subset" = yes; then
10851             WITH_WEBDAV=serf
10852         fi
10853     else
10854         WITH_WEBDAV="$with_webdav"
10855     fi
10858 AC_MSG_CHECKING([for webdav library])
10859 case "$WITH_WEBDAV" in
10860 serf)
10861     AC_MSG_RESULT([serf])
10862     # Check for system apr-util
10863     libo_CHECK_SYSTEM_MODULE([apr],[APR],[apr-util-1],
10864                              ["-I${WORKDIR}/UnpackedTarball/apr/include -I${WORKDIR}/UnpackedTarball/apr_util/include"],
10865                              ["-L${WORKDIR}/UnpackedTarball/apr/.libs -lapr-1 -L${WORKDIR}/UnpackedTarball/apr_util/.libs -laprutil-1"])
10866     if test "$COM" = "MSC"; then
10867         APR_LIB_DIR="LibR"
10868         test -n "${MSVC_USE_DEBUG_RUNTIME}" && APR_LIB_DIR="LibD"
10869         APR_LIBS="${WORKDIR}/UnpackedTarball/apr/${APR_LIB_DIR}/apr-1.lib ${WORKDIR}/UnpackedTarball/apr_util/${APR_LIB_DIR}/aprutil-1.lib"
10870     fi
10872     # Check for system serf
10873     libo_CHECK_SYSTEM_MODULE([serf],[SERF],[serf-1 >= 1.3.9])
10874     ;;
10875 neon)
10876     AC_MSG_RESULT([neon])
10877     # Check for system neon
10878     libo_CHECK_SYSTEM_MODULE([neon],[NEON],[neon >= 0.31.2])
10879     if test "$with_system_neon" = "yes"; then
10880         NEON_VERSION="`$PKG_CONFIG --modversion neon | $SED 's/\.//g'`"
10881     else
10882         NEON_VERSION=0312
10883     fi
10884     AC_SUBST(NEON_VERSION)
10885     ;;
10887     AC_MSG_RESULT([none, disabled])
10888     WITH_WEBDAV=""
10889     ;;
10890 esac
10891 AC_SUBST(WITH_WEBDAV)
10893 dnl ===================================================================
10894 dnl Check for disabling cve_tests
10895 dnl ===================================================================
10896 AC_MSG_CHECKING([whether to execute CVE tests])
10897 # If not explicitly enabled or disabled, default
10898 if test -z "$enable_cve_tests"; then
10899     case "$OS" in
10900     WNT)
10901         # Default cves off for Windows with its wild and wonderful
10902         # variety of AV software kicking in and panicking
10903         enable_cve_tests=no
10904         ;;
10905     *)
10906         # otherwise yes
10907         enable_cve_tests=yes
10908         ;;
10909     esac
10911 if test "$enable_cve_tests" = "no"; then
10912     AC_MSG_RESULT([no])
10913     DISABLE_CVE_TESTS=TRUE
10914     AC_SUBST(DISABLE_CVE_TESTS)
10915 else
10916     AC_MSG_RESULT([yes])
10919 dnl ===================================================================
10920 dnl Check for enabling chart XShape tests
10921 dnl ===================================================================
10922 AC_MSG_CHECKING([whether to execute chart XShape tests])
10923 if test "$enable_chart_tests" = "yes" -o '(' "$_os" = "WINNT" -a "$enable_chart_tests" != "no" ')'; then
10924     AC_MSG_RESULT([yes])
10925     ENABLE_CHART_TESTS=TRUE
10926     AC_SUBST(ENABLE_CHART_TESTS)
10927 else
10928     AC_MSG_RESULT([no])
10931 dnl ===================================================================
10932 dnl Check for system openssl
10933 dnl ===================================================================
10934 ENABLE_OPENSSL=
10935 AC_MSG_CHECKING([whether to disable OpenSSL usage])
10936 if test "$enable_openssl" = "yes"; then
10937     AC_MSG_RESULT([no])
10938     ENABLE_OPENSSL=TRUE
10939     if test "$_os" = Darwin ; then
10940         # OpenSSL is deprecated when building for 10.7 or later.
10941         #
10942         # http://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
10943         # http://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
10945         with_system_openssl=no
10946         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10947     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
10948             && test "$with_system_openssl" != "no"; then
10949         with_system_openssl=yes
10950         SYSTEM_OPENSSL=TRUE
10951         OPENSSL_CFLAGS=
10952         OPENSSL_LIBS="-lssl -lcrypto"
10953     else
10954         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
10955     fi
10956     if test "$with_system_openssl" = "yes"; then
10957         AC_MSG_CHECKING([whether openssl supports SHA512])
10958         AC_LANG_PUSH([C])
10959         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
10960             SHA512_CTX context;
10961 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
10962         AC_LANG_POP(C)
10963     fi
10964 else
10965     AC_MSG_RESULT([yes])
10967     # warn that although OpenSSL is disabled, system libraries may depend on it
10968     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
10969     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
10972 AC_SUBST([ENABLE_OPENSSL])
10974 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
10975     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
10976         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
10977         enable_cipher_openssl_backend=no
10978     else
10979         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
10980     fi
10982 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
10983 ENABLE_CIPHER_OPENSSL_BACKEND=
10984 if test "$enable_cipher_openssl_backend" = yes; then
10985     AC_MSG_RESULT([yes])
10986     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
10987 else
10988     AC_MSG_RESULT([no])
10990 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
10992 dnl ===================================================================
10993 dnl Select the crypto backends used by LO
10994 dnl ===================================================================
10996 if test "$build_crypto" = yes; then
10997     if test "$OS" = WNT; then
10998         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
10999         AC_DEFINE([USE_CRYPTO_MSCAPI])
11000     elif test "$ENABLE_NSS" = TRUE; then
11001         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11002         AC_DEFINE([USE_CRYPTO_NSS])
11003     fi
11006 dnl ===================================================================
11007 dnl Check for building gnutls
11008 dnl ===================================================================
11009 AC_MSG_CHECKING([whether to use gnutls])
11010 if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then
11011     AC_MSG_RESULT([yes])
11012     AM_PATH_LIBGCRYPT()
11013     PKG_CHECK_MODULES(GNUTLS, [gnutls],,
11014         AC_MSG_ERROR([[Disabling OpenSSL was requested, but GNUTLS is not
11015                       available in the system to use as replacement.]]))
11016     FilterLibs "${LIBGCRYPT_LIBS}"
11017     LIBGCRYPT_LIBS="${filteredlibs}"
11018 else
11019     AC_MSG_RESULT([no])
11022 AC_SUBST([LIBGCRYPT_CFLAGS])
11023 AC_SUBST([LIBGCRYPT_LIBS])
11025 dnl ===================================================================
11026 dnl Check for system redland
11027 dnl ===================================================================
11028 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11029 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11030 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11031 if test "$with_system_redland" = "yes"; then
11032     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11033             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11034 else
11035     RAPTOR_MAJOR="0"
11036     RASQAL_MAJOR="3"
11037     REDLAND_MAJOR="0"
11039 AC_SUBST(RAPTOR_MAJOR)
11040 AC_SUBST(RASQAL_MAJOR)
11041 AC_SUBST(REDLAND_MAJOR)
11043 dnl ===================================================================
11044 dnl Check for system hunspell
11045 dnl ===================================================================
11046 AC_MSG_CHECKING([which libhunspell to use])
11047 if test "$with_system_hunspell" = "yes"; then
11048     AC_MSG_RESULT([external])
11049     SYSTEM_HUNSPELL=TRUE
11050     AC_LANG_PUSH([C++])
11051     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11052     if test "$HUNSPELL_PC" != "TRUE"; then
11053         AC_CHECK_HEADER(hunspell.hxx, [],
11054             [
11055             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11056             [AC_MSG_ERROR(hunspell headers not found.)], [])
11057             ], [])
11058         AC_CHECK_LIB([hunspell], [main], [:],
11059            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11060         HUNSPELL_LIBS=-lhunspell
11061     fi
11062     AC_LANG_POP([C++])
11063     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11064     FilterLibs "${HUNSPELL_LIBS}"
11065     HUNSPELL_LIBS="${filteredlibs}"
11066 else
11067     AC_MSG_RESULT([internal])
11068     SYSTEM_HUNSPELL=
11069     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11070     if test "$COM" = "MSC"; then
11071         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11072     else
11073         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11074     fi
11075     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11077 AC_SUBST(SYSTEM_HUNSPELL)
11078 AC_SUBST(HUNSPELL_CFLAGS)
11079 AC_SUBST(HUNSPELL_LIBS)
11081 dnl ===================================================================
11082 dnl Check for system zxing
11083 dnl ===================================================================
11084 AC_MSG_CHECKING([whether to use zxing])
11085 if test "$enable_zxing" = "no"; then
11086     AC_MSG_RESULT([no])
11087     ENABLE_ZXING=
11088     SYSTEM_ZXING=
11089 else
11090     AC_MSG_RESULT([yes])
11091     ENABLE_ZXING=TRUE
11092     AC_MSG_CHECKING([which libzxing to use])
11093     if test "$with_system_zxing" = "yes"; then
11094         AC_MSG_RESULT([external])
11095         SYSTEM_ZXING=TRUE
11096         AC_LANG_PUSH([C++])
11097         AC_CHECK_HEADER(ZXing/MultiFormatWriter.h, [],
11098             [AC_MSG_ERROR(zxing headers not found.)], [#include <stdexcept>])
11099         ZXING_CFLAGS=-I/usr/include/ZXing
11100         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11101             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11102             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11103         AC_LANG_POP([C++])
11104         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11105         FilterLibs "${ZXING_LIBS}"
11106         ZXING_LIBS="${filteredlibs}"
11107     else
11108         AC_MSG_RESULT([internal])
11109         SYSTEM_ZXING=
11110         BUILD_TYPE="$BUILD_TYPE ZXING"
11111     fi
11112     if test "$ENABLE_ZXING" = TRUE; then
11113         AC_DEFINE(ENABLE_ZXING)
11114     fi
11116 AC_SUBST(SYSTEM_ZXING)
11117 AC_SUBST(ENABLE_ZXING)
11118 AC_SUBST(ZXING_CFLAGS)
11119 AC_SUBST(ZXING_LIBS)
11121 dnl ===================================================================
11122 dnl Check for system box2d
11123 dnl ===================================================================
11124 AC_MSG_CHECKING([which box2d to use])
11125 if test "$with_system_box2d" = "yes"; then
11126     AC_MSG_RESULT([external])
11127     SYSTEM_BOX2D=TRUE
11128     AC_LANG_PUSH([C++])
11129     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11130         [BOX2D_H_FOUND='FALSE'])
11131     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11132         _BOX2D_LIB=box2d
11133         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11134     else
11135         # fail this. there's no other alternative to check when we are here.
11136         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11137             [AC_MSG_ERROR(box2d headers not found.)])
11138         _BOX2D_LIB=Box2D
11139         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11140     fi
11141     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11142         [ AC_MSG_ERROR(box2d library not found.) ], [])
11143     BOX2D_LIBS=-l$_BOX2D_LIB
11144     AC_LANG_POP([C++])
11145     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11146     FilterLibs "${BOX2D_LIBS}"
11147     BOX2D_LIBS="${filteredlibs}"
11148 else
11149     AC_MSG_RESULT([internal])
11150     SYSTEM_BOX2D=
11151     BUILD_TYPE="$BUILD_TYPE BOX2D"
11153 AC_SUBST(SYSTEM_BOX2D)
11154 AC_SUBST(BOX2D_CFLAGS)
11155 AC_SUBST(BOX2D_LIBS)
11157 dnl ===================================================================
11158 dnl Checking for altlinuxhyph
11159 dnl ===================================================================
11160 AC_MSG_CHECKING([which altlinuxhyph to use])
11161 if test "$with_system_altlinuxhyph" = "yes"; then
11162     AC_MSG_RESULT([external])
11163     SYSTEM_HYPH=TRUE
11164     AC_CHECK_HEADER(hyphen.h, [],
11165        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11166     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11167        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11168        [#include <hyphen.h>])
11169     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11170         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11171     if test -z "$HYPHEN_LIB"; then
11172         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11173            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11174     fi
11175     if test -z "$HYPHEN_LIB"; then
11176         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11177            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11178     fi
11179 else
11180     AC_MSG_RESULT([internal])
11181     SYSTEM_HYPH=
11182     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11183     if test "$COM" = "MSC"; then
11184         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11185     else
11186         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11187     fi
11189 AC_SUBST(SYSTEM_HYPH)
11190 AC_SUBST(HYPHEN_LIB)
11192 dnl ===================================================================
11193 dnl Checking for mythes
11194 dnl ===================================================================
11195 AC_MSG_CHECKING([which mythes to use])
11196 if test "$with_system_mythes" = "yes"; then
11197     AC_MSG_RESULT([external])
11198     SYSTEM_MYTHES=TRUE
11199     AC_LANG_PUSH([C++])
11200     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11201     if test "$MYTHES_PKGCONFIG" = "no"; then
11202         AC_CHECK_HEADER(mythes.hxx, [],
11203             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11204         AC_CHECK_LIB([mythes-1.2], [main], [:],
11205             [ MYTHES_FOUND=no], [])
11206     if test "$MYTHES_FOUND" = "no"; then
11207         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11208                 [ MYTHES_FOUND=no], [])
11209     fi
11210     if test "$MYTHES_FOUND" = "no"; then
11211         AC_MSG_ERROR([mythes library not found!.])
11212     fi
11213     fi
11214     AC_LANG_POP([C++])
11215     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11216     FilterLibs "${MYTHES_LIBS}"
11217     MYTHES_LIBS="${filteredlibs}"
11218 else
11219     AC_MSG_RESULT([internal])
11220     SYSTEM_MYTHES=
11221     BUILD_TYPE="$BUILD_TYPE MYTHES"
11222     if test "$COM" = "MSC"; then
11223         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11224     else
11225         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11226     fi
11228 AC_SUBST(SYSTEM_MYTHES)
11229 AC_SUBST(MYTHES_CFLAGS)
11230 AC_SUBST(MYTHES_LIBS)
11232 dnl ===================================================================
11233 dnl How should we build the linear programming solver ?
11234 dnl ===================================================================
11236 ENABLE_COINMP=
11237 AC_MSG_CHECKING([whether to build with CoinMP])
11238 if test "$enable_coinmp" != "no"; then
11239     ENABLE_COINMP=TRUE
11240     AC_MSG_RESULT([yes])
11241     if test "$with_system_coinmp" = "yes"; then
11242         SYSTEM_COINMP=TRUE
11243         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11244         FilterLibs "${COINMP_LIBS}"
11245         COINMP_LIBS="${filteredlibs}"
11246     else
11247         BUILD_TYPE="$BUILD_TYPE COINMP"
11248     fi
11249 else
11250     AC_MSG_RESULT([no])
11252 AC_SUBST(ENABLE_COINMP)
11253 AC_SUBST(SYSTEM_COINMP)
11254 AC_SUBST(COINMP_CFLAGS)
11255 AC_SUBST(COINMP_LIBS)
11257 ENABLE_LPSOLVE=
11258 AC_MSG_CHECKING([whether to build with lpsolve])
11259 if test "$enable_lpsolve" != "no"; then
11260     ENABLE_LPSOLVE=TRUE
11261     AC_MSG_RESULT([yes])
11262 else
11263     AC_MSG_RESULT([no])
11265 AC_SUBST(ENABLE_LPSOLVE)
11267 if test "$ENABLE_LPSOLVE" = TRUE; then
11268     AC_MSG_CHECKING([which lpsolve to use])
11269     if test "$with_system_lpsolve" = "yes"; then
11270         AC_MSG_RESULT([external])
11271         SYSTEM_LPSOLVE=TRUE
11272         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11273            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11274         save_LIBS=$LIBS
11275         # some systems need this. Like Ubuntu...
11276         AC_CHECK_LIB(m, floor)
11277         AC_CHECK_LIB(dl, dlopen)
11278         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11279             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11280         LIBS=$save_LIBS
11281     else
11282         AC_MSG_RESULT([internal])
11283         SYSTEM_LPSOLVE=
11284         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11285     fi
11287 AC_SUBST(SYSTEM_LPSOLVE)
11289 dnl ===================================================================
11290 dnl Checking for libexttextcat
11291 dnl ===================================================================
11292 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11293 if test "$with_system_libexttextcat" = "yes"; then
11294     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11296 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11298 dnl ===================================================================
11299 dnl Checking for libnumbertext
11300 dnl ===================================================================
11301 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11302 if test "$with_system_libnumbertext" = "yes"; then
11303     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11304     SYSTEM_LIBNUMBERTEXT=YES
11305 else
11306     SYSTEM_LIBNUMBERTEXT=
11307     AC_LANG_PUSH([C++])
11308     save_CPPFLAGS=$CPPFLAGS
11309     CPPFLAGS="$CPPFLAGS $CXXFLAGS_CXX11"
11310     AC_CHECK_HEADERS([codecvt regex])
11311     AS_IF([test "x$ac_cv_header_codecvt" != xyes -o "x$ac_cv_header_regex" != xyes],
11312             [ LIBNUMBERTEXT_CFLAGS=''
11313               AC_MSG_WARN([No system-provided libnumbertext or codecvt/regex C++11 headers (min. libstdc++ 4.9).
11314                            Enable libnumbertext fallback (missing number to number name conversion).])
11315             ])
11316     CPPFLAGS=$save_CPPFLAGS
11317     AC_LANG_POP([C++])
11319 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11320 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11321 AC_SUBST(LIBNUMBERTEXT_CFLAGS)
11323 dnl ***************************************
11324 dnl testing libc version for Linux...
11325 dnl ***************************************
11326 if test "$_os" = "Linux"; then
11327     AC_MSG_CHECKING([whether the libc is recent enough])
11328     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11329     #include <features.h>
11330     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11331     #error glibc >= 2.1 is required
11332     #endif
11333     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11336 dnl =========================================
11337 dnl Check for uuidgen
11338 dnl =========================================
11339 if test "$_os" = "WINNT"; then
11340     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11341     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11342     UUIDGEN=uuidgen.exe
11343     AC_SUBST(UUIDGEN)
11344 else
11345     AC_PATH_PROG([UUIDGEN], [uuidgen])
11346     if test -z "$UUIDGEN"; then
11347         AC_MSG_WARN([uuid is needed for building installation sets])
11348     fi
11351 dnl ***************************************
11352 dnl Checking for bison and flex
11353 dnl ***************************************
11354 AC_PATH_PROG(BISON, bison)
11355 if test -z "$BISON"; then
11356     AC_MSG_ERROR([no bison found in \$PATH, install it])
11357 else
11358     AC_MSG_CHECKING([the bison version])
11359     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11360     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11361     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11362     dnl cause
11363     dnl
11364     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]
11365     dnl   typedef union YYSTYPE
11366     dnl           ~~~~~~^~~~~~~
11367     dnl
11368     dnl while at least 3.4.1 is know to be good:
11369     if test "$COMPILER_PLUGINS" = TRUE; then
11370         if test "$_bison_longver" -lt 2004; then
11371             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11372         fi
11373     else
11374         if test "$_bison_longver" -lt 2000; then
11375             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11376         fi
11377     fi
11379 AC_SUBST([BISON])
11381 AC_PATH_PROG(FLEX, flex)
11382 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11383     FLEX=`cygpath -m $FLEX`
11385 if test -z "$FLEX"; then
11386     AC_MSG_ERROR([no flex found in \$PATH, install it])
11387 else
11388     AC_MSG_CHECKING([the flex version])
11389     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11390     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11391         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11392     fi
11394 AC_SUBST([FLEX])
11395 dnl ***************************************
11396 dnl Checking for patch
11397 dnl ***************************************
11398 AC_PATH_PROG(PATCH, patch)
11399 if test -z "$PATCH"; then
11400     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11403 dnl On Solaris or macOS, check if --with-gnu-patch was used
11404 if test "$_os" = "SunOS" -o "$_os" = "Darwin"; then
11405     if test -z "$with_gnu_patch"; then
11406         GNUPATCH=$PATCH
11407     else
11408         if test -x "$with_gnu_patch"; then
11409             GNUPATCH=$with_gnu_patch
11410         else
11411             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11412         fi
11413     fi
11415     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11416     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11417         AC_MSG_RESULT([yes])
11418     else
11419         AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11420     fi
11421 else
11422     GNUPATCH=$PATCH
11425 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11426     GNUPATCH=`cygpath -m $GNUPATCH`
11429 dnl We also need to check for --with-gnu-cp
11431 if test -z "$with_gnu_cp"; then
11432     # check the place where the good stuff is hidden on Solaris...
11433     if test -x /usr/gnu/bin/cp; then
11434         GNUCP=/usr/gnu/bin/cp
11435     else
11436         AC_PATH_PROGS(GNUCP, gnucp cp)
11437     fi
11438     if test -z $GNUCP; then
11439         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11440     fi
11441 else
11442     if test -x "$with_gnu_cp"; then
11443         GNUCP=$with_gnu_cp
11444     else
11445         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11446     fi
11449 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11450     GNUCP=`cygpath -m $GNUCP`
11453 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11454 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11455     AC_MSG_RESULT([yes])
11456 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11457     AC_MSG_RESULT([yes])
11458 else
11459     case "$build_os" in
11460     darwin*|macos*|netbsd*|openbsd*|freebsd*|dragonfly*|aix*)
11461         x_GNUCP=[\#]
11462         GNUCP=''
11463         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11464         ;;
11465     *)
11466         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11467         ;;
11468     esac
11471 AC_SUBST(GNUPATCH)
11472 AC_SUBST(GNUCP)
11473 AC_SUBST(x_GNUCP)
11475 dnl ***************************************
11476 dnl testing assembler path
11477 dnl ***************************************
11478 ML_EXE=""
11479 if test "$_os" = "WINNT"; then
11480     case "$WIN_HOST_ARCH" in
11481     x86) assembler=ml.exe ;;
11482     x64) assembler=ml64.exe ;;
11483     arm64) assembler=armasm64.exe ;;
11484     esac
11486     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11487     if test -f "$MSVC_HOST_PATH/$assembler"; then
11488         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11489         AC_MSG_RESULT([$ML_EXE])
11490     else
11491         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11492     fi
11495 AC_SUBST(ML_EXE)
11497 dnl ===================================================================
11498 dnl We need zip and unzip
11499 dnl ===================================================================
11500 AC_PATH_PROG(ZIP, zip)
11501 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11502 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11503     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],,)
11506 AC_PATH_PROG(UNZIP, unzip)
11507 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11509 dnl ===================================================================
11510 dnl Zip must be a specific type for different build types.
11511 dnl ===================================================================
11512 if test $build_os = cygwin; then
11513     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11514         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11515     fi
11518 dnl ===================================================================
11519 dnl We need touch with -h option support.
11520 dnl ===================================================================
11521 AC_PATH_PROG(TOUCH, touch)
11522 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11523 touch "$WARNINGS_FILE"
11524 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11525     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],,)
11528 dnl ===================================================================
11529 dnl Check for system epoxy
11530 dnl ===================================================================
11531 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"])
11533 dnl ===================================================================
11534 dnl Set vcl option: coordinate device in double or sal_Int32
11535 dnl ===================================================================
11537 dnl disabled for now, we don't want subtle differences between OSs
11538 dnl AC_MSG_CHECKING([Type to use for Device Pixel coordinates])
11539 dnl if test "$_os" = "Darwin" -o  $_os = iOS ; then
11540 dnl     AC_DEFINE(VCL_FLOAT_DEVICE_PIXEL)
11541 dnl     AC_MSG_RESULT([double])
11542 dnl else
11543 dnl     AC_MSG_RESULT([sal_Int32])
11544 dnl fi
11546 dnl ===================================================================
11547 dnl Show which vclplugs will be built.
11548 dnl ===================================================================
11549 R=""
11550 if test "$USING_X11" != TRUE; then
11551     enable_gtk3=no
11554 ENABLE_GTK3=""
11555 if test "x$enable_gtk3" = "xyes"; then
11556     ENABLE_GTK3="TRUE"
11557     AC_DEFINE(ENABLE_GTK3)
11558     R="$R gtk3"
11560 AC_SUBST(ENABLE_GTK3)
11562 ENABLE_GTK3_KDE5=""
11563 if test "x$enable_gtk3_kde5" = "xyes"; then
11564     ENABLE_GTK3_KDE5="TRUE"
11565     AC_DEFINE(ENABLE_GTK3_KDE5)
11566     R="$R gtk3_kde5"
11568 AC_SUBST(ENABLE_GTK3_KDE5)
11570 ENABLE_GTK4=""
11571 if test "x$enable_gtk4" = "xyes"; then
11572     ENABLE_GTK4="TRUE"
11573     AC_DEFINE(ENABLE_GTK4)
11574     R="$R gtk4"
11576 AC_SUBST(ENABLE_GTK4)
11578 ENABLE_QT5=""
11579 if test "x$enable_qt5" = "xyes"; then
11580     ENABLE_QT5="TRUE"
11581     AC_DEFINE(ENABLE_QT5)
11582     R="$R qt5"
11584 AC_SUBST(ENABLE_QT5)
11586 ENABLE_QT6=""
11587 if test "x$enable_qt6" = "xyes"; then
11588     ENABLE_QT6="TRUE"
11589     AC_DEFINE(ENABLE_QT6)
11590     R="$R qt6"
11592 AC_SUBST(ENABLE_QT6)
11595 ENABLE_KF5=""
11596 if test "x$enable_kf5" = "xyes"; then
11597     ENABLE_KF5="TRUE"
11598     AC_DEFINE(ENABLE_KF5)
11599     R="$R kf5"
11601 AC_SUBST(ENABLE_KF5)
11603 if test "x$USING_X11" = "xyes"; then
11604     R="$R gen"
11607 if test "$_os" = "WINNT"; then
11608     R="$R win"
11609 elif test "$_os" = "Darwin"; then
11610     R="$R osx"
11611 elif test "$_os" = "iOS"; then
11612     R="ios"
11613 elif test "$_os" = Android; then
11614     R="android"
11617 build_vcl_plugins="$R"
11618 if test -z "$build_vcl_plugins"; then
11619     build_vcl_plugins=" none"
11621 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11622 VCL_PLUGIN_INFO=$R
11623 AC_SUBST([VCL_PLUGIN_INFO])
11625 dnl ===================================================================
11626 dnl Check for GTK libraries
11627 dnl ===================================================================
11629 GTK3_CFLAGS=""
11630 GTK3_LIBS=""
11631 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11632     if test "$with_system_cairo" = no; then
11633         add_warning 'Non-system cairo combined with gtk3 is assumed to cause trouble; proceed at your own risk.'
11634     fi
11635     : ${with_system_cairo:=yes}
11636     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)
11637     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11638     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11639     FilterLibs "${GTK3_LIBS}"
11640     GTK3_LIBS="${filteredlibs}"
11642     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11643     if test "$with_system_epoxy" != "yes"; then
11644         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11645         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11646                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11647     fi
11649 AC_SUBST(GTK3_LIBS)
11650 AC_SUBST(GTK3_CFLAGS)
11652 GTK4_CFLAGS=""
11653 GTK4_LIBS=""
11654 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11655     if test "$with_system_cairo" = no; then
11656         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11657     fi
11658     : ${with_system_cairo:=yes}
11659     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11660     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11661     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11662     FilterLibs "${GTK4_LIBS}"
11663     GTK4_LIBS="${filteredlibs}"
11665     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11666     if test "$with_system_epoxy" != "yes"; then
11667         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11668         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11669                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11670     fi
11672 AC_SUBST(GTK4_LIBS)
11673 AC_SUBST(GTK4_CFLAGS)
11675 if test "$enable_introspection" = yes; then
11676     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11677         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11678     else
11679         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11680     fi
11683 dnl ===================================================================
11684 dnl check for dbus support
11685 dnl ===================================================================
11686 ENABLE_DBUS=""
11687 DBUS_CFLAGS=""
11688 DBUS_LIBS=""
11689 DBUS_GLIB_CFLAGS=""
11690 DBUS_GLIB_LIBS=""
11691 DBUS_HAVE_GLIB=""
11693 if test "$enable_dbus" = "no"; then
11694     test_dbus=no
11697 AC_MSG_CHECKING([whether to enable DBUS support])
11698 if test "$test_dbus" = "yes"; then
11699     ENABLE_DBUS="TRUE"
11700     AC_MSG_RESULT([yes])
11701     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
11702     AC_DEFINE(ENABLE_DBUS)
11703     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11704     FilterLibs "${DBUS_LIBS}"
11705     DBUS_LIBS="${filteredlibs}"
11707     # Glib is needed for BluetoothServer
11708     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
11709     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
11710         [
11711             DBUS_HAVE_GLIB="TRUE"
11712             AC_DEFINE(DBUS_HAVE_GLIB,1)
11713         ],
11714         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
11715     )
11716 else
11717     AC_MSG_RESULT([no])
11720 AC_SUBST(ENABLE_DBUS)
11721 AC_SUBST(DBUS_CFLAGS)
11722 AC_SUBST(DBUS_LIBS)
11723 AC_SUBST(DBUS_GLIB_CFLAGS)
11724 AC_SUBST(DBUS_GLIB_LIBS)
11725 AC_SUBST(DBUS_HAVE_GLIB)
11727 AC_MSG_CHECKING([whether to enable Impress remote control])
11728 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
11729     AC_MSG_RESULT([yes])
11730     ENABLE_SDREMOTE=TRUE
11731     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
11733     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
11734         # The Bluetooth code doesn't compile with macOS SDK 10.15
11735         if test "$enable_sdremote_bluetooth" = yes; then
11736             AC_MSG_ERROR([macOS SDK $with_macosx_sdk does not currently support --enable-sdremote-bluetooth])
11737         fi
11738         enable_sdremote_bluetooth=no
11739     fi
11740     # If not explicitly enabled or disabled, default
11741     if test -z "$enable_sdremote_bluetooth"; then
11742         case "$OS" in
11743         LINUX|MACOSX|WNT)
11744             # Default to yes for these
11745             enable_sdremote_bluetooth=yes
11746             ;;
11747         *)
11748             # otherwise no
11749             enable_sdremote_bluetooth=no
11750             ;;
11751         esac
11752     fi
11753     # $enable_sdremote_bluetooth is guaranteed non-empty now
11755     if test "$enable_sdremote_bluetooth" != "no"; then
11756         if test "$OS" = "LINUX"; then
11757             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
11758                 AC_MSG_RESULT([yes])
11759                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
11760                 dnl ===================================================================
11761                 dnl Check for system bluez
11762                 dnl ===================================================================
11763                 AC_MSG_CHECKING([which Bluetooth header to use])
11764                 if test "$with_system_bluez" = "yes"; then
11765                     AC_MSG_RESULT([external])
11766                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
11767                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
11768                     SYSTEM_BLUEZ=TRUE
11769                 else
11770                     AC_MSG_RESULT([internal])
11771                     SYSTEM_BLUEZ=
11772                 fi
11773             else
11774                 AC_MSG_RESULT([no, dbus disabled])
11775                 ENABLE_SDREMOTE_BLUETOOTH=
11776                 SYSTEM_BLUEZ=
11777             fi
11778         else
11779             AC_MSG_RESULT([yes])
11780             ENABLE_SDREMOTE_BLUETOOTH=TRUE
11781             SYSTEM_BLUEZ=
11782         fi
11783     else
11784         AC_MSG_RESULT([no])
11785         ENABLE_SDREMOTE_BLUETOOTH=
11786         SYSTEM_BLUEZ=
11787     fi
11788 else
11789     ENABLE_SDREMOTE=
11790     SYSTEM_BLUEZ=
11791     AC_MSG_RESULT([no])
11793 AC_SUBST(ENABLE_SDREMOTE)
11794 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
11795 AC_SUBST(SYSTEM_BLUEZ)
11797 dnl ===================================================================
11798 dnl Check whether to enable GIO support
11799 dnl ===================================================================
11800 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11801     AC_MSG_CHECKING([whether to enable GIO support])
11802     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
11803         dnl Need at least 2.26 for the dbus support.
11804         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
11805                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
11806         if test "$ENABLE_GIO" = "TRUE"; then
11807             AC_DEFINE(ENABLE_GIO)
11808             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11809             FilterLibs "${GIO_LIBS}"
11810             GIO_LIBS="${filteredlibs}"
11811         fi
11812     else
11813         AC_MSG_RESULT([no])
11814     fi
11816 AC_SUBST(ENABLE_GIO)
11817 AC_SUBST(GIO_CFLAGS)
11818 AC_SUBST(GIO_LIBS)
11821 dnl ===================================================================
11823 SPLIT_APP_MODULES=""
11824 if test "$enable_split_app_modules" = "yes"; then
11825     SPLIT_APP_MODULES="TRUE"
11827 AC_SUBST(SPLIT_APP_MODULES)
11829 SPLIT_OPT_FEATURES=""
11830 if test "$enable_split_opt_features" = "yes"; then
11831     SPLIT_OPT_FEATURES="TRUE"
11833 AC_SUBST(SPLIT_OPT_FEATURES)
11835 dnl ===================================================================
11836 dnl Check whether the GStreamer libraries are available.
11837 dnl ===================================================================
11839 ENABLE_GSTREAMER_1_0=""
11841 if test "$test_gstreamer_1_0" = yes; then
11843     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
11844     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
11845         ENABLE_GSTREAMER_1_0="TRUE"
11846         AC_MSG_RESULT([yes])
11847         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
11848         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11849         FilterLibs "${GSTREAMER_1_0_LIBS}"
11850         GSTREAMER_1_0_LIBS="${filteredlibs}"
11851         AC_DEFINE(ENABLE_GSTREAMER_1_0)
11852     else
11853         AC_MSG_RESULT([no])
11854     fi
11856 AC_SUBST(GSTREAMER_1_0_CFLAGS)
11857 AC_SUBST(GSTREAMER_1_0_LIBS)
11858 AC_SUBST(ENABLE_GSTREAMER_1_0)
11860 ENABLE_OPENGL_TRANSITIONS=
11861 ENABLE_OPENGL_CANVAS=
11862 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
11863    : # disable
11864 elif test "$_os" = "Darwin"; then
11865     # We use frameworks on macOS, no need for detail checks
11866     ENABLE_OPENGL_TRANSITIONS=TRUE
11867     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11868     ENABLE_OPENGL_CANVAS=TRUE
11869 elif test $_os = WINNT; then
11870     ENABLE_OPENGL_TRANSITIONS=TRUE
11871     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11872     ENABLE_OPENGL_CANVAS=TRUE
11873 else
11874     if test "$USING_X11" = TRUE; then
11875         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
11876         ENABLE_OPENGL_TRANSITIONS=TRUE
11877         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
11878         ENABLE_OPENGL_CANVAS=TRUE
11879     fi
11882 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
11883 AC_SUBST(ENABLE_OPENGL_CANVAS)
11885 dnl =================================================
11886 dnl Check whether to build with OpenCL support.
11887 dnl =================================================
11889 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
11890     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
11891     # platform (optional at run-time, used through clew).
11892     BUILD_TYPE="$BUILD_TYPE OPENCL"
11893     AC_DEFINE(HAVE_FEATURE_OPENCL)
11896 dnl =================================================
11897 dnl Check whether to build with dconf support.
11898 dnl =================================================
11900 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
11901     PKG_CHECK_MODULES([DCONF], [dconf >= 0.15.2], [], [
11902         if test "$enable_dconf" = yes; then
11903             AC_MSG_ERROR([dconf not found])
11904         else
11905             enable_dconf=no
11906         fi])
11908 AC_MSG_CHECKING([whether to enable dconf])
11909 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
11910     DCONF_CFLAGS=
11911     DCONF_LIBS=
11912     ENABLE_DCONF=
11913     AC_MSG_RESULT([no])
11914 else
11915     ENABLE_DCONF=TRUE
11916     AC_DEFINE(ENABLE_DCONF)
11917     AC_MSG_RESULT([yes])
11919 AC_SUBST([DCONF_CFLAGS])
11920 AC_SUBST([DCONF_LIBS])
11921 AC_SUBST([ENABLE_DCONF])
11923 # pdf import?
11924 AC_MSG_CHECKING([whether to build the PDF import feature])
11925 ENABLE_PDFIMPORT=
11926 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
11927     AC_MSG_RESULT([yes])
11928     ENABLE_PDFIMPORT=TRUE
11929     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
11930 else
11931     AC_MSG_RESULT([no])
11934 # Pdfium?
11935 AC_MSG_CHECKING([whether to build PDFium])
11936 ENABLE_PDFIUM=
11937 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
11938     AC_MSG_RESULT([yes])
11939     ENABLE_PDFIUM=TRUE
11940     BUILD_TYPE="$BUILD_TYPE PDFIUM"
11941 else
11942     AC_MSG_RESULT([no])
11944 AC_SUBST(ENABLE_PDFIUM)
11946 dnl ===================================================================
11947 dnl Check for poppler
11948 dnl ===================================================================
11949 ENABLE_POPPLER=
11950 AC_MSG_CHECKING([whether to build Poppler])
11951 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
11952     AC_MSG_RESULT([yes])
11953     ENABLE_POPPLER=TRUE
11954     AC_DEFINE(HAVE_FEATURE_POPPLER)
11955 else
11956     AC_MSG_RESULT([no])
11958 AC_SUBST(ENABLE_POPPLER)
11960 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
11961     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
11964 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
11965     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
11968 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
11969     dnl ===================================================================
11970     dnl Check for system poppler
11971     dnl ===================================================================
11972     AC_MSG_CHECKING([which PDF import poppler to use])
11973     if test "$with_system_poppler" = "yes"; then
11974         AC_MSG_RESULT([external])
11975         SYSTEM_POPPLER=TRUE
11976         PKG_CHECK_MODULES( POPPLER, poppler >= 0.12.0 )
11977         AC_LANG_PUSH([C++])
11978         save_CXXFLAGS=$CXXFLAGS
11979         save_CPPFLAGS=$CPPFLAGS
11980         CXXFLAGS="$CXXFLAGS $POPPLER_CFLAGS"
11981         CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
11982         AC_CHECK_HEADER([cpp/poppler-version.h],
11983             [AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)],
11984             [])
11985         CXXFLAGS=$save_CXXFLAGS
11986         CPPFLAGS=$save_CPPFLAGS
11987         AC_LANG_POP([C++])
11988         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11990         FilterLibs "${POPPLER_LIBS}"
11991         POPPLER_LIBS="${filteredlibs}"
11992     else
11993         AC_MSG_RESULT([internal])
11994         SYSTEM_POPPLER=
11995         BUILD_TYPE="$BUILD_TYPE POPPLER"
11996         AC_DEFINE([HAVE_POPPLER_VERSION_H], 1)
11997     fi
11998     AC_DEFINE([ENABLE_PDFIMPORT],1)
12000 AC_SUBST(ENABLE_PDFIMPORT)
12001 AC_SUBST(SYSTEM_POPPLER)
12002 AC_SUBST(POPPLER_CFLAGS)
12003 AC_SUBST(POPPLER_LIBS)
12005 # Skia?
12006 ENABLE_SKIA=
12007 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12008     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12009     if test "$SYSTEM_FREETYPE" = TRUE; then
12010         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12011             [skia_freetype_ok=yes],
12012             [skia_freetype_ok=no])
12013     else # internal is ok
12014         skia_freetype_ok=yes
12015     fi
12016     AC_MSG_CHECKING([whether to build Skia])
12017     if test "$skia_freetype_ok" = "yes"; then
12018         if test "$enable_skia" = "debug"; then
12019             AC_MSG_RESULT([yes (debug)])
12020             ENABLE_SKIA_DEBUG=TRUE
12021         else
12022             AC_MSG_RESULT([yes])
12023             ENABLE_SKIA_DEBUG=
12024         fi
12025         ENABLE_SKIA=TRUE
12026         AC_DEFINE(HAVE_FEATURE_SKIA)
12027         BUILD_TYPE="$BUILD_TYPE SKIA"
12029         if test "$OS" = "MACOSX"; then
12030             AC_DEFINE(SK_SUPPORT_GPU,1)
12031             AC_DEFINE(SK_METAL,1)
12032             SKIA_GPU=METAL
12033             AC_SUBST(SKIA_GPU)
12034         else
12035             AC_DEFINE(SK_SUPPORT_GPU,1)
12036             AC_DEFINE(SK_VULKAN,1)
12037             SKIA_GPU=VULKAN
12038             AC_SUBST(SKIA_GPU)
12039         fi
12041         if test -n "$MAC_OS_X_VERSION_MIN_REQUIRED" && test "$MAC_OS_X_VERSION_MIN_REQUIRED" -lt "101200"; then
12042             SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX=1
12043             AC_SUBST(SKIA_DISABLE_VMA_USE_STL_SHARED_MUTEX)
12044         fi
12045     else
12046         AC_MSG_RESULT([no (freetype too old)])
12047         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12048     fi
12050 else
12051     AC_MSG_CHECKING([whether to build Skia])
12052     AC_MSG_RESULT([no])
12054 AC_SUBST(ENABLE_SKIA)
12055 AC_SUBST(ENABLE_SKIA_DEBUG)
12057 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12058 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12059 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12060 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12061 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12062 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12063 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12064 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12065 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12066 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12067 HAVE_LO_CLANG_DLLEXPORTINLINES=
12069 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12070     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12071         AC_MSG_CHECKING([for Clang])
12072         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12073     else
12074         if test "$_os" = "WINNT"; then
12075             AC_MSG_CHECKING([for clang-cl])
12076             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12077                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12078                 dnl explicitly set -m32/-m64
12079                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12080                 LO_CLANG_CXX="$LO_CLANG_CC"
12081                 AC_MSG_RESULT([$LO_CLANG_CC])
12082             else
12083                 AC_MSG_RESULT([no])
12084             fi
12085         else
12086             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12087             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12088         fi
12089     fi
12090     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12091         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12092         clang2_ver=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12093         if test "$clang2_ver" -lt 50002; then
12094             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12095             LO_CLANG_CC=
12096             LO_CLANG_CXX=
12097         fi
12098     fi
12099     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12100         save_CXX="$CXX"
12101         CXX="$LO_CLANG_CXX"
12102         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12103         AC_LANG_PUSH([C++])
12104         save_CXXFLAGS=$CXXFLAGS
12105         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12106         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12107                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12108                 AC_MSG_RESULT([yes])
12109             ], [AC_MSG_RESULT([no])])
12110         CXXFLAGS=$save_CXXFLAGS
12111         AC_LANG_POP([C++])
12112         CXX="$save_CXX"
12113         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12114             AC_MSG_ERROR([Clang compiler does not support -Zc:dllexportInlines-. The Skia library needs to be built using a newer Clang version, or use --disable-skia.])
12115         fi
12116     fi
12117     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12118         # Skia is the default on Windows, so hard-require Clang.
12119         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12120         if test "$_os" = "WINNT"; then
12121             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang.])
12122         else
12123             AC_MSG_WARN([Clang compiler not found.])
12124         fi
12125     else
12127         save_CXX="$CXX"
12128         CXX="$LO_CLANG_CXX"
12129         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12130         flag_sse2=-msse2
12131         flag_ssse3=-mssse3
12132         flag_sse41=-msse4.1
12133         flag_sse42=-msse4.2
12134         flag_avx=-mavx
12135         flag_avx2=-mavx2
12136         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12137         flag_avx512f=-mavx512f
12138         flag_f16c=-mf16c
12139         flag_fma=-mfma
12141         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12142         AC_LANG_PUSH([C++])
12143         save_CXXFLAGS=$CXXFLAGS
12144         CXXFLAGS="$CXXFLAGS $flag_sse2"
12145         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12146             #include <emmintrin.h>
12147             int main () {
12148                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12149                 c = _mm_xor_si128 (a, b);
12150                 return 0;
12151             }
12152             ])],
12153             [can_compile_sse2=yes],
12154             [can_compile_sse2=no])
12155         AC_LANG_POP([C++])
12156         CXXFLAGS=$save_CXXFLAGS
12157         AC_MSG_RESULT([${can_compile_sse2}])
12158         if test "${can_compile_sse2}" = "yes" ; then
12159             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12160         fi
12162         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12163         AC_LANG_PUSH([C++])
12164         save_CXXFLAGS=$CXXFLAGS
12165         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12166         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12167             #include <tmmintrin.h>
12168             int main () {
12169                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12170                 c = _mm_maddubs_epi16 (a, b);
12171                 return 0;
12172             }
12173             ])],
12174             [can_compile_ssse3=yes],
12175             [can_compile_ssse3=no])
12176         AC_LANG_POP([C++])
12177         CXXFLAGS=$save_CXXFLAGS
12178         AC_MSG_RESULT([${can_compile_ssse3}])
12179         if test "${can_compile_ssse3}" = "yes" ; then
12180             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12181         fi
12183         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12184         AC_LANG_PUSH([C++])
12185         save_CXXFLAGS=$CXXFLAGS
12186         CXXFLAGS="$CXXFLAGS $flag_sse41"
12187         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12188             #include <smmintrin.h>
12189             int main () {
12190                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12191                 c = _mm_cmpeq_epi64 (a, b);
12192                 return 0;
12193             }
12194             ])],
12195             [can_compile_sse41=yes],
12196             [can_compile_sse41=no])
12197         AC_LANG_POP([C++])
12198         CXXFLAGS=$save_CXXFLAGS
12199         AC_MSG_RESULT([${can_compile_sse41}])
12200         if test "${can_compile_sse41}" = "yes" ; then
12201             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12202         fi
12204         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12205         AC_LANG_PUSH([C++])
12206         save_CXXFLAGS=$CXXFLAGS
12207         CXXFLAGS="$CXXFLAGS $flag_sse42"
12208         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12209             #include <nmmintrin.h>
12210             int main () {
12211                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12212                 c = _mm_cmpgt_epi64 (a, b);
12213                 return 0;
12214             }
12215             ])],
12216             [can_compile_sse42=yes],
12217             [can_compile_sse42=no])
12218         AC_LANG_POP([C++])
12219         CXXFLAGS=$save_CXXFLAGS
12220         AC_MSG_RESULT([${can_compile_sse42}])
12221         if test "${can_compile_sse42}" = "yes" ; then
12222             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12223         fi
12225         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12226         AC_LANG_PUSH([C++])
12227         save_CXXFLAGS=$CXXFLAGS
12228         CXXFLAGS="$CXXFLAGS $flag_avx"
12229         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12230             #include <immintrin.h>
12231             int main () {
12232                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12233                 c = _mm256_xor_ps(a, b);
12234                 return 0;
12235             }
12236             ])],
12237             [can_compile_avx=yes],
12238             [can_compile_avx=no])
12239         AC_LANG_POP([C++])
12240         CXXFLAGS=$save_CXXFLAGS
12241         AC_MSG_RESULT([${can_compile_avx}])
12242         if test "${can_compile_avx}" = "yes" ; then
12243             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12244         fi
12246         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12247         AC_LANG_PUSH([C++])
12248         save_CXXFLAGS=$CXXFLAGS
12249         CXXFLAGS="$CXXFLAGS $flag_avx2"
12250         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12251             #include <immintrin.h>
12252             int main () {
12253                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12254                 c = _mm256_maddubs_epi16(a, b);
12255                 return 0;
12256             }
12257             ])],
12258             [can_compile_avx2=yes],
12259             [can_compile_avx2=no])
12260         AC_LANG_POP([C++])
12261         CXXFLAGS=$save_CXXFLAGS
12262         AC_MSG_RESULT([${can_compile_avx2}])
12263         if test "${can_compile_avx2}" = "yes" ; then
12264             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12265         fi
12267         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12268         AC_LANG_PUSH([C++])
12269         save_CXXFLAGS=$CXXFLAGS
12270         CXXFLAGS="$CXXFLAGS $flag_avx512"
12271         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12272             #include <immintrin.h>
12273             int main () {
12274                 __m512i a = _mm512_loadu_si512(0);
12275                 return 0;
12276             }
12277             ])],
12278             [can_compile_avx512=yes],
12279             [can_compile_avx512=no])
12280         AC_LANG_POP([C++])
12281         CXXFLAGS=$save_CXXFLAGS
12282         AC_MSG_RESULT([${can_compile_avx512}])
12283         if test "${can_compile_avx512}" = "yes" ; then
12284             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12285             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12286         fi
12288         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12289         AC_LANG_PUSH([C++])
12290         save_CXXFLAGS=$CXXFLAGS
12291         CXXFLAGS="$CXXFLAGS $flag_f16c"
12292         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12293             #include <immintrin.h>
12294             int main () {
12295                 __m128i a = _mm_set1_epi32 (0);
12296                 __m128 c;
12297                 c = _mm_cvtph_ps(a);
12298                 return 0;
12299             }
12300             ])],
12301             [can_compile_f16c=yes],
12302             [can_compile_f16c=no])
12303         AC_LANG_POP([C++])
12304         CXXFLAGS=$save_CXXFLAGS
12305         AC_MSG_RESULT([${can_compile_f16c}])
12306         if test "${can_compile_f16c}" = "yes" ; then
12307             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12308         fi
12310         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12311         AC_LANG_PUSH([C++])
12312         save_CXXFLAGS=$CXXFLAGS
12313         CXXFLAGS="$CXXFLAGS $flag_fma"
12314         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12315             #include <immintrin.h>
12316             int main () {
12317                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12318                 d = _mm256_fmadd_ps(a, b, c);
12319                 return 0;
12320             }
12321             ])],
12322             [can_compile_fma=yes],
12323             [can_compile_fma=no])
12324         AC_LANG_POP([C++])
12325         CXXFLAGS=$save_CXXFLAGS
12326         AC_MSG_RESULT([${can_compile_fma}])
12327         if test "${can_compile_fma}" = "yes" ; then
12328             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12329         fi
12331         CXX="$save_CXX"
12332     fi
12335 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12337 UNCACHED_CLANG_CC="$LO_CLANG_CC"
12338 UNCACHED_CLANG_CXX="$LO_CLANG_CXX"
12339 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12340     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12341     AC_LANG_PUSH([C])
12342     save_CC="$CC"
12343     CC="$LO_CLANG_CC"
12344     save_CFLAGS=$CFLAGS
12345     CFLAGS="$CFLAGS --ccache-skip -O2"
12346     dnl an empty program will do, we're checking the compiler flags
12347     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12348                       [use_ccache=yes], [use_ccache=no])
12349     CFLAGS=$save_CFLAGS
12350     CC=$save_CC
12351     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12352         AC_MSG_RESULT([yes])
12353     else
12354         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12355         AC_MSG_RESULT([no])
12356     fi
12357     AC_LANG_POP([C])
12359     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12360     AC_LANG_PUSH([C++])
12361     save_CXX="$CXX"
12362     CXX="$LO_CLANG_CXX"
12363     save_CXXFLAGS=$CXXFLAGS
12364     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
12365     dnl an empty program will do, we're checking the compiler flags
12366     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12367                       [use_ccache=yes], [use_ccache=no])
12368     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12369         AC_MSG_RESULT([yes])
12370     else
12371         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12372         AC_MSG_RESULT([no])
12373     fi
12374     CXXFLAGS=$save_CXXFLAGS
12375     CXX=$save_CXX
12376     AC_LANG_POP([C++])
12379 AC_SUBST(UNCACHED_CC)
12380 AC_SUBST(UNCACHED_CXX)
12381 AC_SUBST(LO_CLANG_CC)
12382 AC_SUBST(LO_CLANG_CXX)
12383 AC_SUBST(UNCACHED_CLANG_CC)
12384 AC_SUBST(UNCACHED_CLANG_CXX)
12385 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12386 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12387 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12388 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12389 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12390 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12391 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12392 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12393 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12394 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12395 AC_SUBST(CLANG_USE_LD)
12396 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12398 SYSTEM_GPGMEPP=
12400 if test "$enable_gpgmepp" = no; then
12401     AC_MSG_CHECKING([whether to enable gpgmepp])
12402     AC_MSG_RESULT([no])
12403 elif test "$enable_mpl_subset" = "yes"; then
12404     AC_MSG_CHECKING([whether gpgmepp should be disabled due to building just MPL])
12405     AC_MSG_RESULT([yes])
12406 elif test "$enable_fuzzers" = "yes"; then
12407     AC_MSG_CHECKING([whether gpgmepp should be disabled due to oss-fuzz])
12408     AC_MSG_RESULT([yes])
12409 elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
12410     dnl ===================================================================
12411     dnl Check for system gpgme
12412     dnl ===================================================================
12413     AC_MSG_CHECKING([which gpgmepp to use])
12414     if test "$with_system_gpgmepp" = "yes"; then
12415         AC_MSG_RESULT([external])
12416         SYSTEM_GPGMEPP=TRUE
12418         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12419         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12420             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp development package])], [])
12421         # progress_callback is the only func with plain C linkage
12422         # checking for it also filters out older, KDE-dependent libgpgmepp versions
12423         AC_CHECK_LIB(gpgmepp, progress_callback, [ GPGMEPP_LIBS=-lgpgmepp ],
12424             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12425         AC_CHECK_HEADER(gpgme.h, [],
12426             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12427     else
12428         AC_MSG_RESULT([internal])
12429         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12430         AC_DEFINE([GPGME_CAN_EXPORT_MINIMAL_KEY])
12432         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12433         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12434         if test "$_os" != "WINNT"; then
12435             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12436             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12437         fi
12438     fi
12439     ENABLE_GPGMEPP=TRUE
12440     AC_DEFINE([HAVE_FEATURE_GPGME])
12441     AC_PATH_PROG(GPG, gpg)
12442     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12443     # so let's exclude that manually for the moment
12444     if test -n "$GPG" -a "$_os" != "WINNT"; then
12445         # make sure we not only have a working gpgme, but a full working
12446         # gpg installation to run OpenPGP signature verification
12447         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12448     fi
12449     if test "$_os" = "Linux"; then
12450       uid=`id -u`
12451       AC_MSG_CHECKING([for /run/user/$uid])
12452       if test -d /run/user/$uid; then
12453         AC_MSG_RESULT([yes])
12454         AC_PATH_PROG(GPGCONF, gpgconf)
12456         # Older versions of gpgconf are not working as expected, since
12457         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12458         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12459         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12460         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12461         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12462         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12463         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12464           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12465           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12466           if $GPGCONF --dump-options > /dev/null ; then
12467             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12468               AC_MSG_RESULT([yes])
12469               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12470               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12471             else
12472               AC_MSG_RESULT([no])
12473             fi
12474           else
12475             AC_MSG_RESULT([no. missing or broken gpgconf?])
12476           fi
12477         else
12478           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12479         fi
12480       else
12481         AC_MSG_RESULT([no])
12482      fi
12483    fi
12485 AC_SUBST(ENABLE_GPGMEPP)
12486 AC_SUBST(SYSTEM_GPGMEPP)
12487 AC_SUBST(GPG_ERROR_CFLAGS)
12488 AC_SUBST(GPG_ERROR_LIBS)
12489 AC_SUBST(LIBASSUAN_CFLAGS)
12490 AC_SUBST(LIBASSUAN_LIBS)
12491 AC_SUBST(GPGMEPP_CFLAGS)
12492 AC_SUBST(GPGMEPP_LIBS)
12494 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12495 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12496     AC_MSG_RESULT([yes])
12497     ENABLE_MEDIAWIKI=TRUE
12498     BUILD_TYPE="$BUILD_TYPE XSLTML"
12499     if test  "x$with_java" = "xno"; then
12500         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12501     fi
12502 else
12503     AC_MSG_RESULT([no])
12504     ENABLE_MEDIAWIKI=
12505     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12507 AC_SUBST(ENABLE_MEDIAWIKI)
12509 AC_MSG_CHECKING([whether to build the Report Builder])
12510 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12511     AC_MSG_RESULT([yes])
12512     ENABLE_REPORTBUILDER=TRUE
12513     AC_MSG_CHECKING([which jfreereport libs to use])
12514     if test "$with_system_jfreereport" = "yes"; then
12515         SYSTEM_JFREEREPORT=TRUE
12516         AC_MSG_RESULT([external])
12517         if test -z $SAC_JAR; then
12518             SAC_JAR=/usr/share/java/sac.jar
12519         fi
12520         if ! test -f $SAC_JAR; then
12521              AC_MSG_ERROR(sac.jar not found.)
12522         fi
12524         if test -z $LIBXML_JAR; then
12525             if test -f /usr/share/java/libxml-1.0.0.jar; then
12526                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12527             elif test -f /usr/share/java/libxml.jar; then
12528                 LIBXML_JAR=/usr/share/java/libxml.jar
12529             else
12530                 AC_MSG_ERROR(libxml.jar replacement not found.)
12531             fi
12532         elif ! test -f $LIBXML_JAR; then
12533             AC_MSG_ERROR(libxml.jar not found.)
12534         fi
12536         if test -z $FLUTE_JAR; then
12537             if test -f /usr/share/java/flute-1.3.0.jar; then
12538                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12539             elif test -f /usr/share/java/flute.jar; then
12540                 FLUTE_JAR=/usr/share/java/flute.jar
12541             else
12542                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12543             fi
12544         elif ! test -f $FLUTE_JAR; then
12545             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12546         fi
12548         if test -z $JFREEREPORT_JAR; then
12549             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12550                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12551             elif test -f /usr/share/java/flow-engine.jar; then
12552                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12553             else
12554                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12555             fi
12556         elif ! test -f  $JFREEREPORT_JAR; then
12557                 AC_MSG_ERROR(jfreereport.jar not found.)
12558         fi
12560         if test -z $LIBLAYOUT_JAR; then
12561             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12562                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12563             elif test -f /usr/share/java/liblayout.jar; then
12564                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12565             else
12566                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12567             fi
12568         elif ! test -f $LIBLAYOUT_JAR; then
12569                 AC_MSG_ERROR(liblayout.jar not found.)
12570         fi
12572         if test -z $LIBLOADER_JAR; then
12573             if test -f /usr/share/java/libloader-1.0.0.jar; then
12574                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12575             elif test -f /usr/share/java/libloader.jar; then
12576                 LIBLOADER_JAR=/usr/share/java/libloader.jar
12577             else
12578                 AC_MSG_ERROR(libloader.jar replacement not found.)
12579             fi
12580         elif ! test -f  $LIBLOADER_JAR; then
12581             AC_MSG_ERROR(libloader.jar not found.)
12582         fi
12584         if test -z $LIBFORMULA_JAR; then
12585             if test -f /usr/share/java/libformula-0.2.0.jar; then
12586                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
12587             elif test -f /usr/share/java/libformula.jar; then
12588                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
12589             else
12590                 AC_MSG_ERROR(libformula.jar replacement not found.)
12591             fi
12592         elif ! test -f $LIBFORMULA_JAR; then
12593                 AC_MSG_ERROR(libformula.jar not found.)
12594         fi
12596         if test -z $LIBREPOSITORY_JAR; then
12597             if test -f /usr/share/java/librepository-1.0.0.jar; then
12598                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
12599             elif test -f /usr/share/java/librepository.jar; then
12600                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
12601             else
12602                 AC_MSG_ERROR(librepository.jar replacement not found.)
12603             fi
12604         elif ! test -f $LIBREPOSITORY_JAR; then
12605             AC_MSG_ERROR(librepository.jar not found.)
12606         fi
12608         if test -z $LIBFONTS_JAR; then
12609             if test -f /usr/share/java/libfonts-1.0.0.jar; then
12610                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
12611             elif test -f /usr/share/java/libfonts.jar; then
12612                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
12613             else
12614                 AC_MSG_ERROR(libfonts.jar replacement not found.)
12615             fi
12616         elif ! test -f $LIBFONTS_JAR; then
12617                 AC_MSG_ERROR(libfonts.jar not found.)
12618         fi
12620         if test -z $LIBSERIALIZER_JAR; then
12621             if test -f /usr/share/java/libserializer-1.0.0.jar; then
12622                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
12623             elif test -f /usr/share/java/libserializer.jar; then
12624                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
12625             else
12626                 AC_MSG_ERROR(libserializer.jar replacement not found.)
12627             fi
12628         elif ! test -f $LIBSERIALIZER_JAR; then
12629                 AC_MSG_ERROR(libserializer.jar not found.)
12630         fi
12632         if test -z $LIBBASE_JAR; then
12633             if test -f /usr/share/java/libbase-1.0.0.jar; then
12634                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
12635             elif test -f /usr/share/java/libbase.jar; then
12636                 LIBBASE_JAR=/usr/share/java/libbase.jar
12637             else
12638                 AC_MSG_ERROR(libbase.jar replacement not found.)
12639             fi
12640         elif ! test -f $LIBBASE_JAR; then
12641             AC_MSG_ERROR(libbase.jar not found.)
12642         fi
12644     else
12645         AC_MSG_RESULT([internal])
12646         SYSTEM_JFREEREPORT=
12647         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
12648         NEED_ANT=TRUE
12649     fi
12650 else
12651     AC_MSG_RESULT([no])
12652     ENABLE_REPORTBUILDER=
12653     SYSTEM_JFREEREPORT=
12655 AC_SUBST(ENABLE_REPORTBUILDER)
12656 AC_SUBST(SYSTEM_JFREEREPORT)
12657 AC_SUBST(SAC_JAR)
12658 AC_SUBST(LIBXML_JAR)
12659 AC_SUBST(FLUTE_JAR)
12660 AC_SUBST(JFREEREPORT_JAR)
12661 AC_SUBST(LIBBASE_JAR)
12662 AC_SUBST(LIBLAYOUT_JAR)
12663 AC_SUBST(LIBLOADER_JAR)
12664 AC_SUBST(LIBFORMULA_JAR)
12665 AC_SUBST(LIBREPOSITORY_JAR)
12666 AC_SUBST(LIBFONTS_JAR)
12667 AC_SUBST(LIBSERIALIZER_JAR)
12669 # scripting provider for BeanShell?
12670 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
12671 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
12672     AC_MSG_RESULT([yes])
12673     ENABLE_SCRIPTING_BEANSHELL=TRUE
12675     dnl ===================================================================
12676     dnl Check for system beanshell
12677     dnl ===================================================================
12678     AC_MSG_CHECKING([which beanshell to use])
12679     if test "$with_system_beanshell" = "yes"; then
12680         AC_MSG_RESULT([external])
12681         SYSTEM_BSH=TRUE
12682         if test -z $BSH_JAR; then
12683             BSH_JAR=/usr/share/java/bsh.jar
12684         fi
12685         if ! test -f $BSH_JAR; then
12686             AC_MSG_ERROR(bsh.jar not found.)
12687         fi
12688     else
12689         AC_MSG_RESULT([internal])
12690         SYSTEM_BSH=
12691         BUILD_TYPE="$BUILD_TYPE BSH"
12692     fi
12693 else
12694     AC_MSG_RESULT([no])
12695     ENABLE_SCRIPTING_BEANSHELL=
12696     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
12698 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
12699 AC_SUBST(SYSTEM_BSH)
12700 AC_SUBST(BSH_JAR)
12702 # scripting provider for JavaScript?
12703 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
12704 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
12705     AC_MSG_RESULT([yes])
12706     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
12708     dnl ===================================================================
12709     dnl Check for system rhino
12710     dnl ===================================================================
12711     AC_MSG_CHECKING([which rhino to use])
12712     if test "$with_system_rhino" = "yes"; then
12713         AC_MSG_RESULT([external])
12714         SYSTEM_RHINO=TRUE
12715         if test -z $RHINO_JAR; then
12716             RHINO_JAR=/usr/share/java/js.jar
12717         fi
12718         if ! test -f $RHINO_JAR; then
12719             AC_MSG_ERROR(js.jar not found.)
12720         fi
12721     else
12722         AC_MSG_RESULT([internal])
12723         SYSTEM_RHINO=
12724         BUILD_TYPE="$BUILD_TYPE RHINO"
12725         NEED_ANT=TRUE
12726     fi
12727 else
12728     AC_MSG_RESULT([no])
12729     ENABLE_SCRIPTING_JAVASCRIPT=
12730     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
12732 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
12733 AC_SUBST(SYSTEM_RHINO)
12734 AC_SUBST(RHINO_JAR)
12736 # This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64
12737 # paths should be added to library search path. So lets put all 64-bit
12738 # platforms there.
12739 supports_multilib=
12740 case "$host_cpu" in
12741 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el)
12742     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
12743         supports_multilib="yes"
12744     fi
12745     ;;
12747     ;;
12748 esac
12750 dnl ===================================================================
12751 dnl QT5 Integration
12752 dnl ===================================================================
12754 QT5_CFLAGS=""
12755 QT5_LIBS=""
12756 QMAKE5="qmake"
12757 MOC5="moc"
12758 QT5_GOBJECT_CFLAGS=""
12759 QT5_GOBJECT_LIBS=""
12760 QT5_HAVE_GOBJECT=""
12761 QT5_PLATFORMS_SRCDIR=""
12762 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
12763         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
12764         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
12765 then
12766     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
12767     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
12769     if test -n "$supports_multilib"; then
12770         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
12771     fi
12773     qt5_test_include="QtWidgets/qapplication.h"
12774     if test "$_os" = "Emscripten"; then
12775         qt5_test_library="libQt5Widgets.a"
12776     else
12777         qt5_test_library="libQt5Widgets.so"
12778     fi
12780     dnl Check for qmake5
12781     if test -n "$QT5DIR"; then
12782         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
12783     else
12784         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
12785     fi
12786     if test "$QMAKE5" = "no"; then
12787         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12788     else
12789         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
12790         if test -z "$qmake5_test_ver"; then
12791             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12792         fi
12793         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
12794         qt5_minimal_minor="6"
12795         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
12796             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
12797         else
12798             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
12799         fi
12800     fi
12802     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
12803     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
12804     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
12805     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
12807     AC_MSG_CHECKING([for Qt5 headers])
12808     qt5_incdir="no"
12809     for inc_dir in $qt5_incdirs; do
12810         if test -r "$inc_dir/$qt5_test_include"; then
12811             qt5_incdir="$inc_dir"
12812             break
12813         fi
12814     done
12815     AC_MSG_RESULT([$qt5_incdir])
12816     if test "x$qt5_incdir" = "xno"; then
12817         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12818     fi
12819     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
12820     AC_LANG_PUSH([C++])
12821     save_CPPFLAGS=$CPPFLAGS
12822     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
12823     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12824         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12825     CPPFLAGS=$save_CPPFLAGS
12826     AC_LANG_POP([C++])
12828     AC_MSG_CHECKING([for Qt5 libraries])
12829     qt5_libdir="no"
12830     for lib_dir in $qt5_libdirs; do
12831         if test -r "$lib_dir/$qt5_test_library"; then
12832             qt5_libdir="$lib_dir"
12833             break
12834         fi
12835     done
12836     AC_MSG_RESULT([$qt5_libdir])
12837     if test "x$qt5_libdir" = "xno"; then
12838         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
12839     fi
12841     if test "$_os" = "Emscripten"; then
12842         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12843             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12844         fi
12845         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
12846             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
12847         fi
12848     fi
12850     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12851     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12852     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
12853     if test "$_os" = "Emscripten"; then
12854         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
12855     fi
12857     if test "$USING_X11" = TRUE; then
12858         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
12859         PKG_CHECK_MODULES(QT5_XCB_ICCCM,[xcb-icccm],[
12860             QT5_HAVE_XCB_ICCCM=1
12861             AC_DEFINE(QT5_HAVE_XCB_ICCCM)
12862         ],[
12863             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)])
12864             add_warning "XCB ICCCM not found, which is needed for Qt versions (< 5.12) on some WMs to correctly group dialogs (like QTBUG-46626)"
12865         ])
12866         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
12867         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
12868         QT5_USING_X11=1
12869         AC_DEFINE(QT5_USING_X11)
12870     fi
12872     dnl Check for Meta Object Compiler
12874     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
12875     if test "$MOC5" = "no"; then
12876         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
12877 the root of your Qt installation by exporting QT5DIR before running "configure".])
12878     fi
12880     if test "$test_gstreamer_1_0" = yes; then
12881         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
12882                 QT5_HAVE_GOBJECT=1
12883                 AC_DEFINE(QT5_HAVE_GOBJECT)
12884             ],
12885             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
12886         )
12887     fi
12889 AC_SUBST(QT5_CFLAGS)
12890 AC_SUBST(QT5_LIBS)
12891 AC_SUBST(MOC5)
12892 AC_SUBST(QT5_GOBJECT_CFLAGS)
12893 AC_SUBST(QT5_GOBJECT_LIBS)
12894 AC_SUBST(QT5_HAVE_GOBJECT)
12895 AC_SUBST(QT5_PLATFORMS_SRCDIR)
12897 dnl ===================================================================
12898 dnl QT6 Integration
12899 dnl ===================================================================
12901 QT6_CFLAGS=""
12902 QT6_LIBS=""
12903 QMAKE6="qmake"
12904 MOC6="moc"
12905 QT6_PLATFORMS_SRCDIR=""
12906 if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
12907 then
12908     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
12909     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
12911     if test -n "$supports_multilib"; then
12912         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
12913     fi
12915     qt6_test_include="QtWidgets/qapplication.h"
12916     if test "$_os" = "Emscripten"; then
12917         qt6_test_library="libQt6Widgets.a"
12918     else
12919         qt6_test_library="libQt6Widgets.so"
12920     fi
12922     dnl Check for qmake6
12923     if test -n "$QT6DIR"; then
12924         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
12925     else
12926         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake], no)
12927     fi
12928     if test "$QMAKE6" = "no"; then
12929         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12930     else
12931         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
12932         if test -z "$qmake6_test_ver"; then
12933             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12934         fi
12935         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
12936     fi
12938     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
12939     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
12940     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
12941     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
12943     AC_MSG_CHECKING([for Qt6 headers])
12944     qt6_incdir="no"
12945     for inc_dir in $qt6_incdirs; do
12946         if test -r "$inc_dir/$qt6_test_include"; then
12947             qt6_incdir="$inc_dir"
12948             break
12949         fi
12950     done
12951     AC_MSG_RESULT([$qt6_incdir])
12952     if test "x$qt6_incdir" = "xno"; then
12953         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12954     fi
12955     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
12956     AC_LANG_PUSH([C++])
12957     save_CPPFLAGS=$CPPFLAGS
12958     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
12959     AC_CHECK_HEADER(QtCore/qconfig.h, [],
12960         [AC_MSG_ERROR(qconfig.h header not found.)], [])
12961     CPPFLAGS=$save_CPPFLAGS
12962     AC_LANG_POP([C++])
12964     AC_MSG_CHECKING([for Qt6 libraries])
12965     qt6_libdir="no"
12966     for lib_dir in $qt6_libdirs; do
12967         if test -r "$lib_dir/$qt6_test_library"; then
12968             qt6_libdir="$lib_dir"
12969             break
12970         fi
12971     done
12972     AC_MSG_RESULT([$qt6_libdir])
12973     if test "x$qt6_libdir" = "xno"; then
12974         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
12975     fi
12977     if test "$_os" = "Emscripten"; then
12978         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
12979             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
12980         fi
12981         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
12982             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
12983         fi
12984     fi
12986     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
12987     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12988     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
12989     if test "$_os" = "Emscripten"; then
12990         QT6_LIBS="$QT6_LIBS -lqtpcre2 -lQt6EventDispatcherSupport -lQt6FontDatabaseSupport -L${qt6_platformsdir} -lqwasm"
12991     fi
12993     if test "$USING_X11" = TRUE; then
12994         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
12995         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
12996         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
12997         QT6_USING_X11=1
12998         AC_DEFINE(QT6_USING_X11)
12999     fi
13001     dnl Check for Meta Object Compiler
13003     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$PATH])
13004     if test "$MOC6" = "no"; then
13005         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13006 the root of your Qt installation by exporting QT6DIR before running "configure".])
13007     fi
13009 AC_SUBST(QT6_CFLAGS)
13010 AC_SUBST(QT6_LIBS)
13011 AC_SUBST(MOC6)
13012 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13014 dnl ===================================================================
13015 dnl KF5 Integration
13016 dnl ===================================================================
13018 KF5_CFLAGS=""
13019 KF5_LIBS=""
13020 KF5_CONFIG="kf5-config"
13021 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13022         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13023 then
13024     if test "$OS" = "HAIKU"; then
13025         haiku_arch="`echo $RTL_ARCH | tr X x`"
13026         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13027         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13028     fi
13030     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13031     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13032     if test -n "$supports_multilib"; then
13033         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13034     fi
13036     kf5_test_include="KF5/kcoreaddons_version.h"
13037     kf5_test_library="libKF5CoreAddons.so"
13038     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13040     dnl kf5 KDE4 support compatibility installed
13041     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13042     if test "$KF5_CONFIG" != "no"; then
13043         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13044         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13045     fi
13047     dnl Check for KF5 headers
13048     AC_MSG_CHECKING([for KF5 headers])
13049     kf5_incdir="no"
13050     for kf5_check in $kf5_incdirs; do
13051         if test -r "$kf5_check/$kf5_test_include"; then
13052             kf5_incdir="$kf5_check/KF5"
13053             break
13054         fi
13055     done
13056     AC_MSG_RESULT([$kf5_incdir])
13057     if test "x$kf5_incdir" = "xno"; then
13058         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13059     fi
13061     dnl Check for KF5 libraries
13062     AC_MSG_CHECKING([for KF5 libraries])
13063     kf5_libdir="no"
13064     for kf5_check in $kf5_libdirs; do
13065         if test -r "$kf5_check/$kf5_test_library"; then
13066             kf5_libdir="$kf5_check"
13067             break
13068         fi
13069     done
13071     AC_MSG_RESULT([$kf5_libdir])
13072     if test "x$kf5_libdir" = "xno"; then
13073         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13074     fi
13076     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"
13077     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13078     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13080     if test "$USING_X11" = TRUE; then
13081         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13082     fi
13084     AC_LANG_PUSH([C++])
13085     save_CXXFLAGS=$CXXFLAGS
13086     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13087     AC_MSG_CHECKING([whether KDE is >= 5.0])
13088        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13089 #include <kcoreaddons_version.h>
13091 int main(int argc, char **argv) {
13092        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13093        else return 1;
13095        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13096     CXXFLAGS=$save_CXXFLAGS
13097     AC_LANG_POP([C++])
13099 AC_SUBST(KF5_CFLAGS)
13100 AC_SUBST(KF5_LIBS)
13102 dnl ===================================================================
13103 dnl Test whether to include Evolution 2 support
13104 dnl ===================================================================
13105 AC_MSG_CHECKING([whether to enable evolution 2 support])
13106 if test "$enable_evolution2" = yes; then
13107     AC_MSG_RESULT([yes])
13108     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13109     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13110     FilterLibs "${GOBJECT_LIBS}"
13111     GOBJECT_LIBS="${filteredlibs}"
13112     ENABLE_EVOAB2="TRUE"
13113 else
13114     AC_MSG_RESULT([no])
13116 AC_SUBST(ENABLE_EVOAB2)
13117 AC_SUBST(GOBJECT_CFLAGS)
13118 AC_SUBST(GOBJECT_LIBS)
13120 dnl ===================================================================
13121 dnl Test which themes to include
13122 dnl ===================================================================
13123 AC_MSG_CHECKING([which themes to include])
13124 # if none given use default subset of available themes
13125 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13126     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"
13129 WITH_THEMES=""
13130 if test "x$with_theme" != "xno"; then
13131     for theme in $with_theme; do
13132         case $theme in
13133         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" ;;
13134         default) real_theme=colibre ;;
13135         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13136         esac
13137         WITH_THEMES=`echo "$WITH_THEMES $real_theme"|tr '\ ' '\n'|sort|uniq|tr '\n' '\ '`
13138     done
13140 AC_MSG_RESULT([$WITH_THEMES])
13141 AC_SUBST([WITH_THEMES])
13142 # FIXME: remove this, and the convenience default->colibre remapping after a grace period
13143 for theme in $with_theme; do
13144     case $theme in
13145     default) AC_MSG_WARN([--with-theme=default is deprecated and will be removed, use --with-theme=colibre]) ;;
13146     *) ;;
13147     esac
13148 done
13150 ###############################################################################
13151 # Extensions checking
13152 ###############################################################################
13153 AC_MSG_CHECKING([for extensions integration])
13154 if test "x$enable_extension_integration" != "xno"; then
13155     WITH_EXTENSION_INTEGRATION=TRUE
13156     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13157     AC_MSG_RESULT([yes, use integration])
13158 else
13159     WITH_EXTENSION_INTEGRATION=
13160     AC_MSG_RESULT([no, do not integrate])
13162 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13164 dnl Should any extra extensions be included?
13165 dnl There are standalone tests for each of these below.
13166 WITH_EXTRA_EXTENSIONS=
13167 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13169 libo_CHECK_EXTENSION([ConvertTextToNumber],[CT2N],[ct2n],[ct2n],[])
13170 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13171 if test "x$with_java" != "xno"; then
13172     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13173     libo_CHECK_EXTENSION([LanguageTool],[LANGUAGETOOL],[languagetool],[languagetool],[])
13176 AC_MSG_CHECKING([whether to build opens___.ttf])
13177 if test "$enable_build_opensymbol" = "yes"; then
13178     AC_MSG_RESULT([yes])
13179     AC_PATH_PROG(FONTFORGE, fontforge)
13180     if test -z "$FONTFORGE"; then
13181         AC_MSG_ERROR([fontforge not installed])
13182     fi
13183 else
13184     AC_MSG_RESULT([no])
13185     OPENSYMBOL_TTF=f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
13186     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13188 AC_SUBST(OPENSYMBOL_TTF)
13189 AC_SUBST(FONTFORGE)
13191 dnl ===================================================================
13192 dnl Test whether to include fonts
13193 dnl ===================================================================
13194 AC_MSG_CHECKING([whether to include third-party fonts])
13195 if test "$with_fonts" != "no"; then
13196     AC_MSG_RESULT([yes])
13197     WITH_FONTS=TRUE
13198     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13199     AC_DEFINE(HAVE_MORE_FONTS)
13200 else
13201     AC_MSG_RESULT([no])
13202     WITH_FONTS=
13203     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13205 AC_SUBST(WITH_FONTS)
13208 dnl ===================================================================
13209 dnl Test whether to enable online update service
13210 dnl ===================================================================
13211 AC_MSG_CHECKING([whether to enable online update])
13212 ENABLE_ONLINE_UPDATE=
13213 ENABLE_ONLINE_UPDATE_MAR=
13214 UPDATE_CONFIG=
13215 if test "$enable_online_update" = ""; then
13216     if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
13217         AC_MSG_RESULT([yes])
13218         ENABLE_ONLINE_UPDATE="TRUE"
13219     else
13220         AC_MSG_RESULT([no])
13221     fi
13222 else
13223     if test "$enable_online_update" = "mar"; then
13224         AC_MSG_RESULT([yes - MAR-based online update])
13225         ENABLE_ONLINE_UPDATE_MAR="TRUE"
13226         if test "$with_update_config" = ""; then
13227             AC_MSG_ERROR([mar based online updater needs an update config specified with "with-update-config])
13228         fi
13229         UPDATE_CONFIG="$with_update_config"
13230         AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13231     elif test "$enable_online_update" = "yes"; then
13232         AC_MSG_RESULT([yes])
13233         ENABLE_ONLINE_UPDATE="TRUE"
13234     else
13235         AC_MSG_RESULT([no])
13236     fi
13238 AC_SUBST(ENABLE_ONLINE_UPDATE)
13239 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13240 AC_SUBST(UPDATE_CONFIG)
13243 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13244 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13245     if test "x$with_privacy_policy_url" = "xundefined"; then
13246         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13247     fi
13249 AC_SUBST(PRIVACY_POLICY_URL)
13250 dnl ===================================================================
13251 dnl Test whether we need bzip2
13252 dnl ===================================================================
13253 SYSTEM_BZIP2=
13254 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE"; then
13255     AC_MSG_CHECKING([whether to use system bzip2])
13256     if test "$with_system_bzip2" = yes; then
13257         SYSTEM_BZIP2=TRUE
13258         AC_MSG_RESULT([yes])
13259         PKG_CHECK_MODULES(BZIP2, bzip2)
13260         FilterLibs "${BZIP2_LIBS}"
13261         BZIP2_LIBS="${filteredlibs}"
13262     else
13263         AC_MSG_RESULT([no])
13264         BUILD_TYPE="$BUILD_TYPE BZIP2"
13265     fi
13267 AC_SUBST(SYSTEM_BZIP2)
13268 AC_SUBST(BZIP2_CFLAGS)
13269 AC_SUBST(BZIP2_LIBS)
13271 dnl ===================================================================
13272 dnl Test whether to enable extension update
13273 dnl ===================================================================
13274 AC_MSG_CHECKING([whether to enable extension update])
13275 ENABLE_EXTENSION_UPDATE=
13276 if test "x$enable_extension_update" = "xno"; then
13277     AC_MSG_RESULT([no])
13278 else
13279     AC_MSG_RESULT([yes])
13280     ENABLE_EXTENSION_UPDATE="TRUE"
13281     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13282     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13284 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13287 dnl ===================================================================
13288 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13289 dnl ===================================================================
13290 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13291 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13292     AC_MSG_RESULT([no])
13293     ENABLE_SILENT_MSI=
13294 else
13295     AC_MSG_RESULT([yes])
13296     ENABLE_SILENT_MSI=TRUE
13297     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13299 AC_SUBST(ENABLE_SILENT_MSI)
13301 AC_MSG_CHECKING([whether and how to use Xinerama])
13302 if test "$_os" = "Linux" -o "$_os" = "FreeBSD"; then
13303     if test "$x_libraries" = "default_x_libraries"; then
13304         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13305         if test "x$XINERAMALIB" = x; then
13306            XINERAMALIB="/usr/lib"
13307         fi
13308     else
13309         XINERAMALIB="$x_libraries"
13310     fi
13311     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13312         # we have both versions, let the user decide but use the dynamic one
13313         # per default
13314         USE_XINERAMA=TRUE
13315         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13316             XINERAMA_LINK=dynamic
13317         else
13318             XINERAMA_LINK=static
13319         fi
13320     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13321         # we have only the dynamic version
13322         USE_XINERAMA=TRUE
13323         XINERAMA_LINK=dynamic
13324     elif test -e "$XINERAMALIB/libXinerama.a"; then
13325         # static version
13326         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13327             USE_XINERAMA=TRUE
13328             XINERAMA_LINK=static
13329         else
13330             USE_XINERAMA=
13331             XINERAMA_LINK=none
13332         fi
13333     else
13334         # no Xinerama
13335         USE_XINERAMA=
13336         XINERAMA_LINK=none
13337     fi
13338     if test "$USE_XINERAMA" = "TRUE"; then
13339         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13340         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13341             [AC_MSG_ERROR(Xinerama header not found.)], [])
13342         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13343         if test "x$XEXTLIB" = x; then
13344            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13345         fi
13346         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13347         if test "$_os" = "FreeBSD"; then
13348             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13349         fi
13350         if test "$_os" = "Linux"; then
13351             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13352         fi
13353         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13354             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13355     else
13356         AC_MSG_RESULT([no, libXinerama not found or wrong architecture.])
13357     fi
13358 else
13359     USE_XINERAMA=
13360     XINERAMA_LINK=none
13361     AC_MSG_RESULT([no])
13363 AC_SUBST(USE_XINERAMA)
13364 AC_SUBST(XINERAMA_LINK)
13366 dnl ===================================================================
13367 dnl Test whether to build cairo or rely on the system version
13368 dnl ===================================================================
13370 if test "$test_cairo" = "yes"; then
13371     AC_MSG_CHECKING([whether to use the system cairo])
13373     : ${with_system_cairo:=$with_system_libs}
13374     if test "$with_system_cairo" = "yes"; then
13375         SYSTEM_CAIRO=TRUE
13376         AC_MSG_RESULT([yes])
13378         PKG_CHECK_MODULES( CAIRO, cairo >= 1.8.0 )
13379         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13380         FilterLibs "${CAIRO_LIBS}"
13381         CAIRO_LIBS="${filteredlibs}"
13383         if test "$test_xrender" = "yes"; then
13384             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13385             AC_LANG_PUSH([C])
13386             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13387 #ifdef PictStandardA8
13388 #else
13389       return fail;
13390 #endif
13391 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13393             AC_LANG_POP([C])
13394         fi
13395     else
13396         AC_MSG_RESULT([no])
13397         BUILD_TYPE="$BUILD_TYPE CAIRO"
13398     fi
13400     if test "$enable_cairo_canvas" != no; then
13401         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13402         ENABLE_CAIRO_CANVAS=TRUE
13403     fi
13406 AC_SUBST(CAIRO_CFLAGS)
13407 AC_SUBST(CAIRO_LIBS)
13408 AC_SUBST(ENABLE_CAIRO_CANVAS)
13409 AC_SUBST(SYSTEM_CAIRO)
13411 dnl ===================================================================
13412 dnl Test whether to use avahi
13413 dnl ===================================================================
13414 if test "$_os" = "WINNT"; then
13415     # Windows uses bundled mDNSResponder
13416     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13417 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13418     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13419                       [ENABLE_AVAHI="TRUE"])
13420     AC_DEFINE(HAVE_FEATURE_AVAHI)
13421     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13422     FilterLibs "${AVAHI_LIBS}"
13423     AVAHI_LIBS="${filteredlibs}"
13426 AC_SUBST(ENABLE_AVAHI)
13427 AC_SUBST(AVAHI_CFLAGS)
13428 AC_SUBST(AVAHI_LIBS)
13430 dnl ===================================================================
13431 dnl Test whether to use liblangtag
13432 dnl ===================================================================
13433 SYSTEM_LIBLANGTAG=
13434 AC_MSG_CHECKING([whether to use system liblangtag])
13435 if test "$with_system_liblangtag" = yes; then
13436     SYSTEM_LIBLANGTAG=TRUE
13437     AC_MSG_RESULT([yes])
13438     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
13439     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
13440     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
13441     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13442     FilterLibs "${LIBLANGTAG_LIBS}"
13443     LIBLANGTAG_LIBS="${filteredlibs}"
13444 else
13445     SYSTEM_LIBLANGTAG=
13446     AC_MSG_RESULT([no])
13447     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
13448     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
13449     if test "$COM" = "MSC"; then
13450         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
13451     else
13452         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
13453     fi
13455 AC_SUBST(SYSTEM_LIBLANGTAG)
13456 AC_SUBST(LIBLANGTAG_CFLAGS)
13457 AC_SUBST(LIBLANGTAG_LIBS)
13459 dnl ===================================================================
13460 dnl Test whether to build libpng or rely on the system version
13461 dnl ===================================================================
13463 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng],["-I${WORKDIR}/UnpackedTarball/libpng"],["-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"])
13465 dnl ===================================================================
13466 dnl Check for runtime JVM search path
13467 dnl ===================================================================
13468 if test "$ENABLE_JAVA" != ""; then
13469     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
13470     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
13471         AC_MSG_RESULT([yes])
13472         if ! test -d "$with_jvm_path"; then
13473             AC_MSG_ERROR(["$with_jvm_path" not a directory])
13474         fi
13475         if ! test -d "$with_jvm_path"jvm; then
13476             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
13477         fi
13478         JVM_ONE_PATH_CHECK="$with_jvm_path"
13479         AC_SUBST(JVM_ONE_PATH_CHECK)
13480     else
13481         AC_MSG_RESULT([no])
13482     fi
13485 dnl ===================================================================
13486 dnl Test for the presence of Ant and that it works
13487 dnl ===================================================================
13489 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
13490     ANT_HOME=; export ANT_HOME
13491     WITH_ANT_HOME=; export WITH_ANT_HOME
13492     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
13493         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
13494             if test "$_os" = "WINNT"; then
13495                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
13496             else
13497                 with_ant_home="$LODE_HOME/opt/ant"
13498             fi
13499         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
13500             with_ant_home="$LODE_HOME/opt/ant"
13501         fi
13502     fi
13503     if test -z "$with_ant_home"; then
13504         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
13505     else
13506         if test "$_os" = "WINNT"; then
13507             # AC_PATH_PROGS needs unix path
13508             with_ant_home=`cygpath -u "$with_ant_home"`
13509         fi
13510         AbsolutePath "$with_ant_home"
13511         with_ant_home=$absolute_path
13512         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
13513         WITH_ANT_HOME=$with_ant_home
13514         ANT_HOME=$with_ant_home
13515     fi
13517     if test -z "$ANT"; then
13518         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
13519     else
13520         # resolve relative or absolute symlink
13521         while test -h "$ANT"; do
13522             a_cwd=`pwd`
13523             a_basename=`basename "$ANT"`
13524             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
13525             cd "`dirname "$ANT"`"
13526             cd "`dirname "$a_script"`"
13527             ANT="`pwd`"/"`basename "$a_script"`"
13528             cd "$a_cwd"
13529         done
13531         AC_MSG_CHECKING([if $ANT works])
13532         mkdir -p conftest.dir
13533         a_cwd=$(pwd)
13534         cd conftest.dir
13535         cat > conftest.java << EOF
13536         public class conftest {
13537             int testmethod(int a, int b) {
13538                     return a + b;
13539             }
13540         }
13543         cat > conftest.xml << EOF
13544         <project name="conftest" default="conftest">
13545         <target name="conftest">
13546             <javac srcdir="." includes="conftest.java">
13547             </javac>
13548         </target>
13549         </project>
13552         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
13553         if test $? = 0 -a -f ./conftest.class; then
13554             AC_MSG_RESULT([Ant works])
13555             if test -z "$WITH_ANT_HOME"; then
13556                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
13557                 if test -z "$ANT_HOME"; then
13558                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
13559                 fi
13560             else
13561                 ANT_HOME="$WITH_ANT_HOME"
13562             fi
13563         else
13564             echo "configure: Ant test failed" >&5
13565             cat conftest.java >&5
13566             cat conftest.xml >&5
13567             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
13568         fi
13569         cd "$a_cwd"
13570         rm -fr conftest.dir
13571     fi
13572     if test -z "$ANT_HOME"; then
13573         ANT_HOME="NO_ANT_HOME"
13574     else
13575         PathFormat "$ANT_HOME"
13576         ANT_HOME="$formatted_path"
13577         PathFormat "$ANT"
13578         ANT="$formatted_path"
13579     fi
13581     dnl Checking for ant.jar
13582     if test "$ANT_HOME" != "NO_ANT_HOME"; then
13583         AC_MSG_CHECKING([Ant lib directory])
13584         if test -f $ANT_HOME/lib/ant.jar; then
13585             ANT_LIB="$ANT_HOME/lib"
13586         else
13587             if test -f $ANT_HOME/ant.jar; then
13588                 ANT_LIB="$ANT_HOME"
13589             else
13590                 if test -f /usr/share/java/ant.jar; then
13591                     ANT_LIB=/usr/share/java
13592                 else
13593                     if test -f /usr/share/ant-core/lib/ant.jar; then
13594                         ANT_LIB=/usr/share/ant-core/lib
13595                     else
13596                         if test -f $ANT_HOME/lib/ant/ant.jar; then
13597                             ANT_LIB="$ANT_HOME/lib/ant"
13598                         else
13599                             if test -f /usr/share/lib/ant/ant.jar; then
13600                                 ANT_LIB=/usr/share/lib/ant
13601                             else
13602                                 AC_MSG_ERROR([Ant libraries not found!])
13603                             fi
13604                         fi
13605                     fi
13606                 fi
13607             fi
13608         fi
13609         PathFormat "$ANT_LIB"
13610         ANT_LIB="$formatted_path"
13611         AC_MSG_RESULT([Ant lib directory found.])
13612     fi
13614     ant_minver=1.6.0
13615     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
13617     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
13618     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
13619     ant_version_major=`echo $ant_version | cut -d. -f1`
13620     ant_version_minor=`echo $ant_version | cut -d. -f2`
13621     echo "configure: ant_version $ant_version " >&5
13622     echo "configure: ant_version_major $ant_version_major " >&5
13623     echo "configure: ant_version_minor $ant_version_minor " >&5
13624     if test "$ant_version_major" -ge "2"; then
13625         AC_MSG_RESULT([yes, $ant_version])
13626     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
13627         AC_MSG_RESULT([yes, $ant_version])
13628     else
13629         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
13630     fi
13632     rm -f conftest* core core.* *.core
13634 AC_SUBST(ANT)
13635 AC_SUBST(ANT_HOME)
13636 AC_SUBST(ANT_LIB)
13638 OOO_JUNIT_JAR=
13639 HAMCREST_JAR=
13640 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
13641     AC_MSG_CHECKING([for JUnit 4])
13642     if test "$with_junit" = "yes"; then
13643         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
13644             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
13645         elif test -e /usr/share/java/junit4.jar; then
13646             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
13647         else
13648            if test -e /usr/share/lib/java/junit.jar; then
13649               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
13650            else
13651               OOO_JUNIT_JAR=/usr/share/java/junit.jar
13652            fi
13653         fi
13654     else
13655         OOO_JUNIT_JAR=$with_junit
13656     fi
13657     if test "$_os" = "WINNT"; then
13658         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
13659     fi
13660     printf 'import org.junit.Before;' > conftest.java
13661     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13662         AC_MSG_RESULT([$OOO_JUNIT_JAR])
13663     else
13664         AC_MSG_ERROR(
13665 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
13666  specify its pathname via --with-junit=..., or disable it via --without-junit])
13667     fi
13668     rm -f conftest.class conftest.java
13669     if test $OOO_JUNIT_JAR != ""; then
13670         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
13671     fi
13673     AC_MSG_CHECKING([for included Hamcrest])
13674     printf 'import org.hamcrest.BaseDescription;' > conftest.java
13675     if "$JAVACOMPILER" -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
13676         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
13677     else
13678         AC_MSG_RESULT([Not included])
13679         AC_MSG_CHECKING([for standalone hamcrest jar.])
13680         if test "$with_hamcrest" = "yes"; then
13681             if test -e /usr/share/lib/java/hamcrest.jar; then
13682                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
13683             elif test -e /usr/share/java/hamcrest/core.jar; then
13684                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
13685             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
13686                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
13687             else
13688                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
13689             fi
13690         else
13691             HAMCREST_JAR=$with_hamcrest
13692         fi
13693         if test "$_os" = "WINNT"; then
13694             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
13695         fi
13696         if "$JAVACOMPILER" -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
13697             AC_MSG_RESULT([$HAMCREST_JAR])
13698         else
13699             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),
13700                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
13701         fi
13702     fi
13703     rm -f conftest.class conftest.java
13705 AC_SUBST(OOO_JUNIT_JAR)
13706 AC_SUBST(HAMCREST_JAR)
13709 AC_SUBST(SCPDEFS)
13712 # check for wget and curl
13714 WGET=
13715 CURL=
13717 if test "$enable_fetch_external" != "no"; then
13719 CURL=`which curl 2>/dev/null`
13721 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
13722     # wget new enough?
13723     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
13724     if test $? -eq 0; then
13725         WGET=$i
13726         break
13727     fi
13728 done
13730 if test -z "$WGET" -a -z "$CURL"; then
13731     AC_MSG_ERROR([neither wget nor curl found!])
13736 AC_SUBST(WGET)
13737 AC_SUBST(CURL)
13740 # check for sha256sum
13742 SHA256SUM=
13744 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
13745     eval "$i -a 256 --version" > /dev/null 2>&1
13746     ret=$?
13747     if test $ret -eq 0; then
13748         SHA256SUM="$i -a 256"
13749         break
13750     fi
13751 done
13753 if test -z "$SHA256SUM"; then
13754     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
13755         eval "$i --version" > /dev/null 2>&1
13756         ret=$?
13757         if test $ret -eq 0; then
13758             SHA256SUM=$i
13759             break
13760         fi
13761     done
13764 if test -z "$SHA256SUM"; then
13765     AC_MSG_ERROR([no sha256sum found!])
13768 AC_SUBST(SHA256SUM)
13770 dnl ===================================================================
13771 dnl Dealing with l10n options
13772 dnl ===================================================================
13773 AC_MSG_CHECKING([which languages to be built])
13774 # get list of all languages
13775 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
13776 # the sed command does the following:
13777 #   + if a line ends with a backslash, append the next line to it
13778 #   + adds " on the beginning of the value (after =)
13779 #   + adds " at the end of the value
13780 #   + removes en-US; we want to put it on the beginning
13781 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
13782 [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)]
13783 ALL_LANGS="en-US $completelangiso"
13784 # check the configured localizations
13785 WITH_LANG="$with_lang"
13787 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
13788 # (Norwegian is "nb" and "nn".)
13789 if test "$WITH_LANG" = "no"; then
13790     WITH_LANG=
13793 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
13794     AC_MSG_RESULT([en-US])
13795 else
13796     AC_MSG_RESULT([$WITH_LANG])
13797     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
13798     if test -z "$MSGFMT"; then
13799         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
13800             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
13801         elif test -x "/opt/lo/bin/msgfmt"; then
13802             MSGFMT="/opt/lo/bin/msgfmt"
13803         else
13804             AC_CHECK_PROGS(MSGFMT, [msgfmt])
13805             if test -z "$MSGFMT"; then
13806                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
13807             fi
13808         fi
13809     fi
13810     if test -z "$MSGUNIQ"; then
13811         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
13812             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
13813         elif test -x "/opt/lo/bin/msguniq"; then
13814             MSGUNIQ="/opt/lo/bin/msguniq"
13815         else
13816             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
13817             if test -z "$MSGUNIQ"; then
13818                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
13819             fi
13820         fi
13821     fi
13823 AC_SUBST(MSGFMT)
13824 AC_SUBST(MSGUNIQ)
13825 # check that the list is valid
13826 for lang in $WITH_LANG; do
13827     test "$lang" = "ALL" && continue
13828     # need to check for the exact string, so add space before and after the list of all languages
13829     for vl in $ALL_LANGS; do
13830         if test "$vl" = "$lang"; then
13831            break
13832         fi
13833     done
13834     if test "$vl" != "$lang"; then
13835         # if you're reading this - you prolly quoted your languages remove the quotes ...
13836         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
13837     fi
13838 done
13839 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
13840     echo $WITH_LANG | grep -q en-US
13841     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
13843 # list with substituted ALL
13844 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
13845 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
13846 test "$WITH_LANG" = "en-US" && WITH_LANG=
13847 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
13848     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
13849     ALL_LANGS=`echo $ALL_LANGS qtz`
13851 AC_SUBST(ALL_LANGS)
13852 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
13853 AC_SUBST(WITH_LANG)
13854 AC_SUBST(WITH_LANG_LIST)
13855 AC_SUBST(GIT_NEEDED_SUBMODULES)
13857 WITH_POOR_HELP_LOCALIZATIONS=
13858 if test -d "$SRC_ROOT/translations/source"; then
13859     for l in `ls -1 $SRC_ROOT/translations/source`; do
13860         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
13861             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
13862         fi
13863     done
13865 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
13867 if test -n "$with_locales"; then
13868     WITH_LOCALES="$with_locales"
13870     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
13871     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
13872     # config_host/config_locales.h.in
13873     for locale in $WITH_LOCALES; do
13874         lang=${locale%_*}
13876         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
13878         case $lang in
13879         hi|mr*ne)
13880             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
13881             ;;
13882         bg|ru)
13883             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
13884             ;;
13885         esac
13886     done
13887 else
13888     AC_DEFINE(WITH_LOCALE_ALL)
13890 AC_SUBST(WITH_LOCALES)
13892 dnl git submodule update --reference
13893 dnl ===================================================================
13894 if test -n "${GIT_REFERENCE_SRC}"; then
13895     for repo in ${GIT_NEEDED_SUBMODULES}; do
13896         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
13897             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
13898         fi
13899     done
13901 AC_SUBST(GIT_REFERENCE_SRC)
13903 dnl git submodules linked dirs
13904 dnl ===================================================================
13905 if test -n "${GIT_LINK_SRC}"; then
13906     for repo in ${GIT_NEEDED_SUBMODULES}; do
13907         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
13908             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
13909         fi
13910     done
13912 AC_SUBST(GIT_LINK_SRC)
13914 dnl branding
13915 dnl ===================================================================
13916 AC_MSG_CHECKING([for alternative branding images directory])
13917 # initialize mapped arrays
13918 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
13919 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
13921 if test -z "$with_branding" -o "$with_branding" = "no"; then
13922     AC_MSG_RESULT([none])
13923     DEFAULT_BRAND_IMAGES="$brand_files"
13924 else
13925     if ! test -d $with_branding ; then
13926         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
13927     else
13928         AC_MSG_RESULT([$with_branding])
13929         CUSTOM_BRAND_DIR="$with_branding"
13930         for lfile in $brand_files
13931         do
13932             if ! test -f $with_branding/$lfile ; then
13933                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
13934                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
13935             else
13936                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
13937             fi
13938         done
13939         check_for_progress="yes"
13940     fi
13942 AC_SUBST([BRAND_INTRO_IMAGES])
13943 AC_SUBST([CUSTOM_BRAND_DIR])
13944 AC_SUBST([CUSTOM_BRAND_IMAGES])
13945 AC_SUBST([DEFAULT_BRAND_IMAGES])
13948 AC_MSG_CHECKING([for 'intro' progress settings])
13949 PROGRESSBARCOLOR=
13950 PROGRESSSIZE=
13951 PROGRESSPOSITION=
13952 PROGRESSFRAMECOLOR=
13953 PROGRESSTEXTCOLOR=
13954 PROGRESSTEXTBASELINE=
13956 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
13957     source "$with_branding/progress.conf"
13958     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
13959 else
13960     AC_MSG_RESULT([none])
13963 AC_SUBST(PROGRESSBARCOLOR)
13964 AC_SUBST(PROGRESSSIZE)
13965 AC_SUBST(PROGRESSPOSITION)
13966 AC_SUBST(PROGRESSFRAMECOLOR)
13967 AC_SUBST(PROGRESSTEXTCOLOR)
13968 AC_SUBST(PROGRESSTEXTBASELINE)
13971 dnl ===================================================================
13972 dnl Custom build version
13973 dnl ===================================================================
13974 AC_MSG_CHECKING([for extra build ID])
13975 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
13976     EXTRA_BUILDID="$with_extra_buildid"
13978 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
13979 if test -n "$EXTRA_BUILDID" ; then
13980     AC_MSG_RESULT([$EXTRA_BUILDID])
13981 else
13982     AC_MSG_RESULT([not set])
13984 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
13986 OOO_VENDOR=
13987 AC_MSG_CHECKING([for vendor])
13988 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
13989     OOO_VENDOR="$USERNAME"
13991     if test -z "$OOO_VENDOR"; then
13992         OOO_VENDOR="$USER"
13993     fi
13995     if test -z "$OOO_VENDOR"; then
13996         OOO_VENDOR="`id -u -n`"
13997     fi
13999     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14000 else
14001     OOO_VENDOR="$with_vendor"
14002     AC_MSG_RESULT([$OOO_VENDOR])
14004 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14005 AC_SUBST(OOO_VENDOR)
14007 if test "$_os" = "Android" ; then
14008     ANDROID_PACKAGE_NAME=
14009     AC_MSG_CHECKING([for Android package name])
14010     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14011         if test -n "$ENABLE_DEBUG"; then
14012             # Default to the package name that makes ndk-gdb happy.
14013             ANDROID_PACKAGE_NAME="org.libreoffice"
14014         else
14015             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14016         fi
14018         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14019     else
14020         ANDROID_PACKAGE_NAME="$with_android_package_name"
14021         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14022     fi
14023     AC_SUBST(ANDROID_PACKAGE_NAME)
14026 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14027 if test "$with_compat_oowrappers" = "yes"; then
14028     WITH_COMPAT_OOWRAPPERS=TRUE
14029     AC_MSG_RESULT(yes)
14030 else
14031     WITH_COMPAT_OOWRAPPERS=
14032     AC_MSG_RESULT(no)
14034 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14036 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14037 AC_MSG_CHECKING([for install dirname])
14038 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14039     INSTALLDIRNAME="$with_install_dirname"
14041 AC_MSG_RESULT([$INSTALLDIRNAME])
14042 AC_SUBST(INSTALLDIRNAME)
14044 AC_MSG_CHECKING([for prefix])
14045 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14046 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14047 PREFIXDIR="$prefix"
14048 AC_MSG_RESULT([$PREFIXDIR])
14049 AC_SUBST(PREFIXDIR)
14051 LIBDIR=[$(eval echo $(eval echo $libdir))]
14052 AC_SUBST(LIBDIR)
14054 DATADIR=[$(eval echo $(eval echo $datadir))]
14055 AC_SUBST(DATADIR)
14057 MANDIR=[$(eval echo $(eval echo $mandir))]
14058 AC_SUBST(MANDIR)
14060 DOCDIR=[$(eval echo $(eval echo $docdir))]
14061 AC_SUBST(DOCDIR)
14063 BINDIR=[$(eval echo $(eval echo $bindir))]
14064 AC_SUBST(BINDIR)
14066 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14067 AC_SUBST(INSTALLDIR)
14069 TESTINSTALLDIR="${BUILDDIR}/test-install"
14070 AC_SUBST(TESTINSTALLDIR)
14073 # ===================================================================
14074 # OAuth2 id and secrets
14075 # ===================================================================
14077 AC_MSG_CHECKING([for Google Drive client id and secret])
14078 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14079     AC_MSG_RESULT([not set])
14080     GDRIVE_CLIENT_ID="\"\""
14081     GDRIVE_CLIENT_SECRET="\"\""
14082 else
14083     AC_MSG_RESULT([set])
14084     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14085     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14087 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14088 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14090 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14091 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14092     AC_MSG_RESULT([not set])
14093     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14094     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14095 else
14096     AC_MSG_RESULT([set])
14097     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14098     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14100 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14101 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14103 AC_MSG_CHECKING([for OneDrive client id and secret])
14104 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14105     AC_MSG_RESULT([not set])
14106     ONEDRIVE_CLIENT_ID="\"\""
14107     ONEDRIVE_CLIENT_SECRET="\"\""
14108 else
14109     AC_MSG_RESULT([set])
14110     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14111     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14113 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14114 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14117 dnl ===================================================================
14118 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14119 dnl --enable-dependency-tracking configure option
14120 dnl ===================================================================
14121 AC_MSG_CHECKING([whether to enable dependency tracking])
14122 if test "$enable_dependency_tracking" = "no"; then
14123     nodep=TRUE
14124     AC_MSG_RESULT([no])
14125 else
14126     AC_MSG_RESULT([yes])
14128 AC_SUBST(nodep)
14130 dnl ===================================================================
14131 dnl Number of CPUs to use during the build
14132 dnl ===================================================================
14133 AC_MSG_CHECKING([for number of processors to use])
14134 # plain --with-parallelism is just the default
14135 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14136     if test "$with_parallelism" = "no"; then
14137         PARALLELISM=0
14138     else
14139         PARALLELISM=$with_parallelism
14140     fi
14141 else
14142     if test "$enable_icecream" = "yes"; then
14143         PARALLELISM="40"
14144     else
14145         case `uname -s` in
14147         Darwin|FreeBSD|NetBSD|OpenBSD)
14148             PARALLELISM=`sysctl -n hw.ncpu`
14149             ;;
14151         Linux)
14152             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14153         ;;
14154         # what else than above does profit here *and* has /proc?
14155         *)
14156             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14157             ;;
14158         esac
14160         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14161         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14162     fi
14165 if test "$no_parallelism_make" = "YES" && test $PARALLELISM -gt 1; then
14166     if test -z "$with_parallelism"; then
14167             AC_MSG_WARN([gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this.])
14168             add_warning "gmake 3.81 crashes with parallelism > 1, reducing it to 1. upgrade to 3.82 to avoid this."
14169             PARALLELISM="1"
14170     else
14171         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."
14172     fi
14175 if test $PARALLELISM -eq 0; then
14176     AC_MSG_RESULT([explicit make -j option needed])
14177 else
14178     AC_MSG_RESULT([$PARALLELISM])
14180 AC_SUBST(PARALLELISM)
14182 IWYU_PATH="$with_iwyu"
14183 AC_SUBST(IWYU_PATH)
14184 if test ! -z "$IWYU_PATH"; then
14185     if test ! -f "$IWYU_PATH"; then
14186         AC_MSG_ERROR([cannot find include-what-you-use binary specified by --with-iwyu])
14187     fi
14191 # Set up ILIB for MSVC build
14193 ILIB1=
14194 if test "$build_os" = "cygwin"; then
14195     ILIB="."
14196     if test -n "$JAVA_HOME"; then
14197         ILIB="$ILIB;$JAVA_HOME/lib"
14198     fi
14199     ILIB1=-link
14200     ILIB="$ILIB;$COMPATH/lib/$WIN_HOST_ARCH"
14201     ILIB1="$ILIB1 -LIBPATH:$COMPATH/lib/$WIN_HOST_ARCH"
14202     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14203     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14204     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14205         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14206         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14207     fi
14208     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14209     ucrtlibpath_formatted=$formatted_path
14210     ILIB="$ILIB;$ucrtlibpath_formatted"
14211     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14212     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14213         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/lib"
14214     else
14215         ILIB="$ILIB;$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14216     fi
14218     if test "$cross_compiling" != "yes"; then
14219         ILIB_FOR_BUILD="$ILIB"
14220     fi
14222 AC_SUBST(ILIB)
14223 AC_SUBST(ILIB_FOR_BUILD)
14225 # ===================================================================
14226 # Creating bigger shared library to link against
14227 # ===================================================================
14228 AC_MSG_CHECKING([whether to create huge library])
14229 MERGELIBS=
14231 if test $_os = iOS -o $_os = Android; then
14232     # Never any point in mergelibs for these as we build just static
14233     # libraries anyway...
14234     enable_mergelibs=no
14237 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14238     if test $_os != Linux -a $_os != WINNT; then
14239         add_warning "--enable-mergelibs is not tested for this platform"
14240     fi
14241     MERGELIBS="TRUE"
14242     AC_MSG_RESULT([yes])
14243     AC_DEFINE(ENABLE_MERGELIBS)
14244 else
14245     AC_MSG_RESULT([no])
14247 AC_SUBST([MERGELIBS])
14249 dnl ===================================================================
14250 dnl icerun is a wrapper that stops us spawning tens of processes
14251 dnl locally - for tools that can't be executed on the compile cluster
14252 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14253 dnl ===================================================================
14254 AC_MSG_CHECKING([whether to use icerun wrapper])
14255 ICECREAM_RUN=
14256 if test "$enable_icecream" = "yes" && which icerun >/dev/null 2>&1 ; then
14257     ICECREAM_RUN=icerun
14258     AC_MSG_RESULT([yes])
14259 else
14260     AC_MSG_RESULT([no])
14262 AC_SUBST(ICECREAM_RUN)
14264 dnl ===================================================================
14265 dnl Setup the ICECC_VERSION for the build the same way it was set for
14266 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14267 dnl ===================================================================
14268 x_ICECC_VERSION=[\#]
14269 if test -n "$ICECC_VERSION" ; then
14270     x_ICECC_VERSION=
14272 AC_SUBST(x_ICECC_VERSION)
14273 AC_SUBST(ICECC_VERSION)
14275 dnl ===================================================================
14277 AC_MSG_CHECKING([MPL subset])
14278 MPL_SUBSET=
14280 if test "$enable_mpl_subset" = "yes"; then
14281     warn_report=false
14282     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
14283         warn_report=true
14284     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
14285         warn_report=true
14286     fi
14287     if test "$warn_report" = "true"; then
14288         AC_MSG_ERROR([need to --disable-report-builder - extended database report builder.])
14289     fi
14290     if test "x$enable_postgresql_sdbc" != "xno"; then
14291         AC_MSG_ERROR([need to --disable-postgresql-sdbc - the PostgreSQL database backend.])
14292     fi
14293     if test "$enable_lotuswordpro" = "yes"; then
14294         AC_MSG_ERROR([need to --disable-lotuswordpro - a Lotus Word Pro file format import filter.])
14295     fi
14296     if test "$WITH_WEBDAV" = "neon"; then
14297         AC_MSG_ERROR([need --with-webdav=serf or --without-webdav - webdav support.])
14298     fi
14299     if test -n "$ENABLE_POPPLER"; then
14300         if test "x$SYSTEM_POPPLER" = "x"; then
14301             AC_MSG_ERROR([need to disable PDF import via poppler or use system library])
14302         fi
14303     fi
14304     # cf. m4/libo_check_extension.m4
14305     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
14306         AC_MSG_ERROR([need to disable extra extensions '$WITH_EXTRA_EXTENSIONS'])
14307     fi
14308     for theme in $WITH_THEMES; do
14309         case $theme in
14310         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
14311             AC_MSG_ERROR([need to disable icon themes from '$WITH_THEMES': $theme present, use --with-theme=colibre]) ;;
14312         *) : ;;
14313         esac
14314     done
14316     ENABLE_OPENGL_TRANSITIONS=
14318     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
14319         AC_MSG_ERROR([need to --disable-lpsolve - calc linear programming solver.])
14320     fi
14322     MPL_SUBSET="TRUE"
14323     AC_DEFINE(MPL_HAVE_SUBSET)
14324     AC_MSG_RESULT([only])
14325 else
14326     AC_MSG_RESULT([no restrictions])
14328 AC_SUBST(MPL_SUBSET)
14330 dnl ===================================================================
14332 AC_MSG_CHECKING([formula logger])
14333 ENABLE_FORMULA_LOGGER=
14335 if test "x$enable_formula_logger" = "xyes"; then
14336     AC_MSG_RESULT([yes])
14337     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14338     ENABLE_FORMULA_LOGGER=TRUE
14339 elif test -n "$ENABLE_DBGUTIL" ; then
14340     AC_MSG_RESULT([yes])
14341     AC_DEFINE(ENABLE_FORMULA_LOGGER)
14342     ENABLE_FORMULA_LOGGER=TRUE
14343 else
14344     AC_MSG_RESULT([no])
14347 AC_SUBST(ENABLE_FORMULA_LOGGER)
14349 dnl ===================================================================
14350 dnl Checking for active Antivirus software.
14351 dnl ===================================================================
14353 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
14354     AC_MSG_CHECKING([for active Antivirus software])
14355     ANTIVIRUS_LIST=`cscript.exe //Nologo $SRC_ROOT/antivirusDetection.vbs`
14356     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
14357         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
14358             AC_MSG_RESULT([found])
14359             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
14360             echo $EICAR_STRING > $SRC_ROOT/eicar
14361             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
14362             rm $SRC_ROOT/eicar
14363             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14364                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14365             fi
14366             echo $EICAR_STRING > $BUILDDIR/eicar
14367             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
14368             rm $BUILDDIR/eicar
14369             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
14370                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
14371             fi
14372             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"
14373         else
14374             AC_MSG_RESULT([not found])
14375         fi
14376     else
14377         AC_MSG_RESULT([n/a])
14378     fi
14381 dnl ===================================================================
14382 dnl Setting up the environment.
14383 dnl ===================================================================
14384 AC_MSG_NOTICE([setting up the build environment variables...])
14386 AC_SUBST(COMPATH)
14388 if test "$build_os" = "cygwin"; then
14389     if test -d "$COMPATH/atlmfc/lib/spectre"; then
14390         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
14391         ATL_INCLUDE="$COMPATH/atlmfc/include"
14392     elif test -d "$COMPATH/atlmfc/lib"; then
14393         ATL_LIB="$COMPATH/atlmfc/lib"
14394         ATL_INCLUDE="$COMPATH/atlmfc/include"
14395     else
14396         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
14397         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
14398     fi
14399     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
14400     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
14401     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
14403     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
14404     PathFormat "/usr/bin/find.exe"
14405     FIND="$formatted_path"
14406     PathFormat "/usr/bin/sort.exe"
14407     SORT="$formatted_path"
14408     PathFormat "/usr/bin/grep.exe"
14409     WIN_GREP="$formatted_path"
14410     PathFormat "/usr/bin/ls.exe"
14411     WIN_LS="$formatted_path"
14412     PathFormat "/usr/bin/touch.exe"
14413     WIN_TOUCH="$formatted_path"
14414 else
14415     FIND=find
14416     SORT=sort
14419 AC_SUBST(ATL_INCLUDE)
14420 AC_SUBST(ATL_LIB)
14421 AC_SUBST(FIND)
14422 AC_SUBST(SORT)
14423 AC_SUBST(WIN_GREP)
14424 AC_SUBST(WIN_LS)
14425 AC_SUBST(WIN_TOUCH)
14427 AC_SUBST(BUILD_TYPE)
14429 AC_SUBST(SOLARINC)
14431 PathFormat "$PERL"
14432 PERL="$formatted_path"
14433 AC_SUBST(PERL)
14435 if test -n "$TMPDIR"; then
14436     TEMP_DIRECTORY="$TMPDIR"
14437 else
14438     TEMP_DIRECTORY="/tmp"
14440 if test "$build_os" = "cygwin"; then
14441     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
14443 AC_SUBST(TEMP_DIRECTORY)
14445 # setup the PATH for the environment
14446 if test -n "$LO_PATH_FOR_BUILD"; then
14447     LO_PATH="$LO_PATH_FOR_BUILD"
14448     case "$host_os" in
14449     cygwin*|wsl*)
14450         pathmunge "$MSVC_HOST_PATH" "before"
14451         ;;
14452     esac
14453 else
14454     LO_PATH="$PATH"
14456     case "$host_os" in
14458     aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
14459         if test "$ENABLE_JAVA" != ""; then
14460             pathmunge "$JAVA_HOME/bin" "after"
14461         fi
14462         ;;
14464     cygwin*|wsl*)
14465         # Win32 make needs native paths
14466         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
14467             LO_PATH=`cygpath -p -m "$PATH"`
14468         fi
14469         if test "$WIN_BUILD_ARCH" = "x64"; then
14470             # needed for msi packaging
14471             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
14472         fi
14473         # .NET 4.6 and higher don't have bin directory
14474         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
14475             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
14476         fi
14477         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
14478         pathmunge "$CSC_PATH" "before"
14479         pathmunge "$MIDL_PATH" "before"
14480         pathmunge "$AL_PATH" "before"
14481         pathmunge "$MSVC_MULTI_PATH" "before"
14482         pathmunge "$MSVC_BUILD_PATH" "before"
14483         if test -n "$MSBUILD_PATH" ; then
14484             pathmunge "$MSBUILD_PATH" "before"
14485         fi
14486         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
14487         if test "$ENABLE_JAVA" != ""; then
14488             if test -d "$JAVA_HOME/jre/bin/client"; then
14489                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
14490             fi
14491             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
14492                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
14493             fi
14494             pathmunge "$JAVA_HOME/bin" "before"
14495         fi
14496         pathmunge "$MSVC_HOST_PATH" "before"
14497         ;;
14499     solaris*)
14500         pathmunge "/usr/css/bin" "before"
14501         if test "$ENABLE_JAVA" != ""; then
14502             pathmunge "$JAVA_HOME/bin" "after"
14503         fi
14504         ;;
14505     esac
14508 AC_SUBST(LO_PATH)
14510 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
14511 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
14512     x_LO_ELFCHECK_ALLOWLIST=
14513 else
14514     x_LO_ELFCHECK_ALLOWLIST=[\#]
14516 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
14517 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
14519 libo_FUZZ_SUMMARY
14521 # Generate a configuration sha256 we can use for deps
14522 if test -f config_host.mk; then
14523     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
14525 if test -f config_host_lang.mk; then
14526     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
14529 CFLAGS=$my_original_CFLAGS
14530 CXXFLAGS=$my_original_CXXFLAGS
14531 CPPFLAGS=$my_original_CPPFLAGS
14533 AC_CONFIG_LINKS([include:include])
14535 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
14536 # BUILD platform configuration] - otherwise breaks cross building
14537 AC_CONFIG_FILES([config_host.mk
14538                  config_host_lang.mk
14539                  Makefile
14540                  bin/bffvalidator.sh
14541                  bin/odfvalidator.sh
14542                  bin/officeotron.sh
14543                  hardened_runtime.xcent
14544                  instsetoo_native/util/openoffice.lst
14545                  sysui/desktop/macosx/Info.plist
14546                  vs-code-template.code-workspace:.vscode/vs-code-template.code-workspace.in])
14547 AC_CONFIG_HEADERS([config_host/config_buildid.h])
14548 AC_CONFIG_HEADERS([config_host/config_box2d.h])
14549 AC_CONFIG_HEADERS([config_host/config_clang.h])
14550 AC_CONFIG_HEADERS([config_host/config_crypto.h])
14551 AC_CONFIG_HEADERS([config_host/config_dconf.h])
14552 AC_CONFIG_HEADERS([config_host/config_eot.h])
14553 AC_CONFIG_HEADERS([config_host/config_extensions.h])
14554 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
14555 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
14556 AC_CONFIG_HEADERS([config_host/config_dbus.h])
14557 AC_CONFIG_HEADERS([config_host/config_features.h])
14558 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
14559 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
14560 AC_CONFIG_HEADERS([config_host/config_firebird.h])
14561 AC_CONFIG_HEADERS([config_host/config_folders.h])
14562 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
14563 AC_CONFIG_HEADERS([config_host/config_gio.h])
14564 AC_CONFIG_HEADERS([config_host/config_global.h])
14565 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
14566 AC_CONFIG_HEADERS([config_host/config_java.h])
14567 AC_CONFIG_HEADERS([config_host/config_langs.h])
14568 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
14569 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
14570 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
14571 AC_CONFIG_HEADERS([config_host/config_locales.h])
14572 AC_CONFIG_HEADERS([config_host/config_mpl.h])
14573 AC_CONFIG_HEADERS([config_host/config_oox.h])
14574 AC_CONFIG_HEADERS([config_host/config_options.h])
14575 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
14576 AC_CONFIG_HEADERS([config_host/config_zxing.h])
14577 AC_CONFIG_HEADERS([config_host/config_skia.h])
14578 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
14579 AC_CONFIG_HEADERS([config_host/config_vendor.h])
14580 AC_CONFIG_HEADERS([config_host/config_vcl.h])
14581 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
14582 AC_CONFIG_HEADERS([config_host/config_version.h])
14583 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
14584 AC_CONFIG_HEADERS([config_host/config_poppler.h])
14585 AC_CONFIG_HEADERS([config_host/config_python.h])
14586 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
14587 AC_OUTPUT
14589 if test "$CROSS_COMPILING" = TRUE; then
14590     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
14593 # touch the config timestamp file
14594 if test ! -f config_host.mk.stamp; then
14595     echo > config_host.mk.stamp
14596 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
14597     echo "Host Configuration unchanged - avoiding scp2 stamp update"
14598 else
14599     echo > config_host.mk.stamp
14602 # touch the config lang timestamp file
14603 if test ! -f config_host_lang.mk.stamp; then
14604     echo > config_host_lang.mk.stamp
14605 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
14606     echo "Language Configuration unchanged - avoiding scp2 stamp update"
14607 else
14608     echo > config_host_lang.mk.stamp
14612 if test \( "$STALE_MAKE" = "TRUE" -o "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE" \) \
14613         -a "$build_os" = "cygwin"; then
14615 cat << _EOS
14616 ****************************************************************************
14617 WARNING:
14618 Your make version is known to be horribly slow, and hard to debug
14619 problems with. To get a reasonably functional make please do:
14621 to install a pre-compiled binary make for Win32
14623  mkdir -p /opt/lo/bin
14624  cd /opt/lo/bin
14625  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
14626  cp make-4.2.1-msvc.exe make
14627  chmod +x make
14629 to install from source:
14630 place yourself in a working directory of you choice.
14632  git clone git://git.savannah.gnu.org/make.git
14634  [go to Start menu, open "Visual Studio 2019", click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
14635  set PATH=%PATH%;C:\Cygwin\bin
14636  [or Cygwin64, if that is what you have]
14637  cd path-to-make-repo-you-cloned-above
14638  build_w32.bat --without-guile
14640 should result in a WinRel/gnumake.exe.
14641 Copy it to the Cygwin /opt/lo/bin directory as make.exe
14643 Then re-run autogen.sh
14645 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
14646 Alternatively, you can install the 'new' make where ever you want and make sure that `which make` finds it.
14648 _EOS
14649 if test "$HAVE_GNUMAKE_FILE_FUNC" != "TRUE"; then
14650     AC_MSG_ERROR([no file function found; the build will fail without it; use GNU make 4.0 or later])
14655 cat << _EOF
14656 ****************************************************************************
14658 To build, run:
14659 $GNUMAKE
14661 To view some help, run:
14662 $GNUMAKE help
14664 _EOF
14666 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
14667     cat << _EOF
14668 After the build has finished successfully, you can immediately run what you built using the command:
14669 _EOF
14671     if test $_os = Darwin; then
14672         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
14673     else
14674         echo instdir/program/soffice
14675     fi
14676     cat << _EOF
14678 If you want to run the smoketest, run:
14679 $GNUMAKE check
14681 _EOF
14684 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
14685     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
14686     cat "$WARNINGS_FILE_FOR_BUILD"
14687     echo
14690 if test -s "$WARNINGS_FILE"; then
14691     echo "HOST config ($WARNINGS_FILE)"
14692     cat "$WARNINGS_FILE"
14695 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: