use unix paths for dir tests and prefer PathFormat…
[LibreOffice.git] / configure.ac
blob554ccc8bc683b8487d6ac41663e5a2333638a103
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],[24.8.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     if test "$COM" = "MSC"; then
50         for f in $1; do
51             if test "x$f" != "x${f#-L}"; then
52                 filteredlibs="$filteredlibs -LIBPATH:${f:2}"
53             elif test "x$f" != "x${f#-l}"; then
54                 filteredlibs="$filteredlibs ${f:2}.lib"
55             else
56                 filteredlibs="$filteredlibs $f"
57             fi
58         done
59     else
60         for f in $1; do
61             case "$f" in
62                 # let's start with Fedora's paths for now
63                 -L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
64                     # ignore it: on UNIXoids it is searched by default anyway
65                     # but if it's given explicitly then it may override other paths
66                     # (on macOS it would be an error to use it instead of SDK)
67                     ;;
68                 *)
69                     filteredlibs="$filteredlibs $f"
70                     ;;
71             esac
72         done
73     fi
76 PathFormat()
78     # Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
79     # function is called also on Unix.
80     #
81     # Return value: $formatted_path and $formatted_path_unix.
82     #
83     # $formatted_path is the argument in Windows format, but using forward slashes instead of
84     # backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
85     # or shell metacharacters).
86     #
87     # $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
88     # necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
89     # Unix pathname.
90     #
91     # Errors out if 8.3 names are needed but aren't present for some of the path components.
93     # Examples:
94     #
95     # /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
96     #
97     # C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
98     #
99     # C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
100     #
101     # C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
102     #
103     # /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
104     #
105     # C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
106     #
107     # /usr/bin/find.exe => C:/cygwin64/bin/find.exe
109     if test -n "$UNITTEST_WSL_PATHFORMAT"; then
110         printf "PathFormat $1 ==> "
111     fi
113     formatted_path="$1"
114     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
115         if test "$build_os" = "wsl"; then
116             formatted_path=$(echo "$formatted_path" | tr -d '\r')
117         fi
119         pf_conv_to_dos=
120         # spaces,parentheses,brackets,braces are problematic in pathname
121         # so are backslashes
122         case "$formatted_path" in
123             *\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
124                 pf_conv_to_dos="yes"
125             ;;
126         esac
127         if test "$pf_conv_to_dos" = "yes"; then
128             if test "$build_os" = "wsl"; then
129                 case "$formatted_path" in
130                     /*)
131                         formatted_path=$(wslpath -w "$formatted_path")
132                         ;;
133                 esac
134                 formatted_path=$($WSL_LO_HELPER --8.3 "$formatted_path")
135             elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
136                 formatted_path=`cygpath -sm "$formatted_path"`
137             else
138                 formatted_path=`cygpath -d "$formatted_path"`
139             fi
140             if test $? -ne 0;  then
141                 AC_MSG_ERROR([path conversion failed for "$1".])
142             fi
143         fi
144         fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
145         fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
146         if test "$fp_count_slash$fp_count_colon" != "00"; then
147             if test "$fp_count_colon" = "0"; then
148                 new_formatted_path=`realpath "$formatted_path"`
149                 if test $? -ne 0;  then
150                     AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
151                 else
152                     formatted_path="$new_formatted_path"
153                 fi
154             fi
155             if test "$build_os" = "wsl"; then
156                 if test "$fp_count_colon" != "0"; then
157                     formatted_path=$(wslpath "$formatted_path")
158                     local final_slash=
159                     case "$formatted_path" in
160                         */)
161                             final_slash=/
162                             ;;
163                     esac
164                     formatted_path=$(wslpath -m $formatted_path)
165                     case "$formatted_path" in
166                         */)
167                             ;;
168                         *)
169                             formatted_path="$formatted_path"$final_slash
170                             ;;
171                     esac
172                 else
173                     formatted_path=$(wslpath -m "$formatted_path")
174                 fi
175             else
176                 formatted_path=`cygpath -m "$formatted_path"`
177             fi
178             if test $? -ne 0;  then
179                 AC_MSG_ERROR([path conversion failed for "$1".])
180             fi
181         fi
182         fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
183         if test "$fp_count_space" != "0"; then
184             AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
185         fi
186     fi
187     if test "$build_os" = "wsl"; then
188         # WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
189         formatted_path_unix=$(wslpath "$formatted_path")
190     else
191         # But Cygwin can
192         formatted_path_unix="$formatted_path"
193     fi
196 AbsolutePath()
198     # There appears to be no simple and portable method to get an absolute and
199     # canonical path, so we try creating the directory if does not exist and
200     # utilizing the shell and pwd.
202     # Args: $1: A possibly relative pathname
203     # Return value: $absolute_path
205     # Convert to unix path, mkdir would treat c:/path as a relative path.
206     PathFormat "$1"
207     local rel="$formatted_path_unix"
208     absolute_path=""
209     test ! -e "$rel" && mkdir -p "$rel"
210     if test -d "$rel" ; then
211         cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
212         absolute_path="$(pwd)"
213         cd - > /dev/null
214     else
215         AC_MSG_ERROR([Failed to resolve absolute path.  "$rel" does not exist or is not a directory.])
216     fi
219 WARNINGS_FILE=config.warn
220 WARNINGS_FILE_FOR_BUILD=config.Build.warn
221 rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
222 have_WARNINGS="no"
223 add_warning()
225     if test "$have_WARNINGS" = "no"; then
226         echo "*************************************" > "$WARNINGS_FILE"
227         have_WARNINGS="yes"
228         if command -v tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
229             dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
230             COLORWARN='*\e@<:@1;33;40m WARNING \e@<:@0m:'
231         else
232             COLORWARN="* WARNING :"
233         fi
234     fi
235     echo "$COLORWARN $@" >> "$WARNINGS_FILE"
238 dnl Some Mac User have the bad habit of letting a lot of crap
239 dnl accumulate in their PATH and even adding stuff in /usr/local/bin
240 dnl that confuse the build.
241 dnl For the ones that use LODE, let's be nice and protect them
242 dnl from themselves
244 mac_sanitize_path()
246     mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
247 dnl a common but nevertheless necessary thing that may be in a fancy
248 dnl path location is git, so make sure we have it
249     mac_git_path=`command -v git`
250     if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
251         mac_path="$mac_path:`dirname $mac_git_path`"
252     fi
253 dnl a not so common but nevertheless quite helpful thing that may be in a fancy
254 dnl path location is gpg, so make sure we find it
255     mac_gpg_path=`command -v gpg`
256     if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
257         mac_path="$mac_path:`dirname $mac_gpg_path`"
258     fi
259     PATH="$mac_path"
260     unset mac_path
261     unset mac_git_path
262     unset mac_gpg_path
265 dnl semantically test a three digits version
266 dnl $1 - $3 = minimal version
267 dnl $4 - $6 = current version
269 check_semantic_version_three()
271     test "$4" -gt "$1" \
272         -o \( "$4" -eq "$1" -a "$5" -gt "$2" \) \
273         -o \( "$4" -eq "$1" -a "$5" -eq "$2" -a "$6" -ge "$3" \)
274     return $?
277 dnl calls check_semantic_version_three with digits in named variables $1_MAJOR, $1_MINOR, $1_TINY
278 dnl $1 = current version prefix, e.g. EMSCRIPTEN => EMSCRIPTEN_
279 dnl $2 = postfix to $1, e.g. MIN => EMSCRIPTEN_MIN_
281 check_semantic_version_three_prefixed()
283     eval local MIN_MAJOR="\$${1}_${2}_MAJOR"
284     eval local MIN_MINOR="\$${1}_${2}_MINOR"
285     eval local MIN_TINY="\$${1}_${2}_TINY"
286     eval local CUR_MAJOR="\$${1}_MAJOR"
287     eval local CUR_MINOR="\$${1}_MINOR"
288     eval local CUR_TINY="\$${1}_TINY"
289     check_semantic_version_three $MIN_MAJOR $MIN_MINOR $MIN_TINY $CUR_MAJOR $CUR_MINOR $CUR_TINY
290     return $?
293 echo "********************************************************************"
294 echo "*"
295 echo "*   Running ${PACKAGE_NAME} build configuration."
296 echo "*"
297 echo "********************************************************************"
298 echo ""
300 dnl ===================================================================
301 dnl checks build and host OSes
302 dnl do this before argument processing to allow for platform dependent defaults
303 dnl ===================================================================
305 # Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
306 # Linux on WSL) trust that.
307 if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
308     ac_cv_host="x86_64-pc-wsl"
309     ac_cv_host_cpu="x86_64"
310     ac_cv_host_os="wsl"
311     ac_cv_build="$ac_cv_host"
312     ac_cv_build_cpu="$ac_cv_host_cpu"
313     ac_cv_build_os="$ac_cv_host_os"
315     # Emulation of Cygwin's cygpath command for WSL.
316     cygpath()
317     {
318         if test -n "$UNITTEST_WSL_CYGPATH"; then
319             echo -n cygpath "$@" "==> "
320         fi
322         # Cygwin's real cygpath has a plethora of options but we use only a few here.
323         local args="$@"
324         local opt
325         local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
326         OPTIND=1
328         while getopts dmuwlsp opt; do
329             case "$opt" in
330                 \?)
331                     AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
332                     ;;
333                 ?)
334                     eval opt_$opt=yes
335                     ;;
336             esac
337         done
339         shift $((OPTIND-1))
341         if test $# -ne 1; then
342             AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
343         fi
345         local input="$1"
347         local result
349         if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
350             # Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
352             if test -n "$opt_u"; then
353                 AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
354             fi
356             case "$input" in
357                 /mnt/*)
358                     # A Windows file in WSL format
359                     input=$(wslpath -w "$input")
360                     ;;
361                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
362                     # Already in Windows format
363                     ;;
364                 /*)
365                     input=$(wslpath -w "$input")
366                     ;;
367                 *)
368                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
369                     ;;
370             esac
371             if test -n "$opt_d" -o -n "$opt_s"; then
372                 input=$($WSL_LO_HELPER --8.3 "$input")
373             fi
374             if test -n "$opt_m"; then
375                 input="${input//\\//}"
376             fi
377             echo "$input"
378         else
379             # Print Unix path
381             case "$input" in
382                 [[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
383                     wslpath -u "$input"
384                     ;;
385                 /)
386                     echo "$input"
387                     ;;
388                 *)
389                     AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
390                     ;;
391             esac
392         fi
393     }
395     if test -n "$UNITTEST_WSL_CYGPATH"; then
396         BUILDDIR=.
398         # Nothing special with these file names, just arbitrary ones picked to test with
399         cygpath -d /usr/lib64/ld-linux-x86-64.so.2
400         cygpath -w /usr/lib64/ld-linux-x86-64.so.2
401         cygpath -m /usr/lib64/ld-linux-x86-64.so.2
402         cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
403         # At least on my machine for instance this file does have an 8.3 name
404         cygpath -d /mnt/c/windows/WindowsUpdate.log
405         # But for instance this one doesn't
406         cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
407         cygpath -ws /mnt/c/windows/WindowsUpdate.log
408         cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
409         cygpath -ms /mnt/c/windows/WindowsUpdate.log
411         cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
412         cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
414         exit 0
415     fi
417     if test -z "$WSL_LO_HELPER"; then
418         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/wsl-lo-helper" ; then
419             WSL_LO_HELPER="$LODE_HOME/opt/bin/wsl-lo-helper"
420         elif test -x "/opt/lo/bin/wsl-lo-helper"; then
421             WSL_LO_HELPER="/opt/lo/bin/wsl-lo-helper"
422         fi
423     fi
424     if test -z "$WSL_LO_HELPER"; then
425         AC_MSG_ERROR([wsl-lo-helper not found. See solenv/wsl/README.])
426     fi
429 AC_CANONICAL_HOST
430 AC_CANONICAL_BUILD
432 if test -n "$UNITTEST_WSL_PATHFORMAT"; then
433     BUILDDIR=.
434     GREP=grep
436     # Use of PathFormat must be after AC_CANONICAL_BUILD above
437     PathFormat /
438     printf "$formatted_path , $formatted_path_unix\n"
440     PathFormat $PWD
441     printf "$formatted_path , $formatted_path_unix\n"
443     PathFormat "$PROGRAMFILESX86"
444     printf "$formatted_path , $formatted_path_unix\n"
446     exit 0
449 AC_MSG_CHECKING([for product name])
450 PRODUCTNAME="AC_PACKAGE_NAME"
451 if test -n "$with_product_name" -a "$with_product_name" != no; then
452     PRODUCTNAME="$with_product_name"
454 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
455     PRODUCTNAME="${PRODUCTNAME}Dev"
457 AC_MSG_RESULT([$PRODUCTNAME])
458 AC_SUBST(PRODUCTNAME)
459 PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
460 AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
462 dnl ===================================================================
463 dnl Our version is defined by the AC_INIT() at the top of this script.
464 dnl ===================================================================
466 AC_MSG_CHECKING([for package version])
467 if test -n "$with_package_version" -a "$with_package_version" != no; then
468     PACKAGE_VERSION="$with_package_version"
470 AC_MSG_RESULT([$PACKAGE_VERSION])
472 set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
474 LIBO_VERSION_MAJOR=$1
475 LIBO_VERSION_MINOR=$2
476 LIBO_VERSION_MICRO=$3
477 LIBO_VERSION_PATCH=$4
479 LIBO_VERSION_SUFFIX=$5
481 # Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
482 # openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
483 # they get undoubled before actually passed to sed.
484 LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
485 test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
486 # LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
487 test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
489 # The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
490 # three non-negative integers. Please find more information about CFBundleVersion at
491 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
493 # The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
494 # of at most three non-negative integers. Please find more information about
495 # CFBundleShortVersionString at
496 # https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
498 # But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
500 if test "$enable_macosx_sandbox" = yes; then
501     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
502     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
503 else
504     MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
505     MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
508 AC_SUBST(LIBO_VERSION_MAJOR)
509 AC_SUBST(LIBO_VERSION_MINOR)
510 AC_SUBST(LIBO_VERSION_MICRO)
511 AC_SUBST(LIBO_VERSION_PATCH)
512 AC_SUBST(LIBO_VERSION_SUFFIX)
513 AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
514 AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
515 AC_SUBST(MACOSX_BUNDLE_VERSION)
517 AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
518 AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
519 AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
520 AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
522 git_date=`git log -1 --pretty=format:"%cd" --date=format:'%Y' 2>/dev/null`
523 LIBO_THIS_YEAR=${git_date:-2024}
524 AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
526 dnl ===================================================================
527 dnl Product version
528 dnl ===================================================================
529 AC_MSG_CHECKING([for product version])
530 PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
531 AC_MSG_RESULT([$PRODUCTVERSION])
532 AC_SUBST(PRODUCTVERSION)
534 AC_PROG_EGREP
535 # AC_PROG_EGREP doesn't set GREP on all systems as well
536 AC_PATH_PROG(GREP, grep)
538 BUILDDIR=`pwd`
539 cd $srcdir
540 SRC_ROOT=`pwd`
541 cd $BUILDDIR
542 x_Cygwin=[\#]
544 dnl ======================================
545 dnl Required GObject introspection version
546 dnl ======================================
547 INTROSPECTION_REQUIRED_VERSION=1.32.0
549 dnl ===================================================================
550 dnl Search all the common names for GNU Make
551 dnl ===================================================================
552 AC_MSG_CHECKING([for GNU Make])
554 # try to use our own make if it is available and GNUMAKE was not already defined
555 if test -z "$GNUMAKE"; then
556     if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
557         GNUMAKE="$LODE_HOME/opt/bin/make"
558     elif test -x "/opt/lo/bin/make"; then
559         GNUMAKE="/opt/lo/bin/make"
560     fi
563 GNUMAKE_WIN_NATIVE=
564 for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
565     if test -n "$a"; then
566         $a --version 2> /dev/null | grep GNU  2>&1 > /dev/null
567         if test $? -eq 0;  then
568             if test "$build_os" = "cygwin"; then
569                 if test -n "$($a -v | grep 'Built for Windows')" ; then
570                     GNUMAKE="$(cygpath -m "$(command -v "$(cygpath -u $a)")")"
571                     GNUMAKE_WIN_NATIVE="TRUE"
572                 else
573                     GNUMAKE=`command -v $a`
574                 fi
575             else
576                 GNUMAKE=`command -v $a`
577             fi
578             break
579         fi
580     fi
581 done
582 AC_MSG_RESULT($GNUMAKE)
583 if test -z "$GNUMAKE"; then
584     AC_MSG_ERROR([not found. install GNU Make.])
585 else
586     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
587         AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
588     fi
591 win_short_path_for_make()
593     local short_path="$1"
594     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
595         cygpath -sm "$short_path"
596     else
597         cygpath -u "$(cygpath -d "$short_path")"
598     fi
602 if test "$build_os" = "cygwin"; then
603     PathFormat "$SRC_ROOT"
604     SRC_ROOT="$formatted_path"
605     PathFormat "$BUILDDIR"
606     BUILDDIR="$formatted_path"
607     x_Cygwin=
608     AC_MSG_CHECKING(for explicit COMSPEC)
609     if test -z "$COMSPEC"; then
610         AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
611     else
612         AC_MSG_RESULT([found: $COMSPEC])
613     fi
616 AC_SUBST(SRC_ROOT)
617 AC_SUBST(BUILDDIR)
618 AC_SUBST(x_Cygwin)
619 AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
620 AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
621 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
623 if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
624     AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
627 # need sed in os checks...
628 AC_PATH_PROGS(SED, sed)
629 if test -z "$SED"; then
630     AC_MSG_ERROR([install sed to run this script])
633 # Set the ENABLE_LTO variable
634 # ===================================================================
635 AC_MSG_CHECKING([whether to use link-time optimization])
636 if test -n "$enable_lto" -a "$enable_lto" != "no"; then
637     ENABLE_LTO="TRUE"
638     AC_MSG_RESULT([yes])
639 else
640     ENABLE_LTO=""
641     AC_MSG_RESULT([no])
643 AC_SUBST(ENABLE_LTO)
645 AC_ARG_ENABLE(fuzz-options,
646     AS_HELP_STRING([--enable-fuzz-options],
647         [Randomly enable or disable each of those configurable options
648          that are supposed to be freely selectable without interdependencies,
649          or where bad interaction from interdependencies is automatically avoided.])
652 dnl ===================================================================
653 dnl When building for Android, --with-android-ndk,
654 dnl --with-android-ndk-toolchain-version and --with-android-sdk are
655 dnl mandatory
656 dnl ===================================================================
658 AC_ARG_WITH(android-ndk,
659     AS_HELP_STRING([--with-android-ndk],
660         [Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
663 AC_ARG_WITH(android-ndk-toolchain-version,
664     AS_HELP_STRING([--with-android-ndk-toolchain-version],
665         [Specify which toolchain version to use, of those present in the
666         Android NDK you are using. The default (and only supported version currently) is "clang5.0"]),,
667         with_android_ndk_toolchain_version=clang5.0)
669 AC_ARG_WITH(android-sdk,
670     AS_HELP_STRING([--with-android-sdk],
671         [Specify location of the Android SDK. Mandatory when building for Android.]),
674 AC_ARG_WITH(android-api-level,
675     AS_HELP_STRING([--with-android-api-level],
676         [Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
679 ANDROID_NDK_DIR=
680 if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
681     with_android_ndk="$SRC_ROOT/external/android-ndk"
683 if test -n "$with_android_ndk"; then
684     eval ANDROID_NDK_DIR=$with_android_ndk
686     ANDROID_API_LEVEL=21
687     if test -n "$with_android_api_level" ; then
688         ANDROID_API_LEVEL="$with_android_api_level"
689     fi
691     if test $host_cpu = arm; then
692         LLVM_TRIPLE=armv7a-linux-androideabi
693         ANDROID_SYSROOT_PLATFORM=arm-linux-androideabi
694         ANDROID_APP_ABI=armeabi-v7a
695         ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
696     elif test $host_cpu = aarch64; then
697         LLVM_TRIPLE=aarch64-linux-android
698         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
699         ANDROID_APP_ABI=arm64-v8a
700     elif test $host_cpu = x86_64; then
701         LLVM_TRIPLE=x86_64-linux-android
702         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
703         ANDROID_APP_ABI=x86_64
704     else
705         # host_cpu is something like "i386" or "i686" I guess, NDK uses
706         # "x86" in some contexts
707         LLVM_TRIPLE=i686-linux-android
708         ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
709         ANDROID_APP_ABI=x86
710     fi
712     # Set up a lot of pre-canned defaults
714     if test ! -f $ANDROID_NDK_DIR/RELEASE.TXT; then
715         if test ! -f $ANDROID_NDK_DIR/source.properties; then
716             AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_DIR.])
717         fi
718         ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_DIR/source.properties`
719     else
720         ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_DIR/RELEASE.TXT`
721     fi
722     if test -z "$ANDROID_NDK_VERSION";  then
723         AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
724     fi
725     case $ANDROID_NDK_VERSION in
726     r9*|r10*)
727         AC_MSG_ERROR([Building for Android requires NDK version >= 23.*])
728         ;;
729     11.1.*|12.1.*|13.1.*|14.1.*|16.*|17.*|18.*|19.*|20.*|21.*|22.*)
730         AC_MSG_ERROR([Building for Android requires NDK version >= 23.*])
731         ;;
732     23.*|24.*|25.*)
733         ;;
734     *)
735         AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 23.* to 25.* have been used successfully. Proceed at your own risk.])
736         add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 23.* to 25.* have been used successfully. Proceed at your own risk."
737         ;;
738     esac
740     case "$with_android_ndk_toolchain_version" in
741     clang5.0)
742         ANDROID_GCC_TOOLCHAIN_VERSION=4.9
743         ;;
744     *)
745         AC_MSG_ERROR([Unrecognized value for the --with-android-ndk-toolchain-version option. Building for Android is only supported with Clang 5.*])
746     esac
748     AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
750     # NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
751     # linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
752     # manage to link the (app-specific) single huge .so that is built for the app in
753     # android/source/ if there is debug information in a significant part of the object files.
754     # (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
755     # all objects have been built with debug information.)
756     case $build_os in
757     linux-gnu*)
758         android_HOST_TAG=linux-x86_64
759         ;;
760     darwin*)
761         android_HOST_TAG=darwin-x86_64
762         ;;
763     *)
764         AC_MSG_ERROR([We only support building for Android from Linux or macOS])
765         # ndk would also support windows and windows-x86_64
766         ;;
767     esac
768     ANDROID_TOOLCHAIN=$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/$android_HOST_TAG
769     ANDROID_COMPILER_BIN=$ANDROID_TOOLCHAIN/bin
771     test -z "$AR" && AR=$ANDROID_COMPILER_BIN/llvm-ar
772     test -z "$NM" && NM=$ANDROID_COMPILER_BIN/llvm-nm
773     test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/llvm-objdump
774     test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/llvm-ranlib
775     test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/llvm-strip
777     ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
778     ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
779     if test "$ENABLE_LTO" = TRUE; then
780         # -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
781         # $CC and $CXX when building external libraries
782         ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
783     fi
785     ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
787     if test -z "$CC"; then
788         CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
789         CC_BASE="clang"
790     fi
791     if test -z "$CXX"; then
792         CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
793         CXX_BASE="clang++"
794     fi
796 AC_SUBST(ANDROID_NDK_DIR)
797 AC_SUBST(ANDROID_API_LEVEL)
798 AC_SUBST(ANDROID_APP_ABI)
799 AC_SUBST(ANDROID_GCC_TOOLCHAIN_VERSION)
800 AC_SUBST(ANDROID_SYSROOT_PLATFORM)
801 AC_SUBST(ANDROID_TOOLCHAIN)
803 dnl ===================================================================
804 dnl --with-android-sdk
805 dnl ===================================================================
806 ANDROID_SDK_DIR=
807 if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
808     with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
810 if test -n "$with_android_sdk"; then
811     eval ANDROID_SDK_DIR=$with_android_sdk
812     PATH="$ANDROID_SDK_DIR/platform-tools:$ANDROID_SDK_DIR/tools:$PATH"
814 AC_SUBST(ANDROID_SDK_DIR)
816 AC_ARG_ENABLE([android-lok],
817     AS_HELP_STRING([--enable-android-lok],
818         [The Android app from the android/ subdir needs several tweaks all
819          over the place that break the LOK when used in the Online-based
820          Android app.  This switch indicates that the intent of this build is
821          actually the Online-based, non-modified LOK.])
823 ENABLE_ANDROID_LOK=
824 if test -n "$ANDROID_NDK_DIR" ; then
825     if test "$enable_android_lok" = yes; then
826         ENABLE_ANDROID_LOK=TRUE
827         AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
828         AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
829     else
830         AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
831     fi
833 AC_SUBST([ENABLE_ANDROID_LOK])
835 libo_FUZZ_ARG_ENABLE([android-editing],
836     AS_HELP_STRING([--enable-android-editing],
837         [Enable the experimental editing feature on Android.])
839 ENABLE_ANDROID_EDITING=
840 if test "$enable_android_editing" = yes; then
841     ENABLE_ANDROID_EDITING=TRUE
843 AC_SUBST([ENABLE_ANDROID_EDITING])
845 disable_database_connectivity_dependencies()
847     enable_evolution2=no
848     enable_firebird_sdbc=no
849     enable_mariadb_sdbc=no
850     enable_postgresql_sdbc=no
851     enable_report_builder=no
854 # ===================================================================
856 # Start initial platform setup
858 # The using_* variables reflect platform support and should not be
859 # changed after the "End initial platform setup" block.
860 # This is also true for most test_* variables.
861 # ===================================================================
862 build_crypto=yes
863 test_clucene=no
864 test_gdb_index=no
865 test_openldap=yes
866 test_split_debug=no
867 test_webdav=yes
868 usable_dlapi=yes
870 # There is currently just iOS not using salplug, so this explicitly enables it.
871 # must: using_freetype_fontconfig
872 #  may: using_headless_plugin defaults to $using_freetype_fontconfig
873 # must: using_x11
875 # Default values, as such probably valid just for Linux, set
876 # differently below just for Mac OSX, but at least better than
877 # hardcoding these as we used to do. Much of this is duplicated also
878 # in solenv for old build system and for gbuild, ideally we should
879 # perhaps define stuff like this only here in configure.ac?
881 LINKFLAGSSHL="-shared"
882 PICSWITCH="-fpic"
883 DLLPOST=".so"
885 LINKFLAGSNOUNDEFS="-Wl,-z,defs"
887 INSTROOTBASESUFFIX=
888 INSTROOTCONTENTSUFFIX=
889 SDKDIRNAME=sdk
891 HOST_PLATFORM="$host"
893 host_cpu_for_clang="$host_cpu"
895 case "$host_os" in
897 solaris*)
898     using_freetype_fontconfig=yes
899     using_x11=yes
900     build_skia=yes
901     _os=SunOS
903     dnl ===========================================================
904     dnl Check whether we're using Solaris 10 - SPARC or Intel.
905     dnl ===========================================================
906     AC_MSG_CHECKING([the Solaris operating system release])
907     _os_release=`echo $host_os | $SED -e s/solaris2\.//`
908     if test "$_os_release" -lt "10"; then
909         AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
910     else
911         AC_MSG_RESULT([ok ($_os_release)])
912     fi
914     dnl Check whether we're using a SPARC or i386 processor
915     AC_MSG_CHECKING([the processor type])
916     if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
917         AC_MSG_RESULT([ok ($host_cpu)])
918     else
919         AC_MSG_ERROR([only SPARC and i386 processors are supported])
920     fi
921     ;;
923 linux-gnu*|k*bsd*-gnu*|linux-musl*)
924     using_freetype_fontconfig=yes
925     using_x11=yes
926     build_skia=yes
927     test_gdb_index=yes
928     test_split_debug=yes
929     if test "$enable_fuzzers" = yes; then
930         test_system_freetype=no
931     fi
932     _os=Linux
933     ;;
935 gnu)
936     using_freetype_fontconfig=yes
937     using_x11=no
938     _os=GNU
939      ;;
941 cygwin*|wsl*)
942     # When building on Windows normally with MSVC under Cygwin,
943     # configure thinks that the host platform (the platform the
944     # built code will run on) is Cygwin, even if it obviously is
945     # Windows, which in Autoconf terminology is called
946     # "mingw32". (Which is misleading as MinGW is the name of the
947     # tool-chain, not an operating system.)
949     # Somewhat confusing, yes. But this configure script doesn't
950     # look at $host etc that much, it mostly uses its own $_os
951     # variable, set here in this case statement.
953     using_freetype_fontconfig=no
954     using_x11=no
955     test_unix_dlapi=no
956     test_openldap=no
957     enable_pagein=no
958     build_skia=yes
959     _os=WINNT
961     DLLPOST=".dll"
962     LINKFLAGSNOUNDEFS=
964     if test "$host_cpu" = "aarch64"; then
965         build_skia=no
966         enable_gpgmepp=no
967         enable_coinmp=no
968         enable_firebird_sdbc=no
969     fi
970     ;;
972 darwin*) # macOS
973     using_freetype_fontconfig=no
974     using_x11=no
975     build_skia=yes
976     enable_pagein=no
977     if test -n "$LODE_HOME" ; then
978         mac_sanitize_path
979         AC_MSG_NOTICE([sanitized the PATH to $PATH])
980     fi
981     _os=Darwin
982     INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
983     INSTROOTCONTENTSUFFIX=/Contents
984     SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
985     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
986     LINKFLAGSSHL="-dynamiclib"
988     # -fPIC is default
989     PICSWITCH=""
991     DLLPOST=".dylib"
993     # -undefined error is the default
994     LINKFLAGSNOUNDEFS=""
995     case "$host_cpu" in
996     aarch64|arm64)
997         # Apple's Clang uses "arm64"
998         host_cpu_for_clang=arm64
999     esac
1002 ios*) # iOS
1003     using_freetype_fontconfig=no
1004     using_x11=no
1005     build_crypto=no
1006     test_libcmis=no
1007     test_openldap=no
1008     test_webdav=no
1009     if test -n "$LODE_HOME" ; then
1010         mac_sanitize_path
1011         AC_MSG_NOTICE([sanitized the PATH to $PATH])
1012     fi
1013     enable_gpgmepp=no
1014     _os=iOS
1015     enable_mpl_subset=yes
1016     enable_lotuswordpro=no
1017     disable_database_connectivity_dependencies
1018     enable_coinmp=no
1019     enable_lpsolve=no
1020     enable_extension_integration=no
1021     enable_xmlhelp=no
1022     with_ppds=no
1023     if test "$enable_ios_simulator" = "yes"; then
1024         host=x86_64-apple-darwin
1025     fi
1026     # See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
1027     LINKFLAGSSHL="-dynamiclib"
1029     # -fPIC is default
1030     PICSWITCH=""
1032     DLLPOST=".dylib"
1034     # -undefined error is the default
1035     LINKFLAGSNOUNDEFS=""
1037     # HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
1038     # part, so use aarch64-apple-darwin for now.
1039     HOST_PLATFORM=aarch64-apple-darwin
1041     # Apple's Clang uses "arm64"
1042     host_cpu_for_clang=arm64
1045 freebsd*)
1046     using_freetype_fontconfig=yes
1047     using_x11=yes
1048     build_skia=yes
1049     AC_MSG_CHECKING([the FreeBSD operating system release])
1050     if test -n "$with_os_version"; then
1051         OSVERSION="$with_os_version"
1052     else
1053         OSVERSION=`/sbin/sysctl -n kern.osreldate`
1054     fi
1055     AC_MSG_RESULT([found OSVERSION=$OSVERSION])
1056     AC_MSG_CHECKING([which thread library to use])
1057     if test "$OSVERSION" -lt "500016"; then
1058         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1059         PTHREAD_LIBS="-pthread"
1060     elif test "$OSVERSION" -lt "502102"; then
1061         PTHREAD_CFLAGS="-D_THREAD_SAFE"
1062         PTHREAD_LIBS="-lc_r"
1063     else
1064         PTHREAD_CFLAGS=""
1065         PTHREAD_LIBS="-pthread"
1066     fi
1067     AC_MSG_RESULT([$PTHREAD_LIBS])
1068     _os=FreeBSD
1069     ;;
1071 *netbsd*)
1072     using_freetype_fontconfig=yes
1073     using_x11=yes
1074     test_gtk3_kde5=no
1075     build_skia=yes
1076     PTHREAD_LIBS="-pthread -lpthread"
1077     _os=NetBSD
1078     ;;
1080 openbsd*)
1081     using_freetype_fontconfig=yes
1082     using_x11=yes
1083     PTHREAD_CFLAGS="-D_THREAD_SAFE"
1084     PTHREAD_LIBS="-pthread"
1085     _os=OpenBSD
1086     ;;
1088 dragonfly*)
1089     using_freetype_fontconfig=yes
1090     using_x11=yes
1091     build_skia=yes
1092     PTHREAD_LIBS="-pthread"
1093     _os=DragonFly
1094     ;;
1096 linux-android*)
1097     # API exists, but seems not really usable since Android 7 AFAIK
1098     usable_dlapi=no
1099     using_freetype_fontconfig=yes
1100     using_headless_plugin=no
1101     using_x11=no
1102     build_crypto=no
1103     test_openldap=no
1104     test_system_freetype=no
1105     test_webdav=no
1106     disable_database_connectivity_dependencies
1107     enable_lotuswordpro=no
1108     enable_mpl_subset=yes
1109     enable_cairo_canvas=no
1110     enable_coinmp=yes
1111     enable_lpsolve=no
1112     enable_odk=no
1113     enable_python=no
1114     enable_xmlhelp=no
1115     _os=Android
1116     ;;
1118 haiku*)
1119     using_freetype_fontconfig=yes
1120     using_x11=no
1121     test_gtk3=no
1122     test_gtk3_kde5=no
1123     test_kf5=yes
1124     test_kf6=yes
1125     enable_odk=no
1126     enable_coinmp=no
1127     enable_pdfium=no
1128     enable_sdremote=no
1129     enable_postgresql_sdbc=no
1130     enable_firebird_sdbc=no
1131     _os=Haiku
1132     ;;
1134 emscripten)
1135     # API currently just exists in headers, not code
1136     usable_dlapi=no
1137     using_freetype_fontconfig=yes
1138     using_x11=yes
1139     test_openldap=no
1140     test_qt5=yes
1141     test_split_debug=yes
1142     test_system_freetype=no
1143     enable_compiler_plugins=no
1144     enable_customtarget_components=yes
1145     enable_split_debug=yes
1146     enable_wasm_strip=yes
1147     with_system_zlib=no
1148     with_theme="colibre"
1149     _os=Emscripten
1150     ;;
1153     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
1154     ;;
1155 esac
1157 AC_SUBST(HOST_PLATFORM)
1159 if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
1160     AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
1163 # Set defaults, if not set by platform
1164 test "${test_cups+set}" = set || test_cups="$using_x11"
1165 test "${test_dbus+set}" = set || test_dbus="$using_x11"
1166 test "${test_gen+set}" = set || test_gen="$using_x11"
1167 test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
1168 test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
1169 test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
1170 test "${test_kf5+set}" = set || test_kf5="$using_x11"
1171 test "${test_kf6+set}" = set || test_kf6="$using_x11"
1172 # don't handle test_qt5, so it can disable test_kf5 later
1173 test "${test_qt6+set}" = set || test_qt6="$using_x11"
1174 test "${test_randr+set}" = set || test_randr="$using_x11"
1175 test "${test_xrender+set}" = set || test_xrender="$using_x11"
1176 test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
1178 test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
1179 # Make sure fontconfig and freetype test both either system or not
1180 test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
1181 test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
1183 # convenience / platform overriding "fixes"
1184 # Don't sort!
1185 test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
1186 test "$test_kf5" = yes && test_qt5=yes
1187 test "$test_gtk3" != yes && enable_gtk3=no
1188 test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
1189 test "$using_freetype_fontconfig" = no && using_headless_plugin=no
1190 test "$using_freetype_fontconfig" = yes && test_cairo=yes
1192 # Keep in sync with the above $using_x11 depending test default list
1193 disable_x11_tests()
1195     test_cups=no
1196     test_dbus=no
1197     test_gen=no
1198     test_gstreamer_1_0=no
1199     test_gtk3_kde5=no
1200     test_gtk3=no
1201     test_gtk4=no
1202     test_kf5=no
1203     test_kf6=no
1204     test_qt5=no
1205     test_qt6=no
1206     test_randr=no
1207     test_xrender=no
1210 test "$using_x11" = yes && USING_X11=TRUE
1212 if test "$using_freetype_fontconfig" = yes; then
1213     AC_DEFINE(USE_HEADLESS_CODE)
1214     USE_HEADLESS_CODE=TRUE
1215     if test "$using_headless_plugin" = yes; then
1216         AC_DEFINE(ENABLE_HEADLESS)
1217         ENABLE_HEADLESS=TRUE
1218     fi
1219 else
1220     test_fontconfig=no
1221     test_freetype=no
1224 AC_SUBST(ENABLE_HEADLESS)
1225 AC_SUBST(USE_HEADLESS_CODE)
1227 AC_MSG_NOTICE([VCL platform has a usable dynamic loading API: $usable_dlapi])
1228 AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
1229 AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
1230 AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
1232 # ===================================================================
1234 # End initial platform setup
1236 # ===================================================================
1238 if test "$_os" = "Android" ; then
1239     # Verify that the NDK and SDK options are proper
1240     if test -z "$with_android_ndk"; then
1241         AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
1242     elif test ! -f "$ANDROID_NDK_DIR/meta/abis.json"; then
1243         AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
1244     fi
1246     if test -z "$ANDROID_SDK_DIR"; then
1247         AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
1248     elif test ! -d "$ANDROID_SDK_DIR/platforms"; then
1249         AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
1250     fi
1253 AC_SUBST(SDKDIRNAME)
1255 AC_SUBST(PTHREAD_CFLAGS)
1256 AC_SUBST(PTHREAD_LIBS)
1258 # Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
1259 # By default use the ones specified by our build system,
1260 # but explicit override is possible.
1261 AC_MSG_CHECKING(for explicit AFLAGS)
1262 if test -n "$AFLAGS"; then
1263     AC_MSG_RESULT([$AFLAGS])
1264     x_AFLAGS=
1265 else
1266     AC_MSG_RESULT(no)
1267     x_AFLAGS=[\#]
1269 AC_MSG_CHECKING(for explicit CFLAGS)
1270 if test -n "$CFLAGS"; then
1271     AC_MSG_RESULT([$CFLAGS])
1272     x_CFLAGS=
1273 else
1274     AC_MSG_RESULT(no)
1275     x_CFLAGS=[\#]
1277 AC_MSG_CHECKING(for explicit CXXFLAGS)
1278 if test -n "$CXXFLAGS"; then
1279     AC_MSG_RESULT([$CXXFLAGS])
1280     x_CXXFLAGS=
1281 else
1282     AC_MSG_RESULT(no)
1283     x_CXXFLAGS=[\#]
1285 AC_MSG_CHECKING(for explicit OBJCFLAGS)
1286 if test -n "$OBJCFLAGS"; then
1287     AC_MSG_RESULT([$OBJCFLAGS])
1288     x_OBJCFLAGS=
1289 else
1290     AC_MSG_RESULT(no)
1291     x_OBJCFLAGS=[\#]
1293 AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
1294 if test -n "$OBJCXXFLAGS"; then
1295     AC_MSG_RESULT([$OBJCXXFLAGS])
1296     x_OBJCXXFLAGS=
1297 else
1298     AC_MSG_RESULT(no)
1299     x_OBJCXXFLAGS=[\#]
1301 AC_MSG_CHECKING(for explicit LDFLAGS)
1302 if test -n "$LDFLAGS"; then
1303     AC_MSG_RESULT([$LDFLAGS])
1304     x_LDFLAGS=
1305 else
1306     AC_MSG_RESULT(no)
1307     x_LDFLAGS=[\#]
1309 AC_SUBST(AFLAGS)
1310 AC_SUBST(CFLAGS)
1311 AC_SUBST(CXXFLAGS)
1312 AC_SUBST(OBJCFLAGS)
1313 AC_SUBST(OBJCXXFLAGS)
1314 AC_SUBST(LDFLAGS)
1315 AC_SUBST(x_AFLAGS)
1316 AC_SUBST(x_CFLAGS)
1317 AC_SUBST(x_CXXFLAGS)
1318 AC_SUBST(x_OBJCFLAGS)
1319 AC_SUBST(x_OBJCXXFLAGS)
1320 AC_SUBST(x_LDFLAGS)
1322 dnl These are potentially set for MSVC, in the code checking for UCRT below:
1323 my_original_CFLAGS=$CFLAGS
1324 my_original_CXXFLAGS=$CXXFLAGS
1325 my_original_CPPFLAGS=$CPPFLAGS
1327 dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
1328 dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
1329 dnl AC_PROG_CC internally.
1330 if test "$_os" != "WINNT"; then
1331     # AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that (and avoid -O2 during AC_PROG_CC,
1332     # Clang 12.0.1 occasionally SEGVs on some of the test invocations during AC_PROG_CC with -O2):
1333     save_CFLAGS=$CFLAGS
1334     CFLAGS=-g
1335     AC_PROG_CC
1336     CFLAGS=$save_CFLAGS
1337     if test -z "$CC_BASE"; then
1338         CC_BASE=`first_arg_basename "$CC"`
1339     fi
1342 if test "$_os" != "WINNT"; then
1343     AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
1344 else
1345     ENDIANNESS=little
1347 AC_SUBST(ENDIANNESS)
1349 if test "$usable_dlapi" != no; then
1350     AC_DEFINE([HAVE_DLAPI])
1351     if test "$test_unix_dlapi" != no; then
1352         save_LIBS="$LIBS"
1353         AC_SEARCH_LIBS([dlsym], [dl],
1354             [case "$ac_cv_search_dlsym" in -l*) UNIX_DLAPI_LIBS="$ac_cv_search_dlsym";; esac],
1355             [AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
1356         LIBS="$save_LIBS"
1357         AC_DEFINE([HAVE_UNIX_DLAPI])
1358     fi
1360 AC_SUBST(UNIX_DLAPI_LIBS)
1362 # Check for a (GNU) backtrace implementation
1363 AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
1364 AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
1365 AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
1366     save_LIBS="$LIBS"
1367     AC_SEARCH_LIBS([backtrace], [libexecinfo],
1368         [case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
1369         [PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
1370     LIBS="$save_LIBS"
1372 AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
1373     AC_DEFINE([HAVE_FEATURE_BACKTRACE])
1376 dnl ===================================================================
1377 dnl Sanity checks for Emscripten SDK setup
1378 dnl ===================================================================
1380 EMSCRIPTEN_MIN_MAJOR=2
1381 EMSCRIPTEN_MIN_MINOR=0
1382 EMSCRIPTEN_MIN_TINY=31
1383 EMSCRIPTEN_MIN_VERSION="${EMSCRIPTEN_MIN_MAJOR}.${EMSCRIPTEN_MIN_MINOR}.${EMSCRIPTEN_MIN_TINY}"
1385 if test "$_os" = "Emscripten"; then
1386     AC_MSG_CHECKING([if Emscripten is at least $EMSCRIPTEN_MIN_VERSION])
1387     if test -z "$EMSCRIPTEN_VERSION_H"; then
1388         AS_IF([test -z "$EMSDK"],
1389               [AC_MSG_ERROR([No \$EMSDK environment variable.])])
1390         EMSCRIPTEN_VERSION_H=$EMSDK/upstream/emscripten/cache/sysroot/include/emscripten/version.h
1391     fi
1392     if test -f "$EMSCRIPTEN_VERSION_H"; then
1393         EMSCRIPTEN_MAJOR=$($GREP __EMSCRIPTEN_major__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1394         EMSCRIPTEN_MINOR=$($GREP __EMSCRIPTEN_minor__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1395         EMSCRIPTEN_TINY=$($GREP __EMSCRIPTEN_tiny__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1396     else
1397         EMSCRIPTEN_DEFINES=$(echo | emcc -dM -E - | $GREP __EMSCRIPTEN_)
1398         EMSCRIPTEN_MAJOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
1399         EMSCRIPTEN_MINOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
1400         EMSCRIPTEN_TINY=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
1401     fi
1403     EMSCRIPTEN_VERSION="${EMSCRIPTEN_MAJOR}.${EMSCRIPTEN_MINOR}.${EMSCRIPTEN_TINY}"
1405     check_semantic_version_three_prefixed EMSCRIPTEN MIN
1406     if test $? -eq 0; then
1407         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
1408     else
1409         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
1410     fi
1412     EMSCRIPTEN_ERROR=0
1413     if ! command -v emconfigure >/dev/null 2>&1; then
1414         AC_MSG_WARN([emconfigure must be in your \$PATH])
1415         EMSCRIPTEN_ERROR=1
1416     fi
1417     if test -z "$EMMAKEN_JUST_CONFIGURE"; then
1418         AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
1419         EMSCRIPTEN_ERROR=1
1420     fi
1421     EMSDK_FILE_PACKAGER="$(em-config EMSCRIPTEN_ROOT)"/tools/file_packager
1422     if ! test -x "$EMSDK_FILE_PACKAGER"; then
1423         AC_MSG_WARN([No file_packager found in $(em-config EMSCRIPTEN_ROOT)/tools/file_packager.])
1424         EMSCRIPTEN_ERROR=1
1425     fi
1426     if test $EMSCRIPTEN_ERROR -ne 0; then
1427         AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
1428     fi
1430     dnl Some build-side things are conditional on "EMSCRIPTEN in BUILD_TYPE_FOR_HOST":
1431     BUILD_TYPE="$BUILD_TYPE EMSCRIPTEN"
1433 AC_SUBST(EMSDK_FILE_PACKAGER)
1435 ###############################################################################
1436 # Extensions switches --enable/--disable
1437 ###############################################################################
1438 # By default these should be enabled unless having extra dependencies.
1439 # If there is extra dependency over configure options then the enable should
1440 # be automagic based on whether the requiring feature is enabled or not.
1441 # All this options change anything only with --enable-extension-integration.
1443 # The name of this option and its help string makes it sound as if
1444 # extensions are built anyway, just not integrated in the installer,
1445 # if you use --disable-extension-integration. Is that really the
1446 # case?
1448 AC_ARG_ENABLE(ios-simulator,
1449     AS_HELP_STRING([--enable-ios-simulator],
1450         [build for iOS simulator])
1453 libo_FUZZ_ARG_ENABLE(extension-integration,
1454     AS_HELP_STRING([--disable-extension-integration],
1455         [Disable integration of the built extensions in the installer of the
1456          product. Use this switch to disable the integration.])
1459 AC_ARG_ENABLE(avmedia,
1460     AS_HELP_STRING([--disable-avmedia],
1461         [Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.]),
1462 ,test "${enable_avmedia+set}" = set || enable_avmedia=yes)
1464 AC_ARG_ENABLE(database-connectivity,
1465     AS_HELP_STRING([--disable-database-connectivity],
1466         [Disable various database connectivity. Work in progress, use only if you are hacking on it.])
1469 # This doesn't mean not building (or "integrating") extensions
1470 # (although it probably should; i.e. it should imply
1471 # --disable-extension-integration I guess), it means not supporting
1472 # any extension mechanism at all
1473 libo_FUZZ_ARG_ENABLE(extensions,
1474     AS_HELP_STRING([--disable-extensions],
1475         [Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
1478 AC_ARG_ENABLE(scripting,
1479     AS_HELP_STRING([--disable-scripting],
1480         [Disable BASIC, Java and Python. Work in progress, use only if you are hacking on it.]),
1481 ,test "${enable_scripting+set}" = set || enable_scripting=yes)
1483 # This is mainly for Android and iOS, but could potentially be used in some
1484 # special case otherwise, too, so factored out as a separate setting
1486 AC_ARG_ENABLE(dynamic-loading,
1487     AS_HELP_STRING([--disable-dynamic-loading],
1488         [Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
1491 libo_FUZZ_ARG_ENABLE(report-builder,
1492     AS_HELP_STRING([--disable-report-builder],
1493         [Disable the Report Builder.])
1496 libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
1497     AS_HELP_STRING([--enable-ext-wiki-publisher],
1498         [Enable the Wiki Publisher extension.])
1501 libo_FUZZ_ARG_ENABLE(lpsolve,
1502     AS_HELP_STRING([--disable-lpsolve],
1503         [Disable compilation of the lp solve solver ])
1505 libo_FUZZ_ARG_ENABLE(coinmp,
1506     AS_HELP_STRING([--disable-coinmp],
1507         [Disable compilation of the CoinMP solver ])
1510 libo_FUZZ_ARG_ENABLE(pdfimport,
1511     AS_HELP_STRING([--disable-pdfimport],
1512         [Disable building the PDF import feature.])
1515 libo_FUZZ_ARG_ENABLE(pdfium,
1516     AS_HELP_STRING([--disable-pdfium],
1517         [Disable building PDFium. Results in insecure PDF signature verification.])
1520 libo_FUZZ_ARG_ENABLE(skia,
1521     AS_HELP_STRING([--disable-skia],
1522         [Disable building Skia. Use --enable-skia=debug to build without optimizations.])
1525 ###############################################################################
1527 dnl ---------- *** ----------
1529 libo_FUZZ_ARG_ENABLE(mergelibs,
1530     AS_HELP_STRING([--enable-mergelibs=yes/no/more],
1531         [Merge several of the smaller libraries into one big "merged" library.
1532          The "more" option will link even more of the smaller libraries.
1533          "more" not appropriate for distros which split up LibreOffice into multiple packages.
1534          It is only appropriate for situations where all of LO is delivered in a single install/package. ])
1537 libo_FUZZ_ARG_ENABLE(breakpad,
1538     AS_HELP_STRING([--enable-breakpad],
1539         [Enables breakpad for crash reporting.])
1542 libo_FUZZ_ARG_ENABLE(crashdump,
1543     AS_HELP_STRING([--disable-crashdump],
1544         [Disable dump.ini and dump-file, when --enable-breakpad])
1547 AC_ARG_ENABLE(fetch-external,
1548     AS_HELP_STRING([--disable-fetch-external],
1549         [Disables fetching external tarballs from web sources.])
1552 AC_ARG_ENABLE(fuzzers,
1553     AS_HELP_STRING([--enable-fuzzers],
1554         [Enables building libfuzzer targets for fuzz testing.])
1557 libo_FUZZ_ARG_ENABLE(pch,
1558     AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
1559         [Enables precompiled header support for C++. Forced default on Windows/VC build.
1560          Using 'system' will include only external headers, 'base' will add also headers
1561          from base modules, 'normal' will also add all headers except from the module built,
1562          'full' will use all suitable headers even from a module itself.])
1565 libo_FUZZ_ARG_ENABLE(epm,
1566     AS_HELP_STRING([--enable-epm],
1567         [LibreOffice includes self-packaging code, that requires epm, however epm is
1568          useless for large scale package building.])
1571 libo_FUZZ_ARG_ENABLE(odk,
1572     AS_HELP_STRING([--enable-odk],
1573         [Enable building the Office Development Kit, the part that extensions need to build against])
1576 AC_ARG_ENABLE(mpl-subset,
1577     AS_HELP_STRING([--enable-mpl-subset],
1578         [Don't compile any pieces which are not MPL or more liberally licensed])
1581 libo_FUZZ_ARG_ENABLE(evolution2,
1582     AS_HELP_STRING([--enable-evolution2],
1583         [Allows the built-in evolution 2 addressbook connectivity build to be
1584          enabled.])
1587 AC_ARG_ENABLE(avahi,
1588     AS_HELP_STRING([--enable-avahi],
1589         [Determines whether to use Avahi to advertise Impress to remote controls.])
1592 libo_FUZZ_ARG_ENABLE(werror,
1593     AS_HELP_STRING([--enable-werror],
1594         [Turn warnings to errors. (Has no effect in modules where the treating
1595          of warnings as errors is disabled explicitly.)]),
1598 libo_FUZZ_ARG_ENABLE(assert-always-abort,
1599     AS_HELP_STRING([--enable-assert-always-abort],
1600         [make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
1603 libo_FUZZ_ARG_ENABLE(dbgutil,
1604     AS_HELP_STRING([--enable-dbgutil],
1605         [Provide debugging support from --enable-debug and include additional debugging
1606          utilities such as object counting or more expensive checks.
1607          This is the recommended option for developers.
1608          Note that this makes the build ABI incompatible, it is not possible to mix object
1609          files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
1611 libo_FUZZ_ARG_ENABLE(debug,
1612     AS_HELP_STRING([--enable-debug],
1613         [Include debugging information, disable compiler optimization and inlining plus
1614          extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
1616 libo_FUZZ_ARG_ENABLE(split-debug,
1617     AS_HELP_STRING([--disable-split-debug],
1618         [Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
1619          saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
1621 libo_FUZZ_ARG_ENABLE(gdb-index,
1622     AS_HELP_STRING([--disable-gdb-index],
1623         [Disables creating debug information in the gdb index format, which makes gdb start faster.
1624          The feature requires a linker that supports the --gdb-index option.]))
1626 libo_FUZZ_ARG_ENABLE(sal-log,
1627     AS_HELP_STRING([--enable-sal-log],
1628         [Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
1630 libo_FUZZ_ARG_ENABLE(symbols,
1631     AS_HELP_STRING([--enable-symbols],
1632         [Generate debug information.
1633          By default, enabled for --enable-debug and --enable-dbgutil, disabled
1634          otherwise. It is possible to explicitly specify gbuild build targets
1635          (where 'all' means everything, '-' prepended means to not enable, '/' appended means
1636          everything in the directory; there is no ordering, more specific overrides
1637          more general, and disabling takes precedence).
1638          Example: --enable-symbols="all -sw/ -Library_sc".]))
1640 libo_FUZZ_ARG_ENABLE(optimized,
1641     AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
1642         [Whether to compile with optimization flags.
1643          By default, disabled for --enable-debug and --enable-dbgutil, enabled
1644          otherwise. Using 'debug' will try to use only optimizations that should
1645          not interfere with debugging. For Emscripten we default to optimized (-O1)
1646          debug build, as otherwise binaries become too large.]))
1648 libo_FUZZ_ARG_ENABLE(runtime-optimizations,
1649     AS_HELP_STRING([--disable-runtime-optimizations],
1650         [Statically disable certain runtime optimizations (like rtl/alloc.h or
1651          JVM JIT) that are known to interact badly with certain dynamic analysis
1652          tools (like -fsanitize=address or Valgrind).  By default, disabled iff
1653          CC contains "-fsanitize=*".  (For Valgrind, those runtime optimizations
1654          are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
1656 AC_ARG_WITH(valgrind,
1657     AS_HELP_STRING([--with-valgrind],
1658         [Make availability of Valgrind headers a hard requirement.]))
1660 libo_FUZZ_ARG_ENABLE(compiler-plugins,
1661     AS_HELP_STRING([--enable-compiler-plugins],
1662         [Enable compiler plugins that will perform additional checks during
1663          building. Enabled automatically by --enable-dbgutil.
1664          Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
1665 COMPILER_PLUGINS_DEBUG=
1666 if test "$enable_compiler_plugins" = debug; then
1667     enable_compiler_plugins=yes
1668     COMPILER_PLUGINS_DEBUG=TRUE
1671 libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
1672     AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
1673         [Disable use of precompiled headers when running the Clang compiler plugin analyzer.  Not
1674          relevant in the --disable-compiler-plugins case.]))
1676 libo_FUZZ_ARG_ENABLE(ooenv,
1677     AS_HELP_STRING([--enable-ooenv],
1678         [Enable ooenv for the instdir installation.]))
1680 AC_ARG_ENABLE(lto,
1681     AS_HELP_STRING([--enable-lto],
1682         [Enable link-time optimization. Suitable for (optimised) product builds. Building might take
1683          longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
1684          linker.)]))
1686 AC_ARG_ENABLE(python,
1687     AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
1688         [Enables or disables Python support at run-time.
1689          Also specifies what Python to use at build-time.
1690          'fully-internal' even forces the internal version for uses of Python
1691          during the build.
1692          On macOS the only choices are
1693          'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
1694          ]))
1696 libo_FUZZ_ARG_ENABLE(gtk3,
1697     AS_HELP_STRING([--disable-gtk3],
1698         [Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
1699 ,test "${test_gtk3}" = no -o "${enable_gtk3+set}" = set || enable_gtk3=yes)
1701 AC_ARG_ENABLE(gtk4,
1702     AS_HELP_STRING([--enable-gtk4],
1703         [Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
1705 AC_ARG_ENABLE(atspi-tests,
1706     AS_HELP_STRING([--disable-atspi-tests],
1707         [Determines whether to enable AT-SPI2 tests for the GTK3 vclplug.]))
1709 AC_ARG_ENABLE(introspection,
1710     AS_HELP_STRING([--enable-introspection],
1711         [Generate files for GObject introspection.  Requires --enable-gtk3.  (Typically used by
1712          Linux distributions.)]))
1714 AC_ARG_ENABLE(split-app-modules,
1715     AS_HELP_STRING([--enable-split-app-modules],
1716         [Split file lists for app modules, e.g. base, calc.
1717          Has effect only with make distro-pack-install]),
1720 AC_ARG_ENABLE(split-opt-features,
1721     AS_HELP_STRING([--enable-split-opt-features],
1722         [Split file lists for some optional features, e.g. pyuno, testtool.
1723          Has effect only with make distro-pack-install]),
1726 libo_FUZZ_ARG_ENABLE(cairo-canvas,
1727     AS_HELP_STRING([--disable-cairo-canvas],
1728         [Determines whether to build the Cairo canvas on platforms where Cairo is available.]),
1731 libo_FUZZ_ARG_ENABLE(dbus,
1732     AS_HELP_STRING([--disable-dbus],
1733         [Determines whether to enable features that depend on dbus.
1734          e.g. Presentation mode screensaver control, bluetooth presentation control, automatic font install]),
1735 ,test "${enable_dbus+set}" = set || enable_dbus=yes)
1737 libo_FUZZ_ARG_ENABLE(sdremote,
1738     AS_HELP_STRING([--disable-sdremote],
1739         [Determines whether to enable Impress remote control (i.e. the server component).]),
1740 ,test "${enable_sdremote+set}" = set || enable_sdremote=yes)
1742 libo_FUZZ_ARG_ENABLE(sdremote-bluetooth,
1743     AS_HELP_STRING([--disable-sdremote-bluetooth],
1744         [Determines whether to build sdremote with bluetooth support.
1745          Requires dbus on Linux.]))
1747 libo_FUZZ_ARG_ENABLE(gio,
1748     AS_HELP_STRING([--disable-gio],
1749         [Determines whether to use the GIO support.]),
1750 ,test "${enable_gio+set}" = set || enable_gio=yes)
1752 AC_ARG_ENABLE(qt5,
1753     AS_HELP_STRING([--enable-qt5],
1754         [Determines whether to use Qt5 vclplug on platforms where Qt5 is
1755          available.]),
1758 AC_ARG_ENABLE(qt6,
1759     AS_HELP_STRING([--enable-qt6],
1760         [Determines whether to use Qt6 vclplug on platforms where Qt6 is
1761          available.]),
1764 AC_ARG_ENABLE(kf5,
1765     AS_HELP_STRING([--enable-kf5],
1766         [Determines whether to use Qt5/KF5 vclplug on platforms where Qt5 and
1767          KF5 are available.]),
1770 AC_ARG_ENABLE(kf6,
1771     AS_HELP_STRING([--enable-kf6],
1772         [Determines whether to use KF6 vclplug on platforms where Qt6 and
1773          KF6 are available.]),
1777 AC_ARG_ENABLE(gtk3_kde5,
1778     AS_HELP_STRING([--enable-gtk3-kde5],
1779         [Determines whether to use Gtk3 vclplug with KF5 file dialogs on
1780          platforms where Gtk3, Qt5 and Plasma is available.]),
1783 AC_ARG_ENABLE(gen,
1784     AS_HELP_STRING([--enable-gen],
1785         [To select the gen backend in case of --disable-dynamic-loading.
1786          Per default auto-enabled when X11 is used.]),
1787 ,test "${test_gen}" = no -o "${enable_gen+set}" = set || enable_gen=yes)
1789 AC_ARG_ENABLE(gui,
1790     AS_HELP_STRING([--disable-gui],
1791         [Disable use of X11 or Wayland to reduce dependencies (e.g. for building LibreOfficeKit).]),
1792 ,enable_gui=yes)
1794 libo_FUZZ_ARG_ENABLE(randr,
1795     AS_HELP_STRING([--disable-randr],
1796         [Disable RandR support in the vcl project.]),
1797 ,test "${enable_randr+set}" = set || enable_randr=yes)
1799 libo_FUZZ_ARG_ENABLE(gstreamer-1-0,
1800     AS_HELP_STRING([--disable-gstreamer-1-0],
1801         [Disable building with the gstreamer 1.0 avmedia backend.]),
1802 ,test "${enable_gstreamer_1_0+set}" = set || enable_gstreamer_1_0=yes)
1804 libo_FUZZ_ARG_ENABLE([eot],
1805     [AS_HELP_STRING([--enable-eot],
1806         [Enable support for Embedded OpenType fonts.])],
1807 ,test "${enable_eot+set}" = set || enable_eot=no)
1809 libo_FUZZ_ARG_ENABLE(cve-tests,
1810     AS_HELP_STRING([--disable-cve-tests],
1811         [Prevent CVE tests to be executed]),
1814 AC_ARG_ENABLE(build-opensymbol,
1815     AS_HELP_STRING([--enable-build-opensymbol],
1816         [Do not use the prebuilt opens___.ttf. Build it instead. This needs
1817          fontforge installed.]),
1820 AC_ARG_ENABLE(dependency-tracking,
1821     AS_HELP_STRING([--enable-dependency-tracking],
1822         [Do not reject slow dependency extractors.])[
1823   --disable-dependency-tracking
1824                           Disables generation of dependency information.
1825                           Speed up one-time builds.],
1828 AC_ARG_ENABLE(icecream,
1829     AS_HELP_STRING([--enable-icecream],
1830         [Use the 'icecream' distributed compiling tool to speedup the compilation.
1831          It defaults to /opt/icecream for the location of the icecream gcc/g++
1832          wrappers, you can override that using --with-gcc-home=/the/path switch.]),
1835 AC_ARG_ENABLE(ld,
1836     AS_HELP_STRING([--enable-ld=<linker>],
1837         [Use the specified linker. Both 'gold' and 'lld' linkers generally use less memory and link faster.
1838          By default tries to use the best linker possible, use --disable-ld to use the default linker.
1839          If <linker> contains any ':', the part before the first ':' is used as the value of
1840          -fuse-ld, while the part after the first ':' is used as the value of --ld-path (which is
1841          needed for Clang 12).]),
1844 libo_FUZZ_ARG_ENABLE(cups,
1845     AS_HELP_STRING([--disable-cups],
1846         [Do not build cups support.])
1849 AC_ARG_ENABLE(ccache,
1850     AS_HELP_STRING([--disable-ccache],
1851         [Do not try to use ccache automatically.
1852          By default we will try to detect if ccache is available; in that case if
1853          CC/CXX are not yet set, and --enable-icecream is not given, we
1854          attempt to use ccache. --disable-ccache disables ccache completely.
1855          Additionally ccache's depend mode is enabled if possible,
1856          use --enable-ccache=nodepend to enable ccache without depend mode.
1860 AC_ARG_ENABLE(z7-debug,
1861     AS_HELP_STRING([--enable-z7-debug],
1862         [Makes the MSVC compiler use -Z7 for debugging instead of the default -Zi. Using this option takes
1863          more disk spaces but allows to use ccache. Final PDB files are created even with this option enabled.
1864          Enabled by default if ccache is detected.]))
1866 libo_FUZZ_ARG_ENABLE(online-update,
1867     AS_HELP_STRING([--enable-online-update],
1868         [Enable the online update service that will check for new versions of
1869          LibreOffice. Disabled by default. Requires --with-privacy-policy-url to be set.]),
1872 libo_FUZZ_ARG_ENABLE(online-update-mar,
1873     AS_HELP_STRING([--enable-online-update-mar],
1874         [Enable the experimental Mozilla-like online update service that will
1875          check for new versions of LibreOffice. Disabled by default.]),
1878 libo_FUZZ_ARG_WITH(online-update-mar-baseurl,
1879     AS_HELP_STRING([--with-online-update-mar-baseurl=...],
1880         [Set the base URL value for --enable-online-update-mar.
1881          (Can be left off for debug purposes, even if that may render the feature
1882          non-functional.)]),
1885 libo_FUZZ_ARG_WITH(online-update-mar-certificateder,
1886     AS_HELP_STRING([--with-online-update-mar-certificateder=...],
1887         [Set the certificate DER value for --enable-online-update-mar.
1888          (Can be left off for debug purposes, even if that may render the feature
1889          non-functional.)]),
1892 libo_FUZZ_ARG_WITH(online-update-mar-certificatename,
1893     AS_HELP_STRING([--with-online-update-mar-certificatename=...],
1894         [Set the certificate name value for --enable-online-update-mar.
1895          (Can be left off for debug purposes, even if that may render the feature
1896          non-functional.)]),
1899 libo_FUZZ_ARG_WITH(online-update-mar-certificatepath,
1900     AS_HELP_STRING([--with-online-update-mar-certificatepath=...],
1901         [Set the certificate path value for --enable-online-update-mar.
1902          (Can be left off for debug purposes, even if that may render the feature
1903          non-functional.)]),
1906 libo_FUZZ_ARG_ENABLE(extension-update,
1907     AS_HELP_STRING([--disable-extension-update],
1908         [Disable possibility to update installed extensions.]),
1911 libo_FUZZ_ARG_ENABLE(release-build,
1912     AS_HELP_STRING([--enable-release-build],
1913         [Enable release build. Note that the "release build" choice is orthogonal to
1914          whether symbols are present, debug info is generated, or optimization
1915          is done.
1916          See https://wiki.documentfoundation.org/Development/DevBuild]),
1919 libo_FUZZ_ARG_ENABLE(hardening-flags,
1920     AS_HELP_STRING([--enable-hardening-flags],
1921         [Enable automatically using hardening compiler flags. Distros typically
1922          instead use their default configuration via CXXFLAGS, etc. But this provides a
1923          convenient set of default hardening flags for non-distros]),
1926 AC_ARG_ENABLE(windows-build-signing,
1927     AS_HELP_STRING([--enable-windows-build-signing],
1928         [Enable signing of windows binaries (*.exe, *.dll)]),
1931 AC_ARG_ENABLE(silent-msi,
1932     AS_HELP_STRING([--enable-silent-msi],
1933         [Enable MSI with LIMITUI=1 (silent install).]),
1936 AC_ARG_ENABLE(wix,
1937     AS_HELP_STRING([--enable-wix],
1938         [Build Windows installer using WiX.]),
1941 AC_ARG_ENABLE(macosx-code-signing,
1942     AS_HELP_STRING([--enable-macosx-code-signing=<identity>],
1943         [Sign executables, dylibs, frameworks and the app bundle. If you
1944          don't provide an identity the first suitable certificate
1945          in your keychain is used.]),
1948 AC_ARG_ENABLE(macosx-package-signing,
1949     AS_HELP_STRING([--enable-macosx-package-signing=<identity>],
1950         [Create a .pkg suitable for uploading to the Mac App Store and sign
1951          it. If you don't provide an identity the first suitable certificate
1952          in your keychain is used.]),
1955 AC_ARG_ENABLE(macosx-sandbox,
1956     AS_HELP_STRING([--enable-macosx-sandbox],
1957         [Make the app bundle run in a sandbox. Requires code signing.
1958          Is required by apps distributed in the Mac App Store, and implies
1959          adherence to App Store rules.]),
1962 AC_ARG_WITH(macosx-bundle-identifier,
1963     AS_HELP_STRING([--with-macosx-bundle-identifier=tld.mumble.orifice.TheOffice],
1964         [Define the macOS bundle identifier. Default is the somewhat weird
1965          org.libreoffice.script ("script", huh?).]),
1966 ,with_macosx_bundle_identifier=org.libreoffice.script)
1968 AC_ARG_WITH(macosx-provisioning-profile,
1969     AS_HELP_STRING([--with-macosx-provisioning-profile=/path/to/mac.provisionprofile],
1970         [Specify the path to a provisioning profile to use]),
1973 AC_ARG_WITH(product-name,
1974     AS_HELP_STRING([--with-product-name='My Own Office Suite'],
1975         [Define the product name. Default is AC_PACKAGE_NAME.]),
1976 ,with_product_name=$PRODUCTNAME)
1978 libo_FUZZ_ARG_ENABLE(community-flavor,
1979     AS_HELP_STRING([--disable-community-flavor],
1980         [Disable the Community branding.]),
1983 AC_ARG_WITH(package-version,
1984     AS_HELP_STRING([--with-package-version='3.1.4.5'],
1985         [Define the package version. Default is AC_PACKAGE_VERSION. Use only if you distribute an own build for macOS.]),
1988 libo_FUZZ_ARG_ENABLE(readonly-installset,
1989     AS_HELP_STRING([--enable-readonly-installset],
1990         [Prevents any attempts by LibreOffice to write into its installation. That means
1991          at least that no "system-wide" extensions can be added. Partly experimental work in
1992          progress, probably not fully implemented. Always enabled for macOS.]),
1995 libo_FUZZ_ARG_ENABLE(mariadb-sdbc,
1996     AS_HELP_STRING([--disable-mariadb-sdbc],
1997         [Disable the build of the MariaDB/MySQL-SDBC driver.])
2000 libo_FUZZ_ARG_ENABLE(postgresql-sdbc,
2001     AS_HELP_STRING([--disable-postgresql-sdbc],
2002         [Disable the build of the PostgreSQL-SDBC driver.])
2005 libo_FUZZ_ARG_ENABLE(lotuswordpro,
2006     AS_HELP_STRING([--disable-lotuswordpro],
2007         [Disable the build of the Lotus Word Pro filter.]),
2008 ,test "${enable_lotuswordpro+set}" = set || enable_lotuswordpro=yes)
2010 libo_FUZZ_ARG_ENABLE(firebird-sdbc,
2011     AS_HELP_STRING([--disable-firebird-sdbc],
2012         [Disable the build of the Firebird-SDBC driver if it doesn't compile for you.]),
2013 ,test "${enable_firebird_sdbc+set}" = set || enable_firebird_sdbc=yes)
2015 AC_ARG_ENABLE(bogus-pkg-config,
2016     AS_HELP_STRING([--enable-bogus-pkg-config],
2017         [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.]),
2020 AC_ARG_ENABLE(openssl,
2021     AS_HELP_STRING([--disable-openssl],
2022         [Disable using libssl/libcrypto from OpenSSL. If disabled,
2023          components will use NSS. Work in progress,
2024          use only if you are hacking on it.]),
2025 ,enable_openssl=yes)
2027 libo_FUZZ_ARG_ENABLE(cipher-openssl-backend,
2028     AS_HELP_STRING([--enable-cipher-openssl-backend],
2029         [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality.
2030          Requires --enable-openssl.]))
2032 AC_ARG_ENABLE(nss,
2033     AS_HELP_STRING([--disable-nss],
2034         [Disable using NSS. If disabled,
2035          components will use openssl. Work in progress,
2036          use only if you are hacking on it.]),
2037 ,enable_nss=yes)
2039 AC_ARG_ENABLE(library-bin-tar,
2040     AS_HELP_STRING([--enable-library-bin-tar],
2041         [Enable the building and reused of tarball of binary build for some 'external' libraries.
2042         Some libraries can save their build result in a tarball
2043         stored in TARFILE_LOCATION. That binary tarball is
2044         uniquely identified by the source tarball,
2045         the content of the config_host.mk file and the content
2046         of the top-level directory in core for that library
2047         If this option is enabled, then if such a tarfile exist, it will be untarred
2048         instead of the source tarfile, and the build step will be skipped for that
2049         library.
2050         If a proper tarfile does not exist, then the normal source-based
2051         build is done for that library and a proper binary tarfile is created
2052         for the next time.]),
2055 AC_ARG_ENABLE(dconf,
2056     AS_HELP_STRING([--disable-dconf],
2057         [Disable the dconf configuration backend (enabled by default where
2058          available).]))
2060 libo_FUZZ_ARG_ENABLE(formula-logger,
2061     AS_HELP_STRING(
2062         [--enable-formula-logger],
2063         [Enable formula logger for logging formula calculation flow in Calc.]
2064     )
2067 AC_ARG_ENABLE(ldap,
2068     AS_HELP_STRING([--disable-ldap],
2069         [Disable LDAP support.]),
2070 ,enable_ldap=yes)
2072 AC_ARG_ENABLE(opencl,
2073     AS_HELP_STRING([--disable-opencl],
2074         [Disable OpenCL support.]),
2075 ,enable_opencl=yes)
2077 libo_FUZZ_ARG_ENABLE(librelogo,
2078     AS_HELP_STRING([--disable-librelogo],
2079         [Do not build LibreLogo.]),
2080 ,enable_librelogo=yes)
2082 AC_ARG_ENABLE(wasm-strip,
2083     AS_HELP_STRING([--enable-wasm-strip],
2084         [Strip the static build like for WASM/emscripten platform.]),
2087 AC_ARG_WITH(main-module,
2088     AS_HELP_STRING([--with-main-module=<writer/calc>],
2089         [Specify which main module to build for wasm.
2090         Default value is 'writer'.]),
2093 AC_ARG_ENABLE(wasm-exceptions,
2094     AS_HELP_STRING([--enable-wasm-exceptions],
2095         [Build with native WASM exceptions (AKA -fwasm-exceptions),
2096         matter of fact, this is currently not finished by any implementation)
2097         (see https://webassembly.org/roadmap/ for the current state]),
2100 AC_ARG_ENABLE(xmlhelp,
2101     AS_HELP_STRING([--disable-xmlhelp],
2102         [Disable XML help support]),
2103 ,enable_xmlhelp=yes)
2105 AC_ARG_ENABLE(customtarget-components,
2106     AS_HELP_STRING([--enable-customtarget-components],
2107         [Generates the static UNO object constructor mapping from the build.]))
2109 dnl ===================================================================
2110 dnl Optional Packages (--with/without-)
2111 dnl ===================================================================
2113 AC_ARG_WITH(gcc-home,
2114     AS_HELP_STRING([--with-gcc-home],
2115         [Specify the location of gcc/g++ manually. This can be used in conjunction
2116          with --enable-icecream when icecream gcc/g++ wrappers are installed in a
2117          non-default path.]),
2120 AC_ARG_WITH(gnu-patch,
2121     AS_HELP_STRING([--with-gnu-patch],
2122         [Specify location of GNU patch on Solaris or FreeBSD.]),
2125 AC_ARG_WITH(build-platform-configure-options,
2126     AS_HELP_STRING([--with-build-platform-configure-options],
2127         [Specify options for the configure script run for the *build* platform in a cross-compilation]),
2130 AC_ARG_WITH(gnu-cp,
2131     AS_HELP_STRING([--with-gnu-cp],
2132         [Specify location of GNU cp on Solaris or FreeBSD.]),
2135 AC_ARG_WITH(external-tar,
2136     AS_HELP_STRING([--with-external-tar=<TARFILE_PATH>],
2137         [Specify an absolute path of where to find (and store) tarfiles.]),
2138     TARFILE_LOCATION=$withval ,
2141 AC_ARG_WITH(referenced-git,
2142     AS_HELP_STRING([--with-referenced-git=<OTHER_CHECKOUT_DIR>],
2143         [Specify another checkout directory to reference. This makes use of
2144                  git submodule update --reference, and saves a lot of diskspace
2145                  when having multiple trees side-by-side.]),
2146     GIT_REFERENCE_SRC=$withval ,
2149 AC_ARG_WITH(linked-git,
2150     AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
2151         [Specify a directory where the repositories of submodules are located.
2152          This uses a method similar to git-new-workdir to get submodules.]),
2153     GIT_LINK_SRC=$withval ,
2156 AC_ARG_WITH(galleries,
2157     AS_HELP_STRING([--with-galleries],
2158         [Specify how galleries should be built. It is possible either to
2159          build these internally from source ("build"),
2160          or to disable them ("no")]),
2163 AC_ARG_WITH(templates,
2164     AS_HELP_STRING([--with-templates],
2165         [Specify we build with or without template files. It is possible either to
2166          build with templates ("yes"),
2167          or to disable them ("no")]),
2170 AC_ARG_WITH(theme,
2171     AS_HELP_STRING([--with-theme="theme1 theme2..."],
2172         [Choose which themes to include. By default those themes with an '*' are included.
2173          Possible choices: *breeze, *breeze_dark, *breeze_dark_svg, *breeze_svg,
2174          *colibre, *colibre_svg, *colibre_dark, *colibre_dark_svg,
2175          *elementary, *elementary_svg,
2176          *karasa_jaga, *karasa_jaga_svg,
2177          *sifr, *sifr_dark, *sifr_dark_svg, *sifr_svg,
2178          *sukapura, *sukapura_dark, *sukapura_dark_svg, *sukapura_svg.]),
2181 libo_FUZZ_ARG_WITH(helppack-integration,
2182     AS_HELP_STRING([--without-helppack-integration],
2183         [It will not integrate the helppacks to the installer
2184          of the product. Please use this switch to use the online help
2185          or separate help packages.]),
2188 libo_FUZZ_ARG_WITH(fonts,
2189     AS_HELP_STRING([--without-fonts],
2190         [LibreOffice includes some third-party fonts to provide a reliable basis for
2191          help content, templates, samples, etc. When these fonts are already
2192          known to be available on the system then you should use this option.]),
2195 AC_ARG_WITH(epm,
2196     AS_HELP_STRING([--with-epm],
2197         [Decides which epm to use. Default is to use the one from the system if
2198          one is built. When either this is not there or you say =internal epm
2199          will be built.]),
2202 AC_ARG_WITH(package-format,
2203     AS_HELP_STRING([--with-package-format],
2204         [Specify package format(s) for LibreOffice installation sets. The
2205          implicit --without-package-format leads to no installation sets being
2206          generated. Possible values: archive, bsd, deb, dmg,
2207          installed, msi, pkg, and rpm.
2208          Example: --with-package-format='deb rpm']),
2211 AC_ARG_WITH(tls,
2212     AS_HELP_STRING([--with-tls],
2213         [Decides which TLS/SSL and cryptographic implementations to use for
2214          LibreOffice's code. Default is to use NSS although OpenSSL is also
2215          possible. Notice that selecting NSS restricts the usage of OpenSSL
2216          in LO's code but selecting OpenSSL doesn't restrict by now the
2217          usage of NSS in LO's code. Possible values: openssl, nss.
2218          Example: --with-tls="nss"]),
2221 AC_ARG_WITH(system-libs,
2222     AS_HELP_STRING([--with-system-libs],
2223         [Use libraries already on system -- enables all --with-system-* flags.]),
2226 AC_ARG_WITH(system-bzip2,
2227     AS_HELP_STRING([--with-system-bzip2],
2228         [Use bzip2 already on system. Used when --enable-online-update-mar
2229         or --enable-python=internal]),,
2230     [with_system_bzip2="$with_system_libs"])
2232 AC_ARG_WITH(system-headers,
2233     AS_HELP_STRING([--with-system-headers],
2234         [Use headers already on system -- enables all --with-system-* flags for
2235          external packages whose headers are the only entities used i.e.
2236          boost/odbc/sane-header(s).]),,
2237     [with_system_headers="$with_system_libs"])
2239 AC_ARG_WITH(system-jars,
2240     AS_HELP_STRING([--without-system-jars],
2241         [When building with --with-system-libs, also the needed jars are expected
2242          on the system. Use this to disable that]),,
2243     [with_system_jars="$with_system_libs"])
2245 AC_ARG_WITH(system-cairo,
2246     AS_HELP_STRING([--with-system-cairo],
2247         [Use cairo libraries already on system.  Happens automatically for
2248          (implicit) --enable-gtk3.]))
2250 AC_ARG_WITH(system-epoxy,
2251     AS_HELP_STRING([--with-system-epoxy],
2252         [Use epoxy libraries already on system.  Happens automatically for
2253          (implicit) --enable-gtk3.]),,
2254        [with_system_epoxy="$with_system_libs"])
2256 AC_ARG_WITH(myspell-dicts,
2257     AS_HELP_STRING([--with-myspell-dicts],
2258         [Adds myspell dictionaries to the LibreOffice installation set]),
2261 AC_ARG_WITH(system-dicts,
2262     AS_HELP_STRING([--without-system-dicts],
2263         [Do not use dictionaries from system paths.]),
2266 AC_ARG_WITH(external-dict-dir,
2267     AS_HELP_STRING([--with-external-dict-dir],
2268         [Specify external dictionary dir.]),
2271 AC_ARG_WITH(external-hyph-dir,
2272     AS_HELP_STRING([--with-external-hyph-dir],
2273         [Specify external hyphenation pattern dir.]),
2276 AC_ARG_WITH(external-thes-dir,
2277     AS_HELP_STRING([--with-external-thes-dir],
2278         [Specify external thesaurus dir.]),
2281 AC_ARG_WITH(system-zlib,
2282     AS_HELP_STRING([--with-system-zlib],
2283         [Use zlib already on system.]),,
2284     [with_system_zlib=auto])
2286 AC_ARG_WITH(system-jpeg,
2287     AS_HELP_STRING([--with-system-jpeg],
2288         [Use jpeg already on system.]),,
2289     [with_system_jpeg="$with_system_libs"])
2291 AC_ARG_WITH(system-expat,
2292     AS_HELP_STRING([--with-system-expat],
2293         [Use expat already on system.]),,
2294     [with_system_expat="$with_system_libs"])
2296 AC_ARG_WITH(system-libxml,
2297     AS_HELP_STRING([--with-system-libxml],
2298         [Use libxml/libxslt already on system.]),,
2299     [with_system_libxml=auto])
2301 AC_ARG_WITH(system-openldap,
2302     AS_HELP_STRING([--with-system-openldap],
2303         [Use the OpenLDAP LDAP SDK already on system.]),,
2304     [with_system_openldap="$with_system_libs"])
2306 libo_FUZZ_ARG_ENABLE(poppler,
2307     AS_HELP_STRING([--disable-poppler],
2308         [Disable building Poppler.])
2311 AC_ARG_WITH(system-poppler,
2312     AS_HELP_STRING([--with-system-poppler],
2313         [Use system poppler (only needed for PDF import).]),,
2314     [with_system_poppler="$with_system_libs"])
2316 AC_ARG_WITH(system-abseil,
2317     AS_HELP_STRING([--with-system-abseil],
2318         [Use the abseil libraries already on system.]),,
2319     [with_system_abseil="$with_system_libs"])
2321 AC_ARG_WITH(system-openjpeg,
2322     AS_HELP_STRING([--with-system-openjpeg],
2323         [Use the OpenJPEG library already on system.]),,
2324     [with_system_openjpeg="$with_system_libs"])
2326 libo_FUZZ_ARG_ENABLE(gpgmepp,
2327     AS_HELP_STRING([--disable-gpgmepp],
2328         [Disable building gpgmepp. Do not use in normal cases unless you want to fix potential problems it causes.])
2331 AC_ARG_WITH(system-gpgmepp,
2332     AS_HELP_STRING([--with-system-gpgmepp],
2333         [Use gpgmepp already on system]),,
2334     [with_system_gpgmepp="$with_system_libs"])
2336 AC_ARG_WITH(system-mariadb,
2337     AS_HELP_STRING([--with-system-mariadb],
2338         [Use MariaDB/MySQL libraries already on system.]),,
2339     [with_system_mariadb="$with_system_libs"])
2341 AC_ARG_ENABLE(bundle-mariadb,
2342     AS_HELP_STRING([--enable-bundle-mariadb],
2343         [When using MariaDB/MySQL libraries already on system, bundle them with the MariaDB Connector/LibreOffice.])
2346 AC_ARG_WITH(system-postgresql,
2347     AS_HELP_STRING([--with-system-postgresql],
2348         [Use PostgreSQL libraries already on system, for building the PostgreSQL-SDBC
2349          driver. If pg_config is not in PATH, use PGCONFIG to point to it.]),,
2350     [with_system_postgresql="$with_system_libs"])
2352 AC_ARG_WITH(libpq-path,
2353     AS_HELP_STRING([--with-libpq-path=<absolute path to your libpq installation>],
2354         [Use this PostgreSQL C interface (libpq) installation for building
2355          the PostgreSQL-SDBC extension.]),
2358 AC_ARG_WITH(system-firebird,
2359     AS_HELP_STRING([--with-system-firebird],
2360         [Use Firebird libraries already on system, for building the Firebird-SDBC
2361          driver. If fb_config is not in PATH, use FBCONFIG to point to it.]),,
2362     [with_system_firebird="$with_system_libs"])
2364 AC_ARG_WITH(system-libtommath,
2365             AS_HELP_STRING([--with-system-libtommath],
2366                            [Use libtommath already on system]),,
2367             [with_system_libtommath="$with_system_libs"])
2369 AC_ARG_WITH(system-hsqldb,
2370     AS_HELP_STRING([--with-system-hsqldb],
2371         [Use hsqldb already on system.]))
2373 AC_ARG_WITH(hsqldb-jar,
2374     AS_HELP_STRING([--with-hsqldb-jar=JARFILE],
2375         [Specify path to jarfile manually.]),
2376     HSQLDB_JAR=$withval)
2378 libo_FUZZ_ARG_ENABLE(scripting-beanshell,
2379     AS_HELP_STRING([--disable-scripting-beanshell],
2380         [Disable support for scripts in BeanShell.]),
2384 AC_ARG_WITH(system-beanshell,
2385     AS_HELP_STRING([--with-system-beanshell],
2386         [Use beanshell already on system.]),,
2387     [with_system_beanshell="$with_system_jars"])
2389 AC_ARG_WITH(beanshell-jar,
2390     AS_HELP_STRING([--with-beanshell-jar=JARFILE],
2391         [Specify path to jarfile manually.]),
2392     BSH_JAR=$withval)
2394 libo_FUZZ_ARG_ENABLE(scripting-javascript,
2395     AS_HELP_STRING([--disable-scripting-javascript],
2396         [Disable support for scripts in JavaScript.]),
2400 AC_ARG_WITH(system-rhino,
2401     AS_HELP_STRING([--with-system-rhino],
2402         [Use rhino already on system.]),,
2403     [with_system_rhino="$with_system_jars"])
2405 AC_ARG_WITH(rhino-jar,
2406     AS_HELP_STRING([--with-rhino-jar=JARFILE],
2407         [Specify path to jarfile manually.]),
2408     RHINO_JAR=$withval)
2410 AC_ARG_WITH(system-jfreereport,
2411     AS_HELP_STRING([--with-system-jfreereport],
2412         [Use JFreeReport already on system.]),,
2413     [with_system_jfreereport="$with_system_jars"])
2415 AC_ARG_WITH(sac-jar,
2416     AS_HELP_STRING([--with-sac-jar=JARFILE],
2417         [Specify path to jarfile manually.]),
2418     SAC_JAR=$withval)
2420 AC_ARG_WITH(libxml-jar,
2421     AS_HELP_STRING([--with-libxml-jar=JARFILE],
2422         [Specify path to jarfile manually.]),
2423     LIBXML_JAR=$withval)
2425 AC_ARG_WITH(flute-jar,
2426     AS_HELP_STRING([--with-flute-jar=JARFILE],
2427         [Specify path to jarfile manually.]),
2428     FLUTE_JAR=$withval)
2430 AC_ARG_WITH(jfreereport-jar,
2431     AS_HELP_STRING([--with-jfreereport-jar=JARFILE],
2432         [Specify path to jarfile manually.]),
2433     JFREEREPORT_JAR=$withval)
2435 AC_ARG_WITH(liblayout-jar,
2436     AS_HELP_STRING([--with-liblayout-jar=JARFILE],
2437         [Specify path to jarfile manually.]),
2438     LIBLAYOUT_JAR=$withval)
2440 AC_ARG_WITH(libloader-jar,
2441     AS_HELP_STRING([--with-libloader-jar=JARFILE],
2442         [Specify path to jarfile manually.]),
2443     LIBLOADER_JAR=$withval)
2445 AC_ARG_WITH(libformula-jar,
2446     AS_HELP_STRING([--with-libformula-jar=JARFILE],
2447         [Specify path to jarfile manually.]),
2448     LIBFORMULA_JAR=$withval)
2450 AC_ARG_WITH(librepository-jar,
2451     AS_HELP_STRING([--with-librepository-jar=JARFILE],
2452         [Specify path to jarfile manually.]),
2453     LIBREPOSITORY_JAR=$withval)
2455 AC_ARG_WITH(libfonts-jar,
2456     AS_HELP_STRING([--with-libfonts-jar=JARFILE],
2457         [Specify path to jarfile manually.]),
2458     LIBFONTS_JAR=$withval)
2460 AC_ARG_WITH(libserializer-jar,
2461     AS_HELP_STRING([--with-libserializer-jar=JARFILE],
2462         [Specify path to jarfile manually.]),
2463     LIBSERIALIZER_JAR=$withval)
2465 AC_ARG_WITH(libbase-jar,
2466     AS_HELP_STRING([--with-libbase-jar=JARFILE],
2467         [Specify path to jarfile manually.]),
2468     LIBBASE_JAR=$withval)
2470 AC_ARG_WITH(system-odbc,
2471     AS_HELP_STRING([--with-system-odbc],
2472         [Use the odbc headers already on system.]),,
2473     [with_system_odbc="auto"])
2475 AC_ARG_WITH(system-sane,
2476     AS_HELP_STRING([--with-system-sane],
2477         [Use sane.h already on system.]),,
2478     [with_system_sane="$with_system_headers"])
2480 AC_ARG_WITH(system-bluez,
2481     AS_HELP_STRING([--with-system-bluez],
2482         [Use bluetooth.h already on system.]),,
2483     [with_system_bluez="$with_system_headers"])
2485 AC_ARG_WITH(system-boost,
2486     AS_HELP_STRING([--with-system-boost],
2487         [Use boost already on system.]),,
2488     [with_system_boost="$with_system_headers"])
2490 AC_ARG_WITH(system-dragonbox,
2491     AS_HELP_STRING([--with-system-dragonbox],
2492         [Use dragonbox already on system.]),,
2493     [with_system_dragonbox="$with_system_headers"])
2495 AC_ARG_WITH(system-frozen,
2496     AS_HELP_STRING([--with-system-frozen],
2497         [Use frozen already on system.]),,
2498     [with_system_frozen="$with_system_headers"])
2500 AC_ARG_WITH(system-libfixmath,
2501     AS_HELP_STRING([--with-system-libfixmath],
2502         [Use libfixmath already on system.]),,
2503     [with_system_libfixmath="$with_system_libs"])
2505 AC_ARG_WITH(system-glm,
2506     AS_HELP_STRING([--with-system-glm],
2507         [Use glm already on system.]),,
2508     [with_system_glm="$with_system_headers"])
2510 AC_ARG_WITH(system-hunspell,
2511     AS_HELP_STRING([--with-system-hunspell],
2512         [Use libhunspell already on system.]),,
2513     [with_system_hunspell="$with_system_libs"])
2515 libo_FUZZ_ARG_ENABLE(cairo-rgba,
2516     AS_HELP_STRING([--enable-cairo-rgba],
2517         [Use RGBA order, instead of default BRGA. Not possible with --with-system-cairo]))
2519 libo_FUZZ_ARG_ENABLE(zxing,
2520     AS_HELP_STRING([--disable-zxing],
2521        [Disable use of zxing external library.]))
2523 AC_ARG_WITH(system-zxing,
2524     AS_HELP_STRING([--with-system-zxing],
2525         [Use libzxing already on system.]),,
2526     [with_system_zxing="$with_system_libs"])
2528 AC_ARG_WITH(system-zxcvbn,
2529     AS_HELP_STRING([--with-system-zxcvbn],
2530         [Use libzxcvbn already on system.]),,
2531     [with_system_zxcvbn="$with_system_libs"])
2533 AC_ARG_WITH(system-box2d,
2534     AS_HELP_STRING([--with-system-box2d],
2535         [Use box2d already on system.]),,
2536     [with_system_box2d="$with_system_libs"])
2538 AC_ARG_WITH(system-mythes,
2539     AS_HELP_STRING([--with-system-mythes],
2540         [Use mythes already on system.]),,
2541     [with_system_mythes="$with_system_libs"])
2543 AC_ARG_WITH(system-altlinuxhyph,
2544     AS_HELP_STRING([--with-system-altlinuxhyph],
2545         [Use ALTLinuxhyph already on system.]),,
2546     [with_system_altlinuxhyph="$with_system_libs"])
2548 AC_ARG_WITH(system-lpsolve,
2549     AS_HELP_STRING([--with-system-lpsolve],
2550         [Use lpsolve already on system.]),,
2551     [with_system_lpsolve="$with_system_libs"])
2553 AC_ARG_WITH(system-coinmp,
2554     AS_HELP_STRING([--with-system-coinmp],
2555         [Use CoinMP already on system.]),,
2556     [with_system_coinmp="$with_system_libs"])
2558 AC_ARG_WITH(system-liblangtag,
2559     AS_HELP_STRING([--with-system-liblangtag],
2560         [Use liblangtag library already on system.]),,
2561     [with_system_liblangtag="$with_system_libs"])
2563 AC_ARG_WITH(system-lockfile,
2564     AS_HELP_STRING([--with-system-lockfile[=file]],
2565         [Detect a system lockfile program or use the \$file argument.]))
2567 AC_ARG_WITH(webdav,
2568     AS_HELP_STRING([--without-webdav],
2569         [Disable WebDAV support in the UCB.]))
2571 AC_ARG_WITH(linker-hash-style,
2572     AS_HELP_STRING([--with-linker-hash-style],
2573         [Use linker with --hash-style=<style> when linking shared objects.
2574          Possible values: "sysv", "gnu", "both". The default value is "gnu"
2575          if supported on the build system, and "sysv" otherwise.]))
2577 AC_ARG_WITH(jdk-home,
2578     AS_HELP_STRING([--with-jdk-home=<absolute path to JDK home>],
2579         [If you have installed JDK 8 or later on your system please supply the
2580          path here. Note that this is not the location of the java command but the
2581          location of the entire distribution. In case of cross-compiling, this
2582          is the JDK of the host os. Use --with-build-platform-configure-options
2583          to point to a different build platform JDK.]),
2586 AC_ARG_WITH(help,
2587     AS_HELP_STRING([--with-help],
2588         [Enable the build of help. There is a special parameter "common" that
2589          can be used to bundle only the common part, .e.g help-specific icons.
2590          This is useful when you build the helpcontent separately.])
2591     [
2592                           Usage:     --with-help    build the old local help
2593                                  --without-help     no local help (default)
2594                                  --with-help=html   build the new HTML local help
2595                                  --with-help=online build the new HTML online help
2596     ],
2599 AC_ARG_WITH(omindex,
2600    AS_HELP_STRING([--with-omindex],
2601         [Enable the support of xapian-omega index for online help.])
2602    [
2603                          Usage: --with-omindex=server prepare the pages for omindex
2604                                 but let xapian-omega be built in server.
2605                                 --with-omindex=noxap do not prepare online pages
2606                                 for xapian-omega
2607   ],
2610 libo_FUZZ_ARG_WITH(java,
2611     AS_HELP_STRING([--with-java=<java command>],
2612         [Specify the name of the Java interpreter command. Typically "java"
2613          which is the default.
2615          To build without support for Java components, applets, accessibility
2616          or the XML filters written in Java, use --without-java or --with-java=no.]),
2617     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ],
2618     [ test -z "$with_java" -o "$with_java" = "yes" && with_java=java ]
2621 AC_ARG_WITH(jvm-path,
2622     AS_HELP_STRING([--with-jvm-path=<absolute path to parent of jvm home>],
2623         [Use a specific JVM search path at runtime.
2624          e.g. use --with-jvm-path=/usr/lib/ to find JRE/JDK in /usr/lib/jvm/]),
2627 AC_ARG_WITH(ant-home,
2628     AS_HELP_STRING([--with-ant-home=<absolute path to Ant home>],
2629         [If you have installed Apache Ant on your system, please supply the path here.
2630          Note that this is not the location of the Ant binary but the location
2631          of the entire distribution.]),
2634 AC_ARG_WITH(symbol-config,
2635     AS_HELP_STRING([--with-symbol-config],
2636         [Configuration for the crashreport symbol upload]),
2637         [],
2638         [with_symbol_config=no])
2640 AC_ARG_WITH(export-validation,
2641     AS_HELP_STRING([--without-export-validation],
2642         [Disable validating OOXML and ODF files as exported from in-tree tests.]),
2643 ,with_export_validation=auto)
2645 AC_ARG_WITH(bffvalidator,
2646     AS_HELP_STRING([--with-bffvalidator=<absolute path to BFFValidator>],
2647         [Enables export validation for Microsoft Binary formats (doc, xls, ppt).
2648          Requires installed Microsoft Office Binary File Format Validator.
2649          Note: export-validation (--with-export-validation) is required to be turned on.
2650          See https://web.archive.org/web/20200804155745/https://www.microsoft.com/en-us/download/details.aspx?id=26794]),
2651 ,with_bffvalidator=no)
2653 libo_FUZZ_ARG_WITH(junit,
2654     AS_HELP_STRING([--with-junit=<absolute path to JUnit 4 jar>],
2655         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
2656          --without-junit disables those tests. Not relevant in the --without-java case.]),
2657 ,with_junit=yes)
2659 AC_ARG_WITH(hamcrest,
2660     AS_HELP_STRING([--with-hamcrest=<absolute path to hamcrest jar>],
2661         [Specifies the hamcrest jar file to use for JUnit-based tests.
2662          --without-junit disables those tests. Not relevant in the --without-java case.]),
2663 ,with_hamcrest=yes)
2665 AC_ARG_WITH(perl-home,
2666     AS_HELP_STRING([--with-perl-home=<abs. path to Perl 5 home>],
2667         [If you have installed Perl 5 Distribution, on your system, please
2668          supply the path here. Note that this is not the location of the Perl
2669          binary but the location of the entire distribution.]),
2672 libo_FUZZ_ARG_WITH(doxygen,
2673     AS_HELP_STRING(
2674         [--with-doxygen=<absolute path to doxygen executable>],
2675         [Specifies the doxygen executable to use when generating ODK C/C++
2676          documentation. --without-doxygen disables generation of ODK C/C++
2677          documentation. Not relevant in the --disable-odk case.]),
2678 ,with_doxygen=yes)
2680 AC_ARG_WITH(visual-studio,
2681     AS_HELP_STRING([--with-visual-studio=<2019/2022/2022preview>],
2682         [Specify which Visual Studio version to use in case several are
2683          installed. Currently 2019 (default) and 2022 are supported.]),
2686 AC_ARG_WITH(windows-sdk,
2687     AS_HELP_STRING([--with-windows-sdk=<8.0(A)/8.1(A)/10.0>],
2688         [Specify which Windows SDK, or "Windows Kit", version to use
2689          in case the one that came with the selected Visual Studio
2690          is not what you want for some reason. Note that not all compiler/SDK
2691          combinations are supported. The intent is that this option should not
2692          be needed.]),
2695 AC_ARG_WITH(lang,
2696     AS_HELP_STRING([--with-lang="es sw tu cs sk"],
2697         [Use this option to build LibreOffice with additional UI language support.
2698          English (US) is always included by default.
2699          Separate multiple languages with space.
2700          For all languages, use --with-lang=ALL.]),
2703 AC_ARG_WITH(locales,
2704     AS_HELP_STRING([--with-locales="en es pt fr zh kr ja"],
2705         [Use this option to limit the locale information built in.
2706          Separate multiple locales with space.
2707          Very experimental and might well break stuff.
2708          Just a desperate measure to shrink code and data size.
2709          By default all the locales available is included.
2710          Just works with --disable-dynloading. Defaults to "ALL".
2711          This option is completely unrelated to --with-lang.])
2712     [
2713                           Affects also our character encoding conversion
2714                           tables for encodings mainly targeted for a
2715                           particular locale, like EUC-CN and EUC-TW for
2716                           zh, ISO-2022-JP for ja.
2718                           Affects also our add-on break iterator data for
2719                           some languages.
2721                           For the default, all locales, don't use this switch at all.
2722                           Specifying just the language part of a locale means all matching
2723                           locales will be included.
2724     ],
2727 # Kerberos and GSSAPI used only by PostgreSQL as of LibO 3.5
2728 # and also by Mariadb/Mysql since LibO 24.8
2729 libo_FUZZ_ARG_WITH(krb5,
2730     AS_HELP_STRING([--with-krb5],
2731         [Enable MIT Kerberos 5 support in modules that support it.
2732          By default automatically enabled on platforms
2733          where a good system Kerberos 5 is available.]),
2736 libo_FUZZ_ARG_WITH(gssapi,
2737     AS_HELP_STRING([--with-gssapi],
2738         [Enable GSSAPI support in modules that support it.
2739          By default automatically enabled on platforms
2740          where a good system GSSAPI is available.]),
2743 libo_FUZZ_ARG_WITH(lxml,
2744     AS_HELP_STRING([--without-lxml],
2745         [gla11y will use python lxml when available, potentially building a local copy if necessary.
2746          --without-lxml tells it to not use python lxml at all, which means that gla11y will only
2747          report widget classes and ids.]),
2750 libo_FUZZ_ARG_WITH(latest-c++,
2751     AS_HELP_STRING([--with-latest-c++],
2752         [Try to enable the latest features of the C++ compiler, even if they are not yet part of a
2753          published standard.  This option is ignored when CXXFLAGS_CXX11 is set explicitly.]),,
2754         [with_latest_c__=no])
2756 AC_ARG_WITH(gtk3-build,
2757     AS_HELP_STRING([--with-gtk3-build=<absolute path to GTK3 build>],
2758         [(Windows-only) In order to build GtkTiledViewer on Windows, pass the path
2759          to a GTK3 build, like '--with-gtk3-build=C:/gtk-build/gtk/x64/release'.]))
2761 dnl ===================================================================
2762 dnl Branding
2763 dnl ===================================================================
2765 AC_ARG_WITH(branding,
2766     AS_HELP_STRING([--with-branding=/path/to/images],
2767         [Use given path to retrieve branding images set.])
2768     [
2769                           Search for intro.png about.svg and logo.svg.
2770                           If any is missing, default ones will be used instead.
2772                           Search also progress.conf for progress
2773                           settings on intro screen :
2775                           PROGRESSBARCOLOR="255,255,255" Set color of
2776                           progress bar. Comma separated RGB decimal values.
2777                           PROGRESSSIZE="407,6" Set size of progress bar.
2778                           Comma separated decimal values (width, height).
2779                           PROGRESSPOSITION="61,317" Set position of progress
2780                           bar from left,top. Comma separated decimal values.
2781                           PROGRESSFRAMECOLOR="20,136,3" Set color of progress
2782                           bar frame. Comma separated RGB decimal values.
2783                           PROGRESSTEXTCOLOR="0,0,0" Set color of progress
2784                           bar text. Comma separated RGB decimal values.
2785                           PROGRESSTEXTBASELINE="287" Set vertical position of
2786                           progress bar text from top. Decimal value.
2788                           Default values will be used if not found.
2789     ],
2793 AC_ARG_WITH(extra-buildid,
2794     AS_HELP_STRING([--with-extra-buildid="Tinderbox: Win-x86@6, Branch:master, Date:2012-11-26_00.29.34"],
2795         [Show addition build identification in about dialog.]),
2799 AC_ARG_WITH(vendor,
2800     AS_HELP_STRING([--with-vendor="John the Builder"],
2801         [Set vendor of the build.]),
2804 AC_ARG_WITH(privacy-policy-url,
2805     AS_HELP_STRING([--with-privacy-policy-url="https://yourdomain/privacy-policy"],
2806         [The URL to your privacy policy (needed when
2807          enabling online-update or crashreporting via breakpad)]),
2808         [if test "x$with_privacy_policy_url" = "xyes"; then
2809             AC_MSG_FAILURE([you need to specify an argument when using --with-privacy-policy-url])
2810          elif test "x$with_privacy_policy_url" = "xno"; then
2811             with_privacy_policy_url="undefined"
2812          fi]
2813 ,[with_privacy_policy_url="undefined"])
2815 AC_ARG_WITH(android-package-name,
2816     AS_HELP_STRING([--with-android-package-name="org.libreoffice"],
2817         [Set Android package name of the build.]),
2820 AC_ARG_WITH(compat-oowrappers,
2821     AS_HELP_STRING([--with-compat-oowrappers],
2822         [Install oo* wrappers in parallel with
2823          lo* ones to keep backward compatibility.
2824          Has effect only with make distro-pack-install]),
2827 AC_ARG_WITH(os-version,
2828     AS_HELP_STRING([--with-os-version=<OSVERSION>],
2829         [For FreeBSD users, use this option to override the detected OSVERSION.]),
2832 AC_ARG_WITH(parallelism,
2833     AS_HELP_STRING([--with-parallelism],
2834         [Number of jobs to run simultaneously during build. Parallel builds can
2835         save a lot of time on multi-cpu machines. Defaults to the number of
2836         CPUs on the machine, unless you configure --enable-icecream - then to
2837         40.]),
2840 AC_ARG_WITH(all-tarballs,
2841     AS_HELP_STRING([--with-all-tarballs],
2842         [Download all external tarballs unconditionally]))
2844 AC_ARG_WITH(gdrive-client-id,
2845     AS_HELP_STRING([--with-gdrive-client-id],
2846         [Provides the client id of the application for OAuth2 authentication
2847         on Google Drive. If either this or --with-gdrive-client-secret is
2848         empty, the feature will be disabled]),
2851 AC_ARG_WITH(gdrive-client-secret,
2852     AS_HELP_STRING([--with-gdrive-client-secret],
2853         [Provides the client secret of the application for OAuth2
2854         authentication on Google Drive. If either this or
2855         --with-gdrive-client-id is empty, the feature will be disabled]),
2858 AC_ARG_WITH(alfresco-cloud-client-id,
2859     AS_HELP_STRING([--with-alfresco-cloud-client-id],
2860         [Provides the client id of the application for OAuth2 authentication
2861         on Alfresco Cloud. If either this or --with-alfresco-cloud-client-secret is
2862         empty, the feature will be disabled]),
2865 AC_ARG_WITH(alfresco-cloud-client-secret,
2866     AS_HELP_STRING([--with-alfresco-cloud-client-secret],
2867         [Provides the client secret of the application for OAuth2
2868         authentication on Alfresco Cloud. If either this or
2869         --with-alfresco-cloud-client-id is empty, the feature will be disabled]),
2872 AC_ARG_WITH(onedrive-client-id,
2873     AS_HELP_STRING([--with-onedrive-client-id],
2874         [Provides the client id of the application for OAuth2 authentication
2875         on OneDrive. If either this or --with-onedrive-client-secret is
2876         empty, the feature will be disabled]),
2879 AC_ARG_WITH(onedrive-client-secret,
2880     AS_HELP_STRING([--with-onedrive-client-secret],
2881         [Provides the client secret of the application for OAuth2
2882         authentication on OneDrive. If either this or
2883         --with-onedrive-client-id is empty, the feature will be disabled]),
2886 dnl Check for coredumpctl support to present information about crashing test processes:
2887 AC_ARG_WITH(coredumpctl,
2888     AS_HELP_STRING([--with-coredumpctl],
2889         [Use coredumpctl (together with systemd-run) to retrieve core dumps of crashing test
2890         processes.]))
2892 AC_ARG_WITH(buildconfig-recorded,
2893     AS_HELP_STRING([--with-buildconfig-recorded],
2894         [Put build config into version info reported by LOK. Incompatible with reproducible builds.]),
2897 AC_MSG_CHECKING([whether to record build config])
2898 if test -z "$with_buildconfig_recorded"; then
2899     with_buildconfig_recorded=no
2901 if test "$with_buildconfig_recorded" = no; then
2902     AC_MSG_RESULT([no])
2903 else
2904     AC_MSG_RESULT([yes])
2905     # replace backslashes, to get a valid c++ string
2906     config_args=$(echo $ac_configure_args | tr '\\' '/')
2907     AC_DEFINE_UNQUOTED([BUILDCONFIG],[["$config_args"]],[Options passed to configure script])
2908     AC_DEFINE([BUILDCONFIG_RECORDED],[1],[Options passed to configure script])
2911 dnl ===================================================================
2912 dnl Do we want to use pre-build binary tarball for recompile
2913 dnl ===================================================================
2915 if test "$enable_library_bin_tar" = "yes" ; then
2916     USE_LIBRARY_BIN_TAR=TRUE
2917 else
2918     USE_LIBRARY_BIN_TAR=
2920 AC_SUBST(USE_LIBRARY_BIN_TAR)
2922 dnl ===================================================================
2923 dnl Test whether build target is Release Build
2924 dnl ===================================================================
2925 AC_MSG_CHECKING([whether build target is Release Build])
2926 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
2927     AC_MSG_RESULT([no])
2928     ENABLE_RELEASE_BUILD=
2929     dnl Pu the value on one line as make (at least on macOS) seems to ignore
2930     dnl the newlines and then complains about spaces.
2931     GET_TASK_ALLOW_ENTITLEMENT='<!-- We want to be able to debug a hardened process when not building for release --><key>com.apple.security.get-task-allow</key><true/>'
2932 else
2933     AC_MSG_RESULT([yes])
2934     ENABLE_RELEASE_BUILD=TRUE
2935     GET_TASK_ALLOW_ENTITLEMENT=
2937 AC_SUBST(ENABLE_RELEASE_BUILD)
2938 AC_SUBST(GET_TASK_ALLOW_ENTITLEMENT)
2940 dnl ===================================================================
2941 dnl Test whether build should auto use hardening compiler flags
2942 dnl ===================================================================
2943 AC_MSG_CHECKING([whether build should auto use hardening compiler flags])
2944 if test "$enable_hardening_flags" = "" -o "$enable_hardening_flags" = "no"; then
2945     AC_MSG_RESULT([no])
2946     ENABLE_HARDENING_FLAGS=
2947 else
2948     AC_MSG_RESULT([yes])
2949     ENABLE_HARDENING_FLAGS=TRUE
2951 AC_SUBST(ENABLE_HARDENING_FLAGS)
2953 AC_MSG_CHECKING([whether to build a Community flavor])
2954 if test -z "$enable_community_flavor" -o "$enable_community_flavor" = "yes"; then
2955     AC_DEFINE(HAVE_FEATURE_COMMUNITY_FLAVOR)
2956     AC_MSG_RESULT([yes])
2957 else
2958     AC_MSG_RESULT([no])
2961 dnl ===================================================================
2962 dnl Test whether to sign Windows Build
2963 dnl ===================================================================
2964 AC_MSG_CHECKING([whether to sign windows build])
2965 if test "$enable_windows_build_signing" = "yes" -a "$_os" = "WINNT"; then
2966     AC_MSG_RESULT([yes])
2967     WINDOWS_BUILD_SIGNING="TRUE"
2968 else
2969     AC_MSG_RESULT([no])
2970     WINDOWS_BUILD_SIGNING="FALSE"
2972 AC_SUBST(WINDOWS_BUILD_SIGNING)
2974 dnl ===================================================================
2975 dnl MacOSX build and runtime environment options
2976 dnl ===================================================================
2978 AC_ARG_WITH(macosx-version-min-required,
2979     AS_HELP_STRING([--with-macosx-version-min-required=<version>],
2980         [set the minimum OS version needed to run the built LibreOffice])
2981     [
2982                           e. g.: --with-macosx-version-min-required=10.15
2983     ],
2986 dnl ===================================================================
2987 dnl Check for incompatible options set by fuzzing, and reset those
2988 dnl automatically to working combinations
2989 dnl ===================================================================
2991 if test "$libo_fuzzed_enable_dbus" = yes -a "$libo_fuzzed_enable_avahi" -a \
2992         "$enable_dbus" != "$enable_avahi"; then
2993     AC_MSG_NOTICE([Resetting --enable-avahi=$enable_dbus])
2994     enable_avahi=$enable_dbus
2997 add_lopath_after ()
2999     if ! echo "$LO_PATH" | $EGREP -q "(^|${P_SEP})$1($|${P_SEP})"; then
3000         LO_PATH="${LO_PATH:+$LO_PATH$P_SEP}$1"
3001     fi
3004 add_lopath_before ()
3006     local IFS=${P_SEP}
3007     local path_cleanup
3008     local dir
3009     for dir in $LO_PATH ; do
3010         if test "$dir" != "$1" ; then
3011             path_cleanup=${path_cleanup:+$path_cleanup$P_SEP}$dir
3012         fi
3013     done
3014     LO_PATH="$1${path_cleanup:+$P_SEP$path_cleanup}"
3017 dnl ===================================================================
3018 dnl check for required programs (grep, awk, sed, bash)
3019 dnl ===================================================================
3021 pathmunge ()
3023     local new_path
3024     if test -n "$1"; then
3025         if test "$build_os" = "cygwin"; then
3026             if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3027                 PathFormat "$1"
3028                 new_path=`cygpath -sm "$formatted_path"`
3029             else
3030                 PathFormat "$1"
3031                 new_path=`cygpath -u "$formatted_path"`
3032             fi
3033         else
3034             new_path="$1"
3035         fi
3036         if test "$2" = "after"; then
3037             add_lopath_after "$new_path"
3038         else
3039             add_lopath_before "$new_path"
3040         fi
3041     fi
3044 AC_PROG_AWK
3045 AC_PATH_PROG( AWK, $AWK)
3046 if test -z "$AWK"; then
3047     AC_MSG_ERROR([install awk to run this script])
3050 AC_PATH_PROG(BASH, bash)
3051 if test -z "$BASH"; then
3052     AC_MSG_ERROR([bash not found in \$PATH])
3054 AC_SUBST(BASH)
3056 # prefer parallel compression tools, if available
3057 AC_PATH_PROG(COMPRESSIONTOOL, pigz)
3058 if test -z "$COMPRESSIONTOOL"; then
3059     AC_PATH_PROG(COMPRESSIONTOOL, gzip)
3060     if test -z "$COMPRESSIONTOOL"; then
3061         AC_MSG_ERROR([gzip not found in \$PATH])
3062     fi
3064 AC_SUBST(COMPRESSIONTOOL)
3066 AC_MSG_CHECKING([for GNU or BSD tar])
3067 for a in $GNUTAR gtar gnutar tar bsdtar /usr/sfw/bin/gtar; do
3068     $a --version 2> /dev/null | grep -E "GNU|bsdtar"  2>&1 > /dev/null
3069     if test $? -eq 0;  then
3070         GNUTAR=$a
3071         break
3072     fi
3073 done
3074 AC_MSG_RESULT($GNUTAR)
3075 if test -z "$GNUTAR"; then
3076     AC_MSG_ERROR([not found. install GNU or BSD tar.])
3078 AC_SUBST(GNUTAR)
3080 AC_MSG_CHECKING([for tar's option to strip components])
3081 $GNUTAR --help 2> /dev/null | grep -E "bsdtar|strip-components" 2>&1 >/dev/null
3082 if test $? -eq 0; then
3083     STRIP_COMPONENTS="--strip-components"
3084 else
3085     $GNUTAR --help 2> /dev/null | grep -E "strip-path" 2>&1 >/dev/null
3086     if test $? -eq 0; then
3087         STRIP_COMPONENTS="--strip-path"
3088     else
3089         STRIP_COMPONENTS="unsupported"
3090     fi
3092 AC_MSG_RESULT($STRIP_COMPONENTS)
3093 if test x$STRIP_COMPONENTS = xunsupported; then
3094     AC_MSG_ERROR([you need a tar that is able to strip components.])
3096 AC_SUBST(STRIP_COMPONENTS)
3098 dnl It is useful to have a BUILD_TYPE keyword to distinguish "normal"
3099 dnl desktop OSes from "mobile" ones.
3101 dnl We assume that a non-DESKTOP build type is also a non-NATIVE one.
3102 dnl In other words, that when building for an OS that is not a
3103 dnl "desktop" one but a "mobile" one, we are always cross-compiling.
3105 dnl Note the direction of the implication; there is no assumption that
3106 dnl cross-compiling would imply a non-desktop OS.
3108 if test $_os != iOS -a $_os != Android -a "$enable_fuzzers" != "yes"; then
3109     BUILD_TYPE="$BUILD_TYPE DESKTOP"
3110     AC_DEFINE(HAVE_FEATURE_DESKTOP)
3111     if test "$_os" != Emscripten; then
3112         AC_DEFINE(HAVE_FEATURE_MULTIUSER_ENVIRONMENT)
3113     fi
3116 # explicitly doesn't include enable_gtk3=no and enable_qt5=yes, so it should
3117 # also work with the default gtk3 plugin.
3118 if test "$enable_wasm_strip" = "yes"; then
3119     enable_avmedia=no
3120     enable_libcmis=no
3121     enable_coinmp=no
3122     enable_cups=no
3123     test "$_os" = Emscripten && enable_curl=no
3124     enable_database_connectivity=no
3125     enable_dbus=no
3126     enable_dconf=no
3127     test "${enable_dynamic_loading+set}" = set -o "$_os" != Emscripten || enable_dynamic_loading=no
3128     enable_extension_integration=no
3129     enable_extensions=no
3130     enable_extension_update=no
3131     enable_gio=no
3132     enable_gpgmepp=no
3133     enable_ldap=no
3134     enable_lotuswordpro=no
3135     enable_lpsolve=no
3136     enable_nss=no
3137     enable_odk=no
3138     enable_online_update=no
3139     enable_opencl=no
3140     enable_pdfimport=no
3141     enable_randr=no
3142     enable_report_builder=no
3143     enable_scripting=no
3144     enable_sdremote_bluetooth=no
3145     enable_skia=no
3146     enable_xmlhelp=no
3147     enable_zxing=no
3148     test_libepubgen=no
3149     test_libcdr=no
3150     test_libcmis=no
3151     test_libetonyek=no
3152     test_libfreehand=no
3153     test_libmspub=no
3154     test_libpagemaker=no
3155     test_libqxp=no
3156     test_libvisio=no
3157     test_libzmf=no
3158     test_webdav=no
3159     with_galleries=no
3160     with_templates=no
3161     with_webdav=no
3162     with_x=no
3164     test "${with_fonts+set}" = set || with_fonts=yes
3165     test "${with_locales+set}" = set || with_locales=en
3167     AC_DEFINE(ENABLE_WASM_STRIP_ACCESSIBILITY)
3168     AC_DEFINE(ENABLE_WASM_STRIP_WRITER)
3169     AC_DEFINE(ENABLE_WASM_STRIP_CALC)
3170     AC_DEFINE(ENABLE_WASM_STRIP_CANVAS)
3171 #    AC_DEFINE(ENABLE_WASM_STRIP_CHART)
3172     AC_DEFINE(ENABLE_WASM_STRIP_DBACCESS)
3173     AC_DEFINE(ENABLE_WASM_STRIP_EPUB)
3174     AC_DEFINE(ENABLE_WASM_STRIP_EXTRA)
3175     AC_DEFINE(ENABLE_WASM_STRIP_GUESSLANG)
3176 #    AC_DEFINE(ENABLE_WASM_STRIP_HUNSPELL)
3177     AC_DEFINE(ENABLE_WASM_STRIP_LANGUAGETOOL)
3178     AC_DEFINE(ENABLE_WASM_STRIP_PINGUSER)
3179     AC_DEFINE(ENABLE_WASM_STRIP_PREMULTIPLY)
3180     AC_DEFINE(ENABLE_WASM_STRIP_RECENT)
3181     AC_DEFINE(ENABLE_WASM_STRIP_RECOVERYUI)
3182     AC_DEFINE(ENABLE_WASM_STRIP_SPLASH)
3183     AC_DEFINE(ENABLE_WASM_STRIP_SWEXPORTS)
3184     AC_DEFINE(ENABLE_WASM_STRIP_SCEXPORTS)
3187 EMSCRIPTEN_NEH_MAJOR=3
3188 EMSCRIPTEN_NEH_MINOR=1
3189 EMSCRIPTEN_NEH_TINY=3
3190 EMSCRIPTEN_NEH_VERSION="${EMSCRIPTEN_NEH_MAJOR}.${EMSCRIPTEN_NEH_MINOR}.${EMSCRIPTEN_NEH_TINY}"
3192 if test "$enable_wasm_exceptions" = yes; then
3193     AC_MSG_CHECKING([if Emscripten version is at least $EMSCRIPTEN_NEH_VERSION for SjLj + native EH])
3194     check_semantic_version_three_prefixed EMSCRIPTEN NEH
3195     if test $? -ne 0; then
3196         AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
3197     else
3198         AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
3199     fi
3200     ENABLE_WASM_EXCEPTIONS=TRUE
3202 AC_SUBST(ENABLE_WASM_EXCEPTIONS)
3204 # Whether to build "avmedia" functionality or not.
3206 if test "$enable_avmedia" = yes; then
3207     BUILD_TYPE="$BUILD_TYPE AVMEDIA"
3208     AC_DEFINE(HAVE_FEATURE_AVMEDIA)
3209 else
3210     test_gstreamer_1_0=no
3213 # Decide whether to build database connectivity stuff (including Base) or not.
3214 if test "$enable_database_connectivity" != no; then
3215     BUILD_TYPE="$BUILD_TYPE DBCONNECTIVITY"
3216     AC_DEFINE(HAVE_FEATURE_DBCONNECTIVITY)
3217 else
3218     if test "$_os" = iOS; then
3219         AC_MSG_ERROR([Presumly can't disable DB connectivity on iOS.])
3220     fi
3221     disable_database_connectivity_dependencies
3224 if test -z "$enable_extensions"; then
3225     # For iOS and Android Viewer, disable extensions unless specifically overridden with --enable-extensions.
3226     if test $_os != iOS && test $_os != Android -o "$ENABLE_ANDROID_LOK" = TRUE ; then
3227         enable_extensions=yes
3228     fi
3231 DISABLE_SCRIPTING=''
3232 if test "$enable_scripting" = yes; then
3233     BUILD_TYPE="$BUILD_TYPE SCRIPTING"
3234     AC_DEFINE(HAVE_FEATURE_SCRIPTING)
3235 else
3236     DISABLE_SCRIPTING='TRUE'
3237     SCPDEFS="$SCPDEFS -DDISABLE_SCRIPTING"
3240 if test $_os = iOS -o $_os = Android -o $_os = Emscripten; then
3241     # Disable dynamic_loading always for iOS and Android
3242     enable_dynamic_loading=no
3243 elif test -z "$enable_dynamic_loading"; then
3244     # Otherwise enable it unless specifically disabled
3245     enable_dynamic_loading=yes
3248 DISABLE_DYNLOADING=''
3249 if test "$enable_dynamic_loading" = yes; then
3250     BUILD_TYPE="$BUILD_TYPE DYNLOADING"
3251 else
3252     DISABLE_DYNLOADING='TRUE'
3253     if test $_os != iOS -a $_os != Android; then
3254         enable_database_connectivity=no
3255         enable_nss=no
3256         enable_odk=no
3257         enable_python=no
3258         enable_skia=no
3259         with_java=no
3260     fi
3262 AC_SUBST(DISABLE_DYNLOADING)
3264 ENABLE_CUSTOMTARGET_COMPONENTS=
3265 if test "$enable_customtarget_components" = yes -a "$DISABLE_DYNLOADING" = TRUE; then
3266     ENABLE_CUSTOMTARGET_COMPONENTS=TRUE
3267     if test -n "$with_locales" -a "$with_locales" != en -a "$with_locales" != ALL; then
3268         AC_MSG_ERROR([Currently just --with-locales=all or en is supported with --enable-customtarget-components])
3269     fi
3271 AC_SUBST(ENABLE_CUSTOMTARGET_COMPONENTS)
3273 if test "$enable_extensions" = yes; then
3274     BUILD_TYPE="$BUILD_TYPE EXTENSIONS"
3275     AC_DEFINE(HAVE_FEATURE_EXTENSIONS)
3276 else
3277     enable_extension_integration=no
3278     enable_extension_update=no
3281 # remember SYSBASE value
3282 AC_SUBST(SYSBASE)
3284 dnl ===================================================================
3285 dnl  Sort out various gallery compilation options
3286 dnl ===================================================================
3287 WITH_GALLERY_BUILD=TRUE
3288 AC_MSG_CHECKING([how to build and package galleries])
3289 if test -n "${with_galleries}"; then
3290     if test "$with_galleries" = "build"; then
3291         if test "$enable_database_connectivity" = no; then
3292             AC_MSG_ERROR([DB connectivity is needed for gengal / svx])
3293         fi
3294         AC_MSG_RESULT([build from source images internally])
3295     elif test "$with_galleries" = "no"; then
3296         WITH_GALLERY_BUILD=
3297         AC_MSG_RESULT([disable non-internal gallery build])
3298     else
3299         AC_MSG_ERROR([unknown value --with-galleries=$with_galleries])
3300     fi
3301 else
3302     if test $_os != iOS -a $_os != Android; then
3303         AC_MSG_RESULT([internal src images for desktop])
3304     else
3305         WITH_GALLERY_BUILD=
3306         AC_MSG_RESULT([disable src image build])
3307     fi
3309 AC_SUBST(WITH_GALLERY_BUILD)
3311 dnl ===================================================================
3312 dnl  Sort out various templates compilation options
3313 dnl ===================================================================
3314 WITH_TEMPLATES=TRUE
3315 AC_MSG_CHECKING([build with or without template files])
3316 if test -n "${with_templates}"; then
3317     if test "$with_templates" = "yes"; then
3318         AC_MSG_RESULT([enable all templates])
3319     elif test "$with_templates" = "no"; then
3320         WITH_TEMPLATES=
3321         AC_MSG_RESULT([disable non-internal templates])
3322     else
3323         AC_MSG_ERROR([unknown value --with-templates=$with_templates])
3324     fi
3325 else
3326     if test $_os != iOS -a $_os != Android -a $_os != Emscripten; then
3327         AC_MSG_RESULT([enable all templates])
3328     else
3329         WITH_TEMPLATES=
3330         AC_MSG_RESULT([disable non-internal templates])
3331     fi
3333 AC_SUBST(WITH_TEMPLATES)
3335 dnl ===================================================================
3336 dnl  Checks if ccache is available
3337 dnl ===================================================================
3338 CCACHE_DEPEND_MODE=
3339 if test "$enable_ccache" = "no"; then
3340     CCACHE=""
3341 elif test -n "$enable_ccache" -o \( "$enable_ccache" = "" -a "$enable_icecream" != "yes" \); then
3342     case "%$CC%$CXX%" in
3343     # If $CC and/or $CXX already contain "ccache" (possibly suffixed with some version number etc),
3344     # assume that's good then
3345     *%ccache[[-_' ']]*|*/ccache[[-_' ']]*)
3346         AC_MSG_NOTICE([ccache seems to be included in a pre-defined CC and/or CXX])
3347         CCACHE_DEPEND_MODE=1
3348         ;;
3349     *)
3350         # try to use our own ccache if it is available and CCACHE was not already defined
3351         if test -z "$CCACHE"; then
3352             if test "$_os" = "WINNT"; then
3353                 ccache_ext=.exe # e.g. openssl build needs ccache.exe, not just ccache
3354             fi
3355             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/ccache$ccache_ext" ; then
3356                 CCACHE="$LODE_HOME/opt/bin/ccache$ccache_ext"
3357             elif test -x "/opt/lo/bin/ccache$ccache_ext"; then
3358                 CCACHE="/opt/lo/bin/ccache$ccache_ext"
3359             fi
3360         fi
3361         AC_PATH_PROG([CCACHE],[ccache],[not found])
3362         if test "$CCACHE" != "not found" -a "$_os" = "WINNT"; then
3363             CCACHE=`win_short_path_for_make "$CCACHE"`
3364             # check that it has MSVC support (it should recognize it in CCACHE_COMPILERTYPE)
3365             rm -f conftest.txt
3366             AC_MSG_CHECKING([whether $CCACHE has MSVC support])
3367             CCACHE_COMPILERTYPE=cl CCACHE_LOGFILE=conftest.txt $CCACHE echo >/dev/null 2>/dev/null
3368             if grep -q 'Config: (environment) compiler_type = cl' conftest.txt; then
3369                 AC_MSG_RESULT(yes)
3370             else
3371                 AC_MSG_RESULT(no)
3372                 CCACHE="not found"
3373             fi
3374             rm -f conftest.txt
3375         fi
3376         if test "$CCACHE" = "not found" -a "$_os" = "WINNT"; then
3377             # on windows/VC perhaps sccache is around?
3378             case "%$CC%$CXX%" in
3379             # If $CC and/or $CXX already contain "sccache" (possibly suffixed with some version number etc),
3380             # assume that's good then
3381             *%sccache[[-_' ']]*|*/sccache[[-_' ']]*)
3382                 AC_MSG_NOTICE([sccache seems to be included in a pre-defined CC and/or CXX])
3383                 CCACHE_DEPEND_MODE=1
3384                 SCCACHE=1
3385                 ;;
3386             *)
3387                 # for sharing code below, reuse CCACHE env var
3388                 AC_PATH_PROG([CCACHE],[sccache],[not found])
3389                 if test "$CCACHE" != "not found"; then
3390                     CCACHE=`win_short_path_for_make "$CCACHE"`
3391                     SCCACHE=1
3392                     CCACHE_DEPEND_MODE=1
3393                 fi
3394                 ;;
3395             esac
3396         fi
3397         if test "$CCACHE" = "not found"; then
3398             CCACHE=""
3399         fi
3400         if test -n "$CCACHE" -a -z "$SCCACHE"; then
3401             CCACHE_DEPEND_MODE=1
3402             # Need to check for ccache version: otherwise prevents
3403             # caching of the results (like "-x objective-c++" for Mac)
3404             if test $_os = Darwin -o $_os = iOS; then
3405                 # Check ccache version
3406                 AC_MSG_CHECKING([whether version of ccache is suitable])
3407                 CCACHE_VERSION=`"$CCACHE" -V | "$AWK" '/^ccache version/{print $3}'`
3408                 CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
3409                 if test "$CCACHE_VERSION" = "2.4_OOo" -o "$CCACHE_NUMVER" -ge "030100"; then
3410                     AC_MSG_RESULT([yes, $CCACHE_VERSION])
3411                 else
3412                     AC_MSG_RESULT([no, $CCACHE_VERSION])
3413                     CCACHE=""
3414                     CCACHE_DEPEND_MODE=
3415                 fi
3416             fi
3417         fi
3418         if test "$enable_ccache" = yes && test -z "$CCACHE"; then
3419             AC_MSG_ERROR([No suitable ccache found])
3420         fi
3421         ;;
3422     esac
3423 else
3424     CCACHE=""
3426 if test "$enable_ccache" = "nodepend"; then
3427     CCACHE_DEPEND_MODE=""
3429 AC_SUBST(CCACHE_DEPEND_MODE)
3431 # sccache defaults are good enough
3432 if test "$CCACHE" != "" -a -z "$SCCACHE"; then
3433     # e.g. (/home/rene/.config/ccache/ccache.conf) max_size = 20.0G
3434     # or (...) max_size = 20.0 G
3435     # -p works with both 4.2 and 4.4
3436     ccache_size_msg=$([$CCACHE -p | $AWK /max_size/'{ print $4 $5 }' | sed -e 's/\.[0-9]*//'])
3437     ccache_size=$(echo "$ccache_size_msg" | grep "G" | sed -e 's/G.*$//')
3438     if test "$ccache_size" = ""; then
3439         ccache_size=$(echo "$ccache_size_msg" | grep "M" | sed -e 's/\ M.*$//')
3440         if test "$ccache_size" = ""; then
3441             ccache_size=0
3442         fi
3443         # we could not determine the size or it was less than 1GB -> disable auto-ccache
3444         if test $ccache_size -lt 1024; then
3445             CCACHE=""
3446             AC_MSG_WARN([ccache's cache size is less than 1GB using it is counter-productive: Disabling auto-ccache detection])
3447             add_warning "ccache's cache size is less than 1GB using it is counter-productive: auto-ccache detection disabled"
3448         else
3449             # warn that ccache may be too small for debug build
3450             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3451             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3452         fi
3453     else
3454         if test $ccache_size -lt 5; then
3455             #warn that ccache may be too small for debug build
3456             AC_MSG_WARN([ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build])
3457             add_warning "ccache's cache size is less than 5GB using it may be counter-productive for debug or symbol-enabled build"
3458         fi
3459     fi
3462 ENABLE_Z7_DEBUG=
3463 if test "$enable_z7_debug" != no; then
3464     if test "$enable_z7_debug" = yes -o -n "$CCACHE"; then
3465         ENABLE_Z7_DEBUG=TRUE
3466     fi
3467 else
3468     AC_MSG_WARN([ccache will not work with --disable-z7-debug])
3469     add_warning "ccache will not work with --disable-z7-debug"
3471 AC_SUBST(ENABLE_Z7_DEBUG)
3473 dnl ===================================================================
3474 dnl  Checks for C compiler,
3475 dnl  The check for the C++ compiler is later on.
3476 dnl ===================================================================
3477 if test "$_os" != "WINNT"; then
3478     GCC_HOME_SET="true"
3479     AC_MSG_CHECKING([gcc home])
3480     if test -z "$with_gcc_home"; then
3481         if test "$enable_icecream" = "yes"; then
3482             if test -d "/usr/lib/icecc/bin"; then
3483                 GCC_HOME="/usr/lib/icecc/"
3484             elif test -d "/usr/libexec/icecc/bin"; then
3485                 GCC_HOME="/usr/libexec/icecc/"
3486             elif test -d "/opt/icecream/bin"; then
3487                 GCC_HOME="/opt/icecream/"
3488             else
3489                 AC_MSG_ERROR([Could not figure out the location of icecream GCC wrappers, manually use --with-gcc-home])
3491             fi
3492         else
3493             GCC_HOME=`command -v gcc | $SED -e s,/bin/gcc,,`
3494             GCC_HOME_SET="false"
3495         fi
3496     else
3497         GCC_HOME="$with_gcc_home"
3498     fi
3499     AC_MSG_RESULT($GCC_HOME)
3500     AC_SUBST(GCC_HOME)
3502     if test "$GCC_HOME_SET" = "true"; then
3503         if test -z "$CC"; then
3504             CC="$GCC_HOME/bin/gcc"
3505             CC_BASE="gcc"
3506         fi
3507         if test -z "$CXX"; then
3508             CXX="$GCC_HOME/bin/g++"
3509             CXX_BASE="g++"
3510         fi
3511     fi
3514 COMPATH=`dirname "$CC"`
3515 if test "$COMPATH" = "."; then
3516     AC_PATH_PROGS(COMPATH, $CC)
3517     dnl double square bracket to get single because of M4 quote...
3518     COMPATH=`echo $COMPATH | $SED "s@/[[^/:]]*\\\$@@"`
3520 COMPATH=`echo $COMPATH | $SED "s@/[[Bb]][[Ii]][[Nn]]\\\$@@"`
3522 dnl ===================================================================
3523 dnl Java support
3524 dnl ===================================================================
3525 AC_MSG_CHECKING([whether to build with Java support])
3526 if test "$with_java" != "no"; then
3527     if test "$DISABLE_SCRIPTING" = TRUE; then
3528         AC_MSG_RESULT([no, overridden by --disable-scripting])
3529         ENABLE_JAVA=""
3530         with_java=no
3531     else
3532         AC_MSG_RESULT([yes])
3533         ENABLE_JAVA="TRUE"
3534         AC_DEFINE(HAVE_FEATURE_JAVA)
3535     fi
3536 else
3537     AC_MSG_RESULT([no])
3538     ENABLE_JAVA=""
3541 AC_SUBST(ENABLE_JAVA)
3543 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3545 dnl ENABLE_JAVA="" indicate no Java support at all
3547 dnl ===================================================================
3548 dnl Check macOS SDK and compiler
3549 dnl ===================================================================
3551 if test $_os = Darwin; then
3553     # The SDK in the currently selected Xcode should be found.
3555     AC_MSG_CHECKING([what macOS SDK to use])
3556     # XCode only ships with a single SDK for a while now, and using older SDKs alongside is not
3557     # really supported anymore, instead you'd use different copies of Xcode, each with their own
3558     # SDK, and thus xcrun will pick the SDK that matches the currently selected Xcode version
3559     # also restricting the SDK version to "known good" versions doesn't seem necessary anymore, the
3560     # problems that existed in the PPC days with target versions not being respected or random
3561     # failures seems to be a thing of the past or rather: limiting either the Xcode version or the
3562     # SDK version is enough, no need to do both...
3563     MACOSX_SDK_PATH=`xcrun --sdk macosx --show-sdk-path 2> /dev/null`
3564     if test ! -d "$MACOSX_SDK_PATH"; then
3565         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3566     fi
3567     macosx_sdk=`xcodebuild -version -sdk "$MACOSX_SDK_PATH" SDKVersion`
3568     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
3569     # format changed between 10.9 and 10.10 - up to 10.9 it was just four digits (1090), starting
3570     # with macOS 10.10 it was switched to account for x.y.z with six digits, 10.10 is 101000,
3571     # 10.10.2 is 101002
3572     # we don't target the lower versions anymore, so it doesn't matter that we don't generate the
3573     # correct version in case such an old SDK is specified, it will be rejected later anyway
3574     MACOSX_SDK_VERSION=$(echo $macosx_sdk | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3575     if test $MACOSX_SDK_VERSION -lt 101500; then
3576         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported, lowest supported version is 10.15])
3577     fi
3578     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3579         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon (need at least 11.0)])
3580     fi
3581     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3583     AC_MSG_CHECKING([what minimum version of macOS to require])
3584     if test "$with_macosx_version_min_required" = "" ; then
3585         if test "$host_cpu" = x86_64; then
3586             with_macosx_version_min_required="10.15";
3587         else
3588             with_macosx_version_min_required="11.0";
3589         fi
3590     fi
3591     # see same notes about MACOSX_SDK_VERSION above
3592     MAC_OS_X_VERSION_MIN_REQUIRED=$(echo $with_macosx_version_min_required | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3593     if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 101500; then
3594         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, minimum supported version is 10.15])
3595     fi
3596     AC_MSG_RESULT([$with_macosx_version_min_required])
3598     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3599     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3600         AC_MSG_ERROR([the version minimum required ($with_macosx_version_min_required) cannot be greater than the sdk level ($macosx_sdk)])
3601     else
3602         AC_MSG_RESULT([yes])
3603     fi
3605     # export this so that "xcrun" invocations later return matching values
3606     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3607     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3608     export DEVELOPER_DIR
3609     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3610     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3612     AC_MSG_CHECKING([whether Xcode is new enough])
3613     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3614     my_xcode_ver2=${my_xcode_ver1#Xcode }
3615     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3616     if test "$my_xcode_ver3" -ge 1205; then
3617         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3618         if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 120000; then
3619             if test "$my_xcode_ver3" -ge 1600; then
3620                 dnl the Xcode 15 relnotes state that the classic linker will disappear in the next version, but nothing about
3621                 dnl fixing the problem with weak symbols/macOS 11 compatibility, so assume for now that Xcode 16 will break it...
3622                 AC_MSG_ERROR([Check that Xcode 16 still supports the old linker/that it doesn't break macOS 11 compatibility, then remove this check]);
3623             fi
3624             if test "$my_xcode_ver3" -ge 1500; then
3625                 AC_MSG_WARN([Xcode 15 has a new linker that causes runtime crashes on macOS 11])
3626                 add_warning "Xcode 15 has a new linker that causes runtime crashes on macOS 11, forcing the old linker."
3627                 add_warning "see https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking"
3628                 LDFLAGS="$LDFLAGS -Wl,-ld_classic"
3629                 # if LDFLAGS weren't set already, a check above sets x_LDFLAGS=[#] to comment-out the export LDFLAGS line in config_host.mk
3630                 x_LDFLAGS=
3631             fi
3632         fi
3633     else
3634         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3635     fi
3637     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3638     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3640     LIBTOOL=/usr/bin/libtool
3641     INSTALL_NAME_TOOL=install_name_tool
3642     if test -z "$save_CC"; then
3643         stdlib=-stdlib=libc++
3645         AC_MSG_CHECKING([what C compiler to use])
3646         CC="`xcrun -find clang`"
3647         CC_BASE=`first_arg_basename "$CC"`
3648         if test "$host_cpu" = x86_64; then
3649             CC+=" -target x86_64-apple-macos"
3650         else
3651             CC+=" -target arm64-apple-macos"
3652         fi
3653         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3654         AC_MSG_RESULT([$CC])
3656         AC_MSG_CHECKING([what C++ compiler to use])
3657         CXX="`xcrun -find clang++`"
3658         CXX_BASE=`first_arg_basename "$CXX"`
3659         if test "$host_cpu" = x86_64; then
3660             CXX+=" -target x86_64-apple-macos"
3661         else
3662             CXX+=" -target arm64-apple-macos"
3663         fi
3664         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3665         AC_MSG_RESULT([$CXX])
3667         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3668         AR=`xcrun -find ar`
3669         NM=`xcrun -find nm`
3670         STRIP=`xcrun -find strip`
3671         LIBTOOL=`xcrun -find libtool`
3672         RANLIB=`xcrun -find ranlib`
3673     fi
3675     AC_MSG_CHECKING([whether to do code signing])
3677     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3678         AC_MSG_RESULT([no])
3679     else
3680         if test "$enable_macosx_code_signing" = yes; then
3681             # By default use the first suitable certificate (?).
3683             # https://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3684             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3685             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3686             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3687             # "Developer ID Application" one.
3688             identity="Developer ID Application:"
3689         else
3690             identity=$enable_macosx_code_signing
3691         fi
3692         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3693         if test -n "$identity"; then
3694             MACOSX_CODESIGNING_IDENTITY=$identity
3695             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3696             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3697         else
3698             AC_MSG_ERROR([cannot determine identity to use])
3699         fi
3700     fi
3702     AC_MSG_CHECKING([whether to create a Mac App Store package])
3704     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3705         AC_MSG_RESULT([no])
3706     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3707         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3708     else
3709         if test "$enable_macosx_package_signing" = yes; then
3710             # By default use the first suitable certificate.
3711             # It should be a "3rd Party Mac Developer Installer" one
3712             identity="3rd Party Mac Developer Installer:"
3713         else
3714             identity=$enable_macosx_package_signing
3715         fi
3716         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3717         if test -n "$identity"; then
3718             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3719             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3720             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3721         else
3722             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3723         fi
3724     fi
3726     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3727         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3728     fi
3730     AC_MSG_CHECKING([whether to sandbox the application])
3732     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3733         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3734     elif test "$enable_macosx_sandbox" = yes; then
3735         ENABLE_MACOSX_SANDBOX=TRUE
3736         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3737         AC_MSG_RESULT([yes])
3738     else
3739         AC_MSG_RESULT([no])
3740     fi
3742     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3743     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3744     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3746     if test -n "$with_macosx_provisioning_profile" ; then
3747         if test ! -f "$with_macosx_provisioning_profile"; then
3748             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3749         else
3750             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3751             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3752                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3753                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3754                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3755         fi
3756     fi
3758 AC_SUBST(MACOSX_SDK_PATH)
3759 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3760 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3761 AC_SUBST(INSTALL_NAME_TOOL)
3762 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3763 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3764 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3765 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3766 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3767 AC_SUBST(MACOSX_PROVISIONING_INFO)
3768 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3769 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3770 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3772 dnl ===================================================================
3773 dnl Check iOS SDK and compiler
3774 dnl ===================================================================
3776 if test $_os = iOS; then
3777     AC_MSG_CHECKING([what iOS SDK to use])
3779     if test "$enable_ios_simulator" = "yes"; then
3780         platformlc=iphonesimulator
3781         versionmin=-mios-simulator-version-min=14.5
3782     else
3783         platformlc=iphoneos
3784         versionmin=-miphoneos-version-min=14.5
3785     fi
3787     sysroot=`xcrun --sdk $platformlc --show-sdk-path`
3789     if ! test -d "$sysroot"; then
3790         AC_MSG_ERROR([Could not find iOS SDK $sysroot])
3791     fi
3793     AC_MSG_RESULT($sysroot)
3795     stdlib="-stdlib=libc++"
3797     AC_MSG_CHECKING([what C compiler to use])
3798     CC="`xcrun -find clang`"
3799     CC_BASE=`first_arg_basename "$CC"`
3800     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3801     AC_MSG_RESULT([$CC])
3803     AC_MSG_CHECKING([what C++ compiler to use])
3804     CXX="`xcrun -find clang++`"
3805     CXX_BASE=`first_arg_basename "$CXX"`
3806     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3807     AC_MSG_RESULT([$CXX])
3809     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3810     AR=`xcrun -find ar`
3811     NM=`xcrun -find nm`
3812     STRIP=`xcrun -find strip`
3813     LIBTOOL=`xcrun -find libtool`
3814     RANLIB=`xcrun -find ranlib`
3817 AC_MSG_CHECKING([whether to treat the installation as read-only])
3819 if test $_os = Darwin; then
3820     enable_readonly_installset=yes
3821 elif test "$enable_extensions" != yes; then
3822     enable_readonly_installset=yes
3824 if test "$enable_readonly_installset" = yes; then
3825     AC_MSG_RESULT([yes])
3826     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3827 else
3828     AC_MSG_RESULT([no])
3831 dnl ===================================================================
3832 dnl Structure of install set
3833 dnl ===================================================================
3835 if test $_os = Darwin; then
3836     LIBO_BIN_FOLDER=MacOS
3837     LIBO_ETC_FOLDER=Resources
3838     LIBO_LIBEXEC_FOLDER=MacOS
3839     LIBO_LIB_FOLDER=Frameworks
3840     LIBO_LIB_PYUNO_FOLDER=Resources
3841     LIBO_SHARE_FOLDER=Resources
3842     LIBO_SHARE_HELP_FOLDER=Resources/help
3843     LIBO_SHARE_JAVA_FOLDER=Resources/java
3844     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3845     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3846     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3847     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3848     LIBO_URE_BIN_FOLDER=MacOS
3849     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3850     LIBO_URE_LIB_FOLDER=Frameworks
3851     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3852     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3853 elif test $_os = WINNT; then
3854     LIBO_BIN_FOLDER=program
3855     LIBO_ETC_FOLDER=program
3856     LIBO_LIBEXEC_FOLDER=program
3857     LIBO_LIB_FOLDER=program
3858     LIBO_LIB_PYUNO_FOLDER=program
3859     LIBO_SHARE_FOLDER=share
3860     LIBO_SHARE_HELP_FOLDER=help
3861     LIBO_SHARE_JAVA_FOLDER=program/classes
3862     LIBO_SHARE_PRESETS_FOLDER=presets
3863     LIBO_SHARE_READMES_FOLDER=readmes
3864     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3865     LIBO_SHARE_SHELL_FOLDER=program/shell
3866     LIBO_URE_BIN_FOLDER=program
3867     LIBO_URE_ETC_FOLDER=program
3868     LIBO_URE_LIB_FOLDER=program
3869     LIBO_URE_MISC_FOLDER=program
3870     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3871 else
3872     LIBO_BIN_FOLDER=program
3873     LIBO_ETC_FOLDER=program
3874     LIBO_LIBEXEC_FOLDER=program
3875     LIBO_LIB_FOLDER=program
3876     LIBO_LIB_PYUNO_FOLDER=program
3877     LIBO_SHARE_FOLDER=share
3878     LIBO_SHARE_HELP_FOLDER=help
3879     LIBO_SHARE_JAVA_FOLDER=program/classes
3880     LIBO_SHARE_PRESETS_FOLDER=presets
3881     LIBO_SHARE_READMES_FOLDER=readmes
3882     if test "$enable_fuzzers" != yes; then
3883         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3884     else
3885         LIBO_SHARE_RESOURCE_FOLDER=resource
3886     fi
3887     LIBO_SHARE_SHELL_FOLDER=program/shell
3888     LIBO_URE_BIN_FOLDER=program
3889     LIBO_URE_ETC_FOLDER=program
3890     LIBO_URE_LIB_FOLDER=program
3891     LIBO_URE_MISC_FOLDER=program
3892     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3894 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3895 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3896 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3897 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3898 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3899 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3900 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3901 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3902 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3903 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3904 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3905 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3906 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3907 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3908 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3909 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3911 # Not all of them needed in config_host.mk, add more if need arises
3912 AC_SUBST(LIBO_BIN_FOLDER)
3913 AC_SUBST(LIBO_ETC_FOLDER)
3914 AC_SUBST(LIBO_LIB_FOLDER)
3915 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3916 AC_SUBST(LIBO_SHARE_FOLDER)
3917 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3918 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3919 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3920 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3921 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3922 AC_SUBST(LIBO_URE_BIN_FOLDER)
3923 AC_SUBST(LIBO_URE_ETC_FOLDER)
3924 AC_SUBST(LIBO_URE_LIB_FOLDER)
3925 AC_SUBST(LIBO_URE_MISC_FOLDER)
3926 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3928 dnl ===================================================================
3929 dnl Windows specific tests and stuff
3930 dnl ===================================================================
3932 reg_get_value()
3934     # Return value: $regvalue
3935     unset regvalue
3937     if test "$build_os" = "wsl"; then
3938         regvalue=$($WSL_LO_HELPER --read-registry $1 "$2/$3" 2>/dev/null)
3939         return
3940     fi
3942     local _regentry="/proc/registry${1}/${2}/${3}"
3943     if test -f "$_regentry"; then
3944         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3945         # Registry keys read via /proc/registry* are always \0 terminated!
3946         local _regvalue=$(tr -d '\0' < "$_regentry")
3947         if test $? -eq 0; then
3948             regvalue=$_regvalue
3949         fi
3950     fi
3953 # Get a value from the 32-bit side of the Registry
3954 reg_get_value_32()
3956     reg_get_value "32" "$1" "$2"
3959 # Get a value from the 64-bit side of the Registry
3960 reg_get_value_64()
3962     reg_get_value "64" "$1" "$2"
3965 reg_list_values()
3967     # Return value: $reglist
3968     unset reglist
3970     if test "$build_os" = "wsl"; then
3971         reglist=$($WSL_LO_HELPER --list-registry $1 "$2" 2>/dev/null | tr -d '\r')
3972         return
3973     fi
3975     reglist=$(ls "/proc/registry${1}/${2}")
3978 # List values from the 32-bit side of the Registry
3979 reg_list_values_32()
3981     reg_list_values "32" "$1"
3984 # List values from the 64-bit side of the Registry
3985 reg_list_values_64()
3987     reg_list_values "64" "$1"
3990 case "$host_os" in
3991 cygwin*|wsl*)
3992     COM=MSC
3993     OS=WNT
3994     RTL_OS=Windows
3995     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3996         P_SEP=";"
3997     else
3998         P_SEP=:
3999     fi
4000     case "$host_cpu" in
4001     x86_64)
4002         CPUNAME=X86_64
4003         RTL_ARCH=X86_64
4004         PLATFORMID=windows_x86_64
4005         WINDOWS_X64=1
4006         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
4007         WIN_HOST_ARCH="x64"
4008         WIN_MULTI_ARCH="x86"
4009         WIN_HOST_BITS=64
4010         ;;
4011     i*86)
4012         CPUNAME=INTEL
4013         RTL_ARCH=x86
4014         PLATFORMID=windows_x86
4015         WIN_HOST_ARCH="x86"
4016         WIN_HOST_BITS=32
4017         WIN_OTHER_ARCH="x64"
4018         ;;
4019     aarch64)
4020         CPUNAME=AARCH64
4021         RTL_ARCH=AARCH64
4022         PLATFORMID=windows_aarch64
4023         WINDOWS_X64=1
4024         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
4025         WIN_HOST_ARCH="arm64"
4026         WIN_HOST_BITS=64
4027         with_ucrt_dir=no
4028         ;;
4029     *)
4030         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4031         ;;
4032     esac
4034     case "$build_cpu" in
4035     x86_64) WIN_BUILD_ARCH="x64" ;;
4036     i*86) WIN_BUILD_ARCH="x86" ;;
4037     aarch64) WIN_BUILD_ARCH="arm64" ;;
4038     *)
4039         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
4040         ;;
4041     esac
4043     SCPDEFS="$SCPDEFS -D_MSC_VER"
4044     ;;
4045 esac
4047 # multi-arch is an arch, which can execute on the host (x86 on x64), while
4048 # other-arch won't, but wouldn't break the build (x64 on x86).
4049 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
4050     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
4054 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
4055     # To allow building Windows multi-arch releases without cross-tooling
4056     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
4057         cross_compiling="yes"
4058     fi
4061 if test "$cross_compiling" = "yes"; then
4062     export CROSS_COMPILING=TRUE
4063     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
4064         ENABLE_WASM_STRIP=TRUE
4065     fi
4066     if test "$_os" = "Emscripten"; then
4067         if test "$with_main_module" = "calc"; then
4068             ENABLE_WASM_STRIP_WRITER=TRUE
4069         elif test "$with_main_module" = "writer"; then
4070             ENABLE_WASM_STRIP_CALC=TRUE
4071         fi
4072     fi
4073 else
4074     CROSS_COMPILING=
4075     BUILD_TYPE="$BUILD_TYPE NATIVE"
4077 AC_SUBST(CROSS_COMPILING)
4078 AC_SUBST(ENABLE_WASM_STRIP)
4079 AC_SUBST(ENABLE_WASM_STRIP_WRITER)
4080 AC_SUBST(ENABLE_WASM_STRIP_CALC)
4082 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
4083 # NOTE: must _not_ be used for bundled external libraries!
4084 ISYSTEM=
4085 if test "$GCC" = "yes"; then
4086     AC_MSG_CHECKING( for -isystem )
4087     save_CFLAGS=$CFLAGS
4088     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
4089     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
4090     CFLAGS=$save_CFLAGS
4091     if test -n "$ISYSTEM"; then
4092         AC_MSG_RESULT(yes)
4093     else
4094         AC_MSG_RESULT(no)
4095     fi
4097 if test -z "$ISYSTEM"; then
4098     # fall back to using -I
4099     ISYSTEM=-I
4101 AC_SUBST(ISYSTEM)
4103 dnl ===================================================================
4104 dnl  Check which Visual Studio compiler is used
4105 dnl ===================================================================
4107 map_vs_year_to_version()
4109     # Return value: $vsversion
4111     unset vsversion
4113     case $1 in
4114     2019)
4115         vsversion=16;;
4116     2022)
4117         vsversion=17;;
4118     2022preview)
4119         vsversion=17.10;;
4120     *)
4121         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
4122     esac
4125 vs_versions_to_check()
4127     # Args: $1 (optional) : versions to check, in the order of preference
4128     # Return value: $vsversions
4130     unset vsversions
4132     if test -n "$1"; then
4133         map_vs_year_to_version "$1"
4134         vsversions=$vsversion
4135     else
4136         # Default version is 2019
4137         vsversions="16"
4138     fi
4141 win_get_env_from_vsdevcmdbat()
4143     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
4144     printf '@set VSCMD_SKIP_SENDTELEMETRY=1\r\n' > $WRAPPERBATCHFILEPATH
4145     PathFormat "$VC_PRODUCT_DIR"
4146     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$formatted_path" >> $WRAPPERBATCHFILEPATH
4147     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
4148     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
4149     local result
4150     if test "$build_os" = "wsl"; then
4151         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
4152     else
4153         chmod +x $WRAPPERBATCHFILEPATH
4154         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
4155     fi
4156     rm -f $WRAPPERBATCHFILEPATH
4157     printf '%s' "$result"
4160 find_ucrt()
4162     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0" "InstallationFolder"
4163     if test -n "$regvalue"; then
4164         PathFormat "$regvalue"
4165         UCRTSDKDIR=$formatted_path_unix
4166         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0" "ProductVersion"
4167         if test -n "$regvalue"; then
4168             UCRTVERSION="$regvalue".0
4169         fi
4171         # Rest if not exist
4172         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4173           UCRTSDKDIR=
4174         fi
4175     fi
4176     if test -z "$UCRTSDKDIR"; then
4177         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4178         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4179         if test -f "$ide_env_file"; then
4180             PathFormat "$(win_get_env_from_vsdevcmdbat UniversalCRTSdkDir)"
4181             UCRTSDKDIR=$formatted_path_unix
4182             UCRTVERSION=$(win_get_env_from_vsdevcmdbat UCRTVersion)
4183             dnl Hack needed at least by tml:
4184             if test "$UCRTVERSION" = 10.0.15063.0 \
4185                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4186                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4187             then
4188                 UCRTVERSION=10.0.14393.0
4189             fi
4190         else
4191           AC_MSG_ERROR([No UCRT found])
4192         fi
4193     fi
4196 find_msvc()
4198     # Find Visual C++
4199     # Args: $1 (optional) : The VS version year
4200     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4202     unset vctest vctoolset vcnumwithdot vcbuildnumber
4204     vs_versions_to_check "$1"
4205     if test "$build_os" = wsl; then
4206         vswhere="$PROGRAMFILESX86"
4207         if test -z "$vswhere"; then
4208             vswhere="c:\\Program Files (x86)"
4209         fi
4210     else
4211         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4212     fi
4213     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4214     PathFormat "$vswhere"
4215     vswhere=$formatted_path_unix
4216     for ver in $vsversions; do
4217         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4218         if test -z "$vswhereoutput"; then
4219             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4220         fi
4221         # Fall back to all MS products (this includes VC++ Build Tools)
4222         if ! test -n "$vswhereoutput"; then
4223             AC_MSG_CHECKING([VC++ Build Tools and similar])
4224             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4225         fi
4226         if test -n "$vswhereoutput"; then
4227             PathFormat "$vswhereoutput"
4228             vctest=$formatted_path_unix
4229             break
4230         fi
4231     done
4233     if test -n "$vctest"; then
4234         vcnumwithdot="$ver"
4235         if test "${vcnumwithdot%%.*}" = "$vcnumwithdot"; then
4236             vcnumwithdot=$vcnumwithdot.0
4237         fi
4238         case "$vcnumwithdot" in
4239         16.0)
4240             vcyear=2019
4241             vctoolset=v142
4242             ;;
4243         17.0 | 17.10)
4244             vcyear=2022
4245             vctoolset=v143
4246             ;;
4247         esac
4248         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4250     fi
4253 test_cl_exe()
4255     AC_MSG_CHECKING([$1 compiler])
4257     CL_EXE_PATH="$2/cl.exe"
4259     if test ! -f "$CL_EXE_PATH"; then
4260         if test "$1" = "multi-arch"; then
4261             AC_MSG_WARN([no compiler (cl.exe) in $2])
4262             return 1
4263         else
4264             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4265         fi
4266     fi
4268     dnl ===========================================================
4269     dnl  Check for the corresponding mspdb*.dll
4270     dnl ===========================================================
4272     # MSVC 15.0 has libraries from 14.0?
4273     mspdbnum="140"
4275     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4276         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4277     fi
4279     # The compiles has to find its shared libraries
4280     OLD_PATH="$PATH"
4281     TEMP_PATH=`cygpath -d "$2"`
4282     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4284     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4285         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4286     fi
4288     PATH="$OLD_PATH"
4290     AC_MSG_RESULT([$CL_EXE_PATH])
4293 SOLARINC=
4294 MSBUILD_PATH=
4295 DEVENV=
4296 if test "$_os" = "WINNT"; then
4297     AC_MSG_CHECKING([Visual C++])
4298     find_msvc "$with_visual_studio"
4299     if test -z "$vctest"; then
4300         if test -n "$with_visual_studio"; then
4301             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4302         else
4303             AC_MSG_ERROR([no Visual Studio installation found])
4304         fi
4305     fi
4306     AC_MSG_RESULT([])
4308     VC_PRODUCT_DIR="$vctest/VC"
4309     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4311     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4312     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4313         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4314         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4315         if test $? -ne 0; then
4316             WIN_MULTI_ARCH=""
4317             WIN_OTHER_ARCH=""
4318         fi
4319     fi
4321     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4322         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4323         test_cl_exe "build" "$MSVC_BUILD_PATH"
4324     fi
4326     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4327         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4328         test_cl_exe "host" "$MSVC_HOST_PATH"
4329     else
4330         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4331     fi
4333     AC_MSG_CHECKING([for short pathname of VC product directory])
4334     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4335     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4337     UCRTSDKDIR=
4338     UCRTVERSION=
4340     AC_MSG_CHECKING([for UCRT location])
4341     find_ucrt
4342     # find_ucrt errors out if it doesn't find it
4343     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4344     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4345     ucrtincpath_formatted=$formatted_path
4346     # SOLARINC is used for external modules and must be set too.
4347     # And no, it's not sufficient to set SOLARINC only, as configure
4348     # itself doesn't honour it.
4349     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4350     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4351     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4352     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4354     AC_SUBST(UCRTSDKDIR)
4355     AC_SUBST(UCRTVERSION)
4357     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4358     # Find the proper version of MSBuild.exe to use based on the VS version
4359     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot MSBuildOverrideTasksPath
4360     if test -z "$regvalue" ; then
4361         if test "$WIN_BUILD_ARCH" != "x64"; then
4362             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4363         else
4364             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4365         fi
4366     fi
4367     if test -d "$regvalue" ; then
4368         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4369         AC_MSG_RESULT([$regvalue])
4370     else
4371         AC_MSG_ERROR([MSBuild.exe location not found])
4372     fi
4374     # Find the version of devenv.exe
4375     PathFormat "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe"
4376     DEVENV="$formatted_path"
4377     DEVENV_unix="$formatted_path_unix"
4378     if test ! -e "$DEVENV_unix"; then
4379         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4380     fi
4382     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4383     dnl needed when building CLR code:
4384     if test -z "$MSVC_CXX"; then
4385         # This gives us a posix path with 8.3 filename restrictions
4386         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4387     fi
4389     if test -z "$CC"; then
4390         CC=$MSVC_CXX
4391         CC_BASE=`first_arg_basename "$CC"`
4392     fi
4393     if test -z "$CXX"; then
4394         CXX=$MSVC_CXX
4395         CXX_BASE=`first_arg_basename "$CXX"`
4396     fi
4398     if test -n "$CC"; then
4399         # Remove /cl.exe from CC case insensitive
4400         AC_MSG_NOTICE([found Visual C++ $vcyear])
4402         PathFormat "$COMPATH"
4403         COMPATH="$formatted_path"
4404         COMPATH_unix="$formatted_path_unix"
4405         CPPFLAGS="$CPPFLAGS -I$COMPATH/Include"
4407         VCVER=$vcnumwithdot
4408         VCTOOLSET=$vctoolset
4410         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4411         # are always "better", we list them in reverse chronological order.
4413         case "$vcnumwithdot" in
4414         16.0 | 17.0 | 17.10)
4415             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4416             ;;
4417         esac
4419         # The expectation is that --with-windows-sdk should not need to be used
4420         if test -n "$with_windows_sdk"; then
4421             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4422             *" "$with_windows_sdk" "*)
4423                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4424                 ;;
4425             *)
4426                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4427                 ;;
4428             esac
4429         fi
4431         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4432         ac_objext=obj
4433         ac_exeext=exe
4435     else
4436         AC_MSG_ERROR([Visual C++ not found after all, huh])
4437     fi
4439     # ERROR if VS version < 16.5
4440     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4441     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4442         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4443         // between Visual Studio versions and _MSC_VER:
4444         #if _MSC_VER < 1925
4445         #error
4446         #endif
4447     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4449     # WARN if VS version < 16.10
4450     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.10])
4451     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4452         #if _MSC_VER < 1929
4453         #error
4454         #endif
4455     ]])],[vs2019_recommended_version=yes],[vs2019_recommended_version=no])
4457     if test $vs2019_recommended_version = yes; then
4458         AC_MSG_RESULT([yes])
4459     else
4460         AC_MSG_WARN([no])
4461         add_warning "You should have at least Visual Studio 2019 version 16.10 to avoid build problems. Otherwise, you may face problems with the build of some modules including dragonbox."
4462     fi
4464     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4465     # version of the Explorer extension (and maybe other small
4466     # bits, too) needed when installing a 32-bit LibreOffice on a
4467     # 64-bit OS. The 64-bit Explorer extension is a feature that
4468     # has been present since long in OOo. Don't confuse it with
4469     # building LibreOffice itself as 64-bit code.
4471     BUILD_X64=
4472     CXX_X64_BINARY=
4474     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4475         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4476         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4477              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4478         then
4479             BUILD_X64=TRUE
4480             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4481             AC_MSG_RESULT([found])
4482         else
4483             AC_MSG_RESULT([not found])
4484             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4485         fi
4486     elif test "$WIN_HOST_ARCH" = "x64"; then
4487         CXX_X64_BINARY=$CXX
4488     fi
4489     AC_SUBST(BUILD_X64)
4491     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4492     AC_SUBST(CXX_X64_BINARY)
4494     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4495     # needed to support TWAIN scan on both 32- and 64-bit systems
4497     case "$WIN_HOST_ARCH" in
4498     x64)
4499         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4500         if test -n "$CXX_X86_BINARY"; then
4501             BUILD_X86=TRUE
4502             AC_MSG_RESULT([preset])
4503         elif test -n "$WIN_MULTI_ARCH"; then
4504             BUILD_X86=TRUE
4505             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4506             AC_MSG_RESULT([found])
4507         else
4508             AC_MSG_RESULT([not found])
4509             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4510         fi
4511         ;;
4512     x86)
4513         BUILD_X86=TRUE
4514         CXX_X86_BINARY=$MSVC_CXX
4515         ;;
4516     esac
4517     AC_SUBST(BUILD_X86)
4518     AC_SUBST(CXX_X86_BINARY)
4520 AC_SUBST(VCVER)
4521 AC_SUBST(VCTOOLSET)
4522 AC_SUBST(DEVENV)
4523 AC_SUBST(MSVC_CXX)
4525 COM_IS_CLANG=
4526 AC_MSG_CHECKING([whether the compiler is actually Clang])
4527 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4528     #ifndef __clang__
4529     you lose
4530     #endif
4531     int foo=42;
4532     ]])],
4533     [AC_MSG_RESULT([yes])
4534      COM_IS_CLANG=TRUE],
4535     [AC_MSG_RESULT([no])])
4536 AC_SUBST(COM_IS_CLANG)
4538 CLANGVER=
4539 if test "$COM_IS_CLANG" = TRUE; then
4540     AC_MSG_CHECKING([whether Clang is new enough])
4541     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4542         #if !defined __apple_build_version__
4543         #error
4544         #endif
4545         ]])],
4546         [my_apple_clang=yes],[my_apple_clang=])
4547     if test "$my_apple_clang" = yes; then
4548         AC_MSG_RESULT([assumed yes (Apple Clang)])
4549     elif test "$_os" = Emscripten; then
4550         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4551     else
4552         if test "$_os" = WINNT; then
4553             dnl In which case, assume clang-cl:
4554             my_args="/EP /TC"
4555         else
4556             my_args="-E -P"
4557         fi
4558         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4559         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4560         CLANGVER=`echo $clang_version \
4561             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4562         if test "$CLANGVER" -ge 120000; then
4563             AC_MSG_RESULT([yes ($clang_version)])
4564         else
4565             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 12])
4566         fi
4567         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4568         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4569     fi
4572 SHOWINCLUDES_PREFIX=
4573 if test "$_os" = WINNT; then
4574     dnl We need to guess the prefix of the -showIncludes output, it can be
4575     dnl localized
4576     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4577     echo "#include <stdlib.h>" > conftest.c
4578     SHOWINCLUDES_PREFIX=`VSLANG=1033 $CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4579         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4580     rm -f conftest.c conftest.obj
4581     if test -z "$SHOWINCLUDES_PREFIX"; then
4582         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4583     else
4584         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4585     fi
4587 AC_SUBST(SHOWINCLUDES_PREFIX)
4590 # prefix C with ccache if needed
4592 if test "$CCACHE" != ""; then
4593     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4595     AC_LANG_PUSH([C])
4596     save_CFLAGS=$CFLAGS
4597     CFLAGS="$CFLAGS --ccache-skip -O2"
4598     # msvc does not fail on unknown options, check stdout
4599     if test "$COM" = MSC; then
4600         CFLAGS="$CFLAGS -nologo"
4601     fi
4602     save_ac_c_werror_flag=$ac_c_werror_flag
4603     ac_c_werror_flag=yes
4604     dnl an empty program will do, we're checking the compiler flags
4605     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4606                       [use_ccache=yes], [use_ccache=no])
4607     CFLAGS=$save_CFLAGS
4608     ac_c_werror_flag=$save_ac_c_werror_flag
4609     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4610         AC_MSG_RESULT([yes])
4611     else
4612         CC="$CCACHE $CC"
4613         CC_BASE="ccache $CC_BASE"
4614         AC_MSG_RESULT([no])
4615     fi
4616     AC_LANG_POP([C])
4619 # ===================================================================
4620 # check various GCC options that Clang does not support now but maybe
4621 # will somewhen in the future, check them even for GCC, so that the
4622 # flags are set
4623 # ===================================================================
4625 HAVE_GCC_GGDB2=
4626 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4627     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4628     save_CFLAGS=$CFLAGS
4629     CFLAGS="$CFLAGS -Werror -ggdb2"
4630     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4631     CFLAGS=$save_CFLAGS
4632     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4633         AC_MSG_RESULT([yes])
4634     else
4635         AC_MSG_RESULT([no])
4636     fi
4638     if test "$host_cpu" = "m68k"; then
4639         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4640         save_CFLAGS=$CFLAGS
4641         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4642         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4643         CFLAGS=$save_CFLAGS
4644         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4645             AC_MSG_RESULT([yes])
4646         else
4647             AC_MSG_ERROR([no])
4648         fi
4649     fi
4651 AC_SUBST(HAVE_GCC_GGDB2)
4653 dnl ===================================================================
4654 dnl  Test the gcc version
4655 dnl ===================================================================
4656 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4657     AC_MSG_CHECKING([the GCC version])
4658     _gcc_version=`$CC -dumpfullversion`
4659     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4660         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4661     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4663     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4665     if test "$gcc_full_version" -lt 120000; then
4666         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 12])
4667     fi
4668 else
4669     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4670     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4671     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4672     # (which reports itself as GCC 4.2.1).
4673     GCC_VERSION=
4675 AC_SUBST(GCC_VERSION)
4677 dnl Set the ENABLE_DBGUTIL variable
4678 dnl ===================================================================
4679 AC_MSG_CHECKING([whether to build with additional debug utilities])
4680 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4681     ENABLE_DBGUTIL="TRUE"
4682     # this is an extra var so it can have different default on different MSVC
4683     # versions (in case there are version specific problems with it)
4684     MSVC_USE_DEBUG_RUNTIME="TRUE"
4686     AC_MSG_RESULT([yes])
4687     # cppunit and graphite expose STL in public headers
4688     if test "$with_system_cppunit" = "yes"; then
4689         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4690     else
4691         with_system_cppunit=no
4692     fi
4693     if test "$with_system_graphite" = "yes"; then
4694         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4695     else
4696         with_system_graphite=no
4697     fi
4698     if test "$with_system_orcus" = "yes"; then
4699         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4700     else
4701         with_system_orcus=no
4702     fi
4703     if test "$with_system_libcmis" = "yes"; then
4704         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4705     else
4706         with_system_libcmis=no
4707     fi
4708     if test "$with_system_hunspell" = "yes"; then
4709         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4710     else
4711         with_system_hunspell=no
4712     fi
4713     if test "$with_system_gpgmepp" = "yes"; then
4714         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4715     else
4716         with_system_gpgmepp=no
4717     fi
4718     if test "$with_system_zxing" = "yes"; then
4719         AC_MSG_ERROR([--with-system-zxing conflicts with --enable-dbgutil])
4720     else
4721         with_system_zxing=no
4722     fi
4723     if test "$with_system_poppler" = "yes"; then
4724         AC_MSG_ERROR([--with-system-poppler conflicts with --enable-dbgutil])
4725     else
4726         with_system_poppler=no
4727     fi
4728     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4729     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4730     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4731     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4732     # of those two is using the system variant:
4733     if test "$with_system_libnumbertext" = "yes"; then
4734         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4735     else
4736         with_system_libnumbertext=no
4737     fi
4738     if test "$with_system_libwps" = "yes"; then
4739         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4740     else
4741         with_system_libwps=no
4742     fi
4743 else
4744     ENABLE_DBGUTIL=""
4745     MSVC_USE_DEBUG_RUNTIME=""
4746     AC_MSG_RESULT([no])
4748 AC_SUBST(ENABLE_DBGUTIL)
4749 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4751 dnl Set the ENABLE_DEBUG variable.
4752 dnl ===================================================================
4753 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4754     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4756 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4757     if test -z "$libo_fuzzed_enable_debug"; then
4758         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4759     else
4760         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4761         enable_debug=yes
4762     fi
4765 AC_MSG_CHECKING([whether to do a debug build])
4766 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4767     ENABLE_DEBUG="TRUE"
4768     if test -n "$ENABLE_DBGUTIL" ; then
4769         AC_MSG_RESULT([yes (dbgutil)])
4770     else
4771         AC_MSG_RESULT([yes])
4772     fi
4773 else
4774     ENABLE_DEBUG=""
4775     AC_MSG_RESULT([no])
4777 AC_SUBST(ENABLE_DEBUG)
4779 dnl ===================================================================
4780 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4781 dnl This is done only after compiler checks (need to know if Clang is
4782 dnl used, for different defaults) and after checking if a debug build
4783 dnl is wanted (non-debug builds get the default linker if not explicitly
4784 dnl specified otherwise).
4785 dnl All checks for linker features/options should come after this.
4786 dnl ===================================================================
4787 check_use_ld()
4789     use_ld=-fuse-ld=${1%%:*}
4790     use_ld_path=${1#*:}
4791     if test "$use_ld_path" != "$1"; then
4792         if test "$COM_IS_CLANG" = TRUE; then
4793             if test "$CLANGVER" -ge 120000; then
4794                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4795             else
4796                 use_ld="-fuse-ld=${use_ld_path}"
4797             fi
4798         else
4799             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4800             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4801             # pickup the alternative linker, when called by libtool for linking.
4802             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4803             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4804         fi
4805     fi
4806     use_ld_fail_if_error=$2
4807     use_ld_ok=
4808     AC_MSG_CHECKING([for $use_ld linker support])
4809     use_ld_ldflags_save="$LDFLAGS"
4810     LDFLAGS="$LDFLAGS $use_ld"
4811     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4812 #include <stdio.h>
4813         ],[
4814 printf ("hello world\n");
4815         ])], USE_LD=$use_ld, [])
4816     if test -n "$USE_LD"; then
4817         AC_MSG_RESULT( yes )
4818         use_ld_ok=yes
4819     else
4820         if test -n "$use_ld_fail_if_error"; then
4821             AC_MSG_ERROR( no )
4822         else
4823             AC_MSG_RESULT( no )
4824         fi
4825     fi
4826     if test -n "$use_ld_ok"; then
4827         dnl keep the value of LDFLAGS
4828         return 0
4829     fi
4830     LDFLAGS="$use_ld_ldflags_save"
4831     return 1
4833 USE_LD=
4834 if test "$enable_ld" != "no"; then
4835     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4836         if test -n "$enable_ld"; then
4837             check_use_ld "$enable_ld" fail_if_error
4838         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4839             dnl non-debug builds default to the default linker
4840             true
4841         elif test -n "$COM_IS_CLANG"; then
4842             check_use_ld lld
4843             if test $? -ne 0; then
4844                 check_use_ld gold
4845                 if test $? -ne 0; then
4846                     check_use_ld mold
4847                 fi
4848             fi
4849         else
4850             # For gcc first try gold, new versions also support lld/mold.
4851             check_use_ld gold
4852             if test $? -ne 0; then
4853                 check_use_ld lld
4854                 if test $? -ne 0; then
4855                     check_use_ld mold
4856                 fi
4857             fi
4858         fi
4859         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4860         rm conftest.out
4861         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4862         if test -z "$ld_used"; then
4863             ld_used="unknown"
4864         fi
4865         AC_MSG_CHECKING([for linker that is used])
4866         AC_MSG_RESULT([$ld_used])
4867         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4868             if echo "$ld_used" | grep -q "^GNU ld"; then
4869                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4870                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4871             fi
4872         fi
4873     else
4874         if test "$enable_ld" = "yes"; then
4875             AC_MSG_ERROR([--enable-ld not supported])
4876         fi
4877     fi
4879 AC_SUBST(USE_LD)
4880 AC_SUBST(LD)
4882 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4883 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4884     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4885     bsymbolic_functions_ldflags_save=$LDFLAGS
4886     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4887     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4888 #include <stdio.h>
4889         ],[
4890 printf ("hello world\n");
4891         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4892     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4893         AC_MSG_RESULT( found )
4894     else
4895         AC_MSG_RESULT( not found )
4896     fi
4897     LDFLAGS=$bsymbolic_functions_ldflags_save
4899 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4901 LD_GC_SECTIONS=
4902 if test "$GCC" = "yes"; then
4903     for flag in "--gc-sections" "-dead_strip"; do
4904         AC_MSG_CHECKING([for $flag linker support])
4905         ldflags_save=$LDFLAGS
4906         LDFLAGS="$LDFLAGS -Wl,$flag"
4907         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4908 #include <stdio.h>
4909             ],[
4910 printf ("hello world\n");
4911             ])],[
4912             LD_GC_SECTIONS="-Wl,$flag"
4913             AC_MSG_RESULT( found )
4914             ], [
4915             AC_MSG_RESULT( not found )
4916             ])
4917         LDFLAGS=$ldflags_save
4918         if test -n "$LD_GC_SECTIONS"; then
4919             break
4920         fi
4921     done
4923 AC_SUBST(LD_GC_SECTIONS)
4925 HAVE_EXTERNAL_DWARF=
4926 if test "$enable_split_debug" != no; then
4927     use_split_debug=
4928     if test -n "$ENABLE_LTO"; then
4929         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4930     elif test "$enable_split_debug" = yes; then
4931         use_split_debug=1
4932     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4933     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4934         use_split_debug=1
4935     fi
4936     if test -n "$use_split_debug"; then
4937         if test "$_os" = "Emscripten"; then
4938             TEST_CC_FLAG=-gseparate-dwarf
4939         else
4940             TEST_CC_FLAG=-gsplit-dwarf
4941         fi
4942         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4943         save_CFLAGS=$CFLAGS
4944         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4945         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4946         CFLAGS=$save_CFLAGS
4947         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4948             AC_MSG_RESULT([yes])
4949         else
4950             if test "$enable_split_debug" = yes; then
4951                 AC_MSG_ERROR([no])
4952             else
4953                 AC_MSG_RESULT([no])
4954             fi
4955         fi
4956     fi
4957     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4958         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4959         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4960     fi
4962 AC_SUBST(HAVE_EXTERNAL_DWARF)
4964 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4965 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4966 save_CFLAGS=$CFLAGS
4967 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4968 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4969 CFLAGS=$save_CFLAGS
4970 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4971     AC_MSG_RESULT([yes])
4972 else
4973     AC_MSG_RESULT([no])
4975 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4977 ENABLE_GDB_INDEX=
4978 if test "$enable_gdb_index" != "no"; then
4979     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4980     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4981         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4982         save_CFLAGS=$CFLAGS
4983         CFLAGS="$CFLAGS -Werror -g -ggnu-pubnames"
4984         have_ggnu_pubnames=
4985         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4986         if test "$have_ggnu_pubnames" != "TRUE"; then
4987             if test "$enable_gdb_index" = "yes"; then
4988                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4989             else
4990                 AC_MSG_RESULT( no )
4991             fi
4992         else
4993             AC_MSG_RESULT( yes )
4994             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4995             ldflags_save=$LDFLAGS
4996             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4997             AC_LINK_IFELSE([AC_LANG_PROGRAM([
4998 #include <stdio.h>
4999                 ],[
5000 printf ("hello world\n");
5001                 ])], ENABLE_GDB_INDEX=TRUE, [])
5002             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
5003                 AC_MSG_RESULT( yes )
5004             else
5005                 if test "$enable_gdb_index" = "yes"; then
5006                     AC_MSG_ERROR( no )
5007                 else
5008                     AC_MSG_RESULT( no )
5009                 fi
5010             fi
5011             LDFLAGS=$ldflags_save
5012         fi
5013         CFLAGS=$save_CFLAGS
5014         fi
5015     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5016         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
5017         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
5018     fi
5020 AC_SUBST(ENABLE_GDB_INDEX)
5022 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
5023     enable_sal_log=yes
5025 if test "$enable_sal_log" = yes; then
5026     ENABLE_SAL_LOG=TRUE
5028 AC_SUBST(ENABLE_SAL_LOG)
5030 dnl Check for enable symbols option
5031 dnl ===================================================================
5032 AC_MSG_CHECKING([whether to generate debug information])
5033 if test -z "$enable_symbols"; then
5034     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5035         enable_symbols=yes
5036     else
5037         enable_symbols=no
5038     fi
5040 if test "$enable_symbols" = yes; then
5041     ENABLE_SYMBOLS_FOR=all
5042     AC_MSG_RESULT([yes])
5043 elif test "$enable_symbols" = no; then
5044     ENABLE_SYMBOLS_FOR=
5045     AC_MSG_RESULT([no])
5046 else
5047     # Selective debuginfo.
5048     ENABLE_SYMBOLS_FOR="$enable_symbols"
5049     AC_MSG_RESULT([for "$enable_symbols"])
5051 AC_SUBST(ENABLE_SYMBOLS_FOR)
5053 if test -n "$with_android_ndk" -a \( -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_SYMBOLS_FOR" = "all"; then
5054     # Building on Android with full symbols: without enough memory the linker never finishes currently.
5055     AC_MSG_CHECKING([whether enough memory is available for linking])
5056     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
5057     # Check for 15GB, as Linux reports a bit less than the physical memory size.
5058     if test -n "$mem_size" -a $mem_size -lt 15728640; then
5059         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
5060     else
5061         AC_MSG_RESULT([yes])
5062     fi
5065 ENABLE_OPTIMIZED=
5066 ENABLE_OPTIMIZED_DEBUG=
5067 AC_MSG_CHECKING([whether to compile with optimization flags])
5068 if test -z "$enable_optimized"; then
5069     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5070         enable_optimized=no
5071     else
5072         enable_optimized=yes
5073     fi
5075 if test "$enable_optimized" = yes; then
5076     ENABLE_OPTIMIZED=TRUE
5077     AC_MSG_RESULT([yes])
5078 elif test "$enable_optimized" = debug; then
5079     ENABLE_OPTIMIZED_DEBUG=TRUE
5080     AC_MSG_RESULT([yes (debug)])
5081     HAVE_GCC_OG=
5082     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
5083         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
5084         save_CFLAGS=$CFLAGS
5085         CFLAGS="$CFLAGS -Werror -Og"
5086         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
5087         CFLAGS=$save_CFLAGS
5088         if test "$HAVE_GCC_OG" = "TRUE"; then
5089             AC_MSG_RESULT([yes])
5090         else
5091             AC_MSG_RESULT([no])
5092         fi
5093     fi
5094     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
5095         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
5096     fi
5097 else
5098     AC_MSG_RESULT([no])
5100 AC_SUBST(ENABLE_OPTIMIZED)
5101 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
5104 # determine CPUNAME, OS, ...
5106 case "$host_os" in
5108 cygwin*|wsl*)
5109     # Already handled
5110     ;;
5112 darwin*)
5113     COM=GCC
5114     OS=MACOSX
5115     RTL_OS=MacOSX
5116     P_SEP=:
5118     case "$host_cpu" in
5119     aarch64|arm64)
5120         if test "$enable_ios_simulator" = "yes"; then
5121             OS=iOS
5122         else
5123             CPUNAME=AARCH64
5124             RTL_ARCH=AARCH64
5125             PLATFORMID=macosx_aarch64
5126         fi
5127         ;;
5128     x86_64)
5129         if test "$enable_ios_simulator" = "yes"; then
5130             OS=iOS
5131         fi
5132         CPUNAME=X86_64
5133         RTL_ARCH=X86_64
5134         PLATFORMID=macosx_x86_64
5135         ;;
5136     *)
5137         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5138         ;;
5139     esac
5140     ;;
5142 ios*)
5143     COM=GCC
5144     OS=iOS
5145     RTL_OS=iOS
5146     P_SEP=:
5148     case "$host_cpu" in
5149     aarch64|arm64)
5150         if test "$enable_ios_simulator" = "yes"; then
5151             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
5152         fi
5153         ;;
5154     *)
5155         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5156         ;;
5157     esac
5158     CPUNAME=AARCH64
5159     RTL_ARCH=AARCH64
5160     PLATFORMID=ios_arm64
5161     ;;
5163 dragonfly*)
5164     COM=GCC
5165     OS=DRAGONFLY
5166     RTL_OS=DragonFly
5167     P_SEP=:
5169     case "$host_cpu" in
5170     i*86)
5171         CPUNAME=INTEL
5172         RTL_ARCH=x86
5173         PLATFORMID=dragonfly_x86
5174         ;;
5175     x86_64)
5176         CPUNAME=X86_64
5177         RTL_ARCH=X86_64
5178         PLATFORMID=dragonfly_x86_64
5179         ;;
5180     *)
5181         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5182         ;;
5183     esac
5184     ;;
5186 freebsd*)
5187     COM=GCC
5188     RTL_OS=FreeBSD
5189     OS=FREEBSD
5190     P_SEP=:
5192     case "$host_cpu" in
5193     aarch64)
5194         CPUNAME=AARCH64
5195         PLATFORMID=freebsd_aarch64
5196         RTL_ARCH=AARCH64
5197         ;;
5198     i*86)
5199         CPUNAME=INTEL
5200         RTL_ARCH=x86
5201         PLATFORMID=freebsd_x86
5202         ;;
5203     x86_64|amd64)
5204         CPUNAME=X86_64
5205         RTL_ARCH=X86_64
5206         PLATFORMID=freebsd_x86_64
5207         ;;
5208     powerpc64)
5209         CPUNAME=POWERPC64
5210         RTL_ARCH=PowerPC_64
5211         PLATFORMID=freebsd_powerpc64
5212         ;;
5213     powerpc|powerpcspe)
5214         CPUNAME=POWERPC
5215         RTL_ARCH=PowerPC
5216         PLATFORMID=freebsd_powerpc
5217         ;;
5218     *)
5219         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5220         ;;
5221     esac
5222     ;;
5224 haiku*)
5225     COM=GCC
5226     GUIBASE=haiku
5227     RTL_OS=Haiku
5228     OS=HAIKU
5229     P_SEP=:
5231     case "$host_cpu" in
5232     i*86)
5233         CPUNAME=INTEL
5234         RTL_ARCH=x86
5235         PLATFORMID=haiku_x86
5236         ;;
5237     x86_64|amd64)
5238         CPUNAME=X86_64
5239         RTL_ARCH=X86_64
5240         PLATFORMID=haiku_x86_64
5241         ;;
5242     *)
5243         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5244         ;;
5245     esac
5246     ;;
5248 kfreebsd*)
5249     COM=GCC
5250     OS=LINUX
5251     RTL_OS=kFreeBSD
5252     P_SEP=:
5254     case "$host_cpu" in
5256     i*86)
5257         CPUNAME=INTEL
5258         RTL_ARCH=x86
5259         PLATFORMID=kfreebsd_x86
5260         ;;
5261     x86_64)
5262         CPUNAME=X86_64
5263         RTL_ARCH=X86_64
5264         PLATFORMID=kfreebsd_x86_64
5265         ;;
5266     *)
5267         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5268         ;;
5269     esac
5270     ;;
5272 linux-gnu*|linux-musl*)
5273     COM=GCC
5274     OS=LINUX
5275     RTL_OS=Linux
5276     P_SEP=:
5278     case "$host_cpu" in
5280     aarch64)
5281         CPUNAME=AARCH64
5282         PLATFORMID=linux_aarch64
5283         RTL_ARCH=AARCH64
5284         EPM_FLAGS="-a arm64"
5285         ;;
5286     alpha)
5287         CPUNAME=AXP
5288         RTL_ARCH=ALPHA
5289         PLATFORMID=linux_alpha
5290         ;;
5291     arm*)
5292         CPUNAME=ARM
5293         EPM_FLAGS="-a arm"
5294         RTL_ARCH=ARM_EABI
5295         PLATFORMID=linux_arm_eabi
5296         case "$host_cpu" in
5297         arm*-linux)
5298             RTL_ARCH=ARM_OABI
5299             PLATFORMID=linux_arm_oabi
5300             ;;
5301         esac
5302         ;;
5303     hppa)
5304         CPUNAME=HPPA
5305         RTL_ARCH=HPPA
5306         EPM_FLAGS="-a hppa"
5307         PLATFORMID=linux_hppa
5308         ;;
5309     i*86)
5310         CPUNAME=INTEL
5311         RTL_ARCH=x86
5312         PLATFORMID=linux_x86
5313         ;;
5314     ia64)
5315         CPUNAME=IA64
5316         RTL_ARCH=IA64
5317         PLATFORMID=linux_ia64
5318         ;;
5319     mips)
5320         CPUNAME=MIPS
5321         RTL_ARCH=MIPS_EB
5322         EPM_FLAGS="-a mips"
5323         PLATFORMID=linux_mips_eb
5324         ;;
5325     mips64)
5326         CPUNAME=MIPS64
5327         RTL_ARCH=MIPS64_EB
5328         EPM_FLAGS="-a mips64"
5329         PLATFORMID=linux_mips64_eb
5330         ;;
5331     mips64el)
5332         CPUNAME=MIPS64
5333         RTL_ARCH=MIPS64_EL
5334         EPM_FLAGS="-a mips64el"
5335         PLATFORMID=linux_mips64_el
5336         ;;
5337     mipsel)
5338         CPUNAME=MIPS
5339         RTL_ARCH=MIPS_EL
5340         EPM_FLAGS="-a mipsel"
5341         PLATFORMID=linux_mips_el
5342         ;;
5343     riscv64)
5344         CPUNAME=RISCV64
5345         RTL_ARCH=RISCV64
5346         EPM_FLAGS="-a riscv64"
5347         PLATFORMID=linux_riscv64
5348         ;;
5349     m68k)
5350         CPUNAME=M68K
5351         RTL_ARCH=M68K
5352         PLATFORMID=linux_m68k
5353         ;;
5354     powerpc)
5355         CPUNAME=POWERPC
5356         RTL_ARCH=PowerPC
5357         PLATFORMID=linux_powerpc
5358         ;;
5359     powerpc64)
5360         CPUNAME=POWERPC64
5361         RTL_ARCH=PowerPC_64
5362         PLATFORMID=linux_powerpc64
5363         ;;
5364     powerpc64le)
5365         CPUNAME=POWERPC64
5366         RTL_ARCH=PowerPC_64_LE
5367         PLATFORMID=linux_powerpc64_le
5368         ;;
5369     sparc)
5370         CPUNAME=SPARC
5371         RTL_ARCH=SPARC
5372         PLATFORMID=linux_sparc
5373         ;;
5374     sparc64)
5375         CPUNAME=SPARC64
5376         RTL_ARCH=SPARC64
5377         PLATFORMID=linux_sparc64
5378         ;;
5379     s390x)
5380         CPUNAME=S390X
5381         RTL_ARCH=S390x
5382         PLATFORMID=linux_s390x
5383         ;;
5384     x86_64)
5385         CPUNAME=X86_64
5386         RTL_ARCH=X86_64
5387         PLATFORMID=linux_x86_64
5388         ;;
5389     loongarch64)
5390         CPUNAME=LOONGARCH64
5391         RTL_ARCH=LOONGARCH64
5392         PLATFORMID=linux_loongarch64
5393         ;;
5394     *)
5395         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5396         ;;
5397     esac
5398     ;;
5400 linux-android*)
5401     COM=GCC
5402     OS=ANDROID
5403     RTL_OS=Android
5404     P_SEP=:
5406     case "$host_cpu" in
5408     arm|armel)
5409         CPUNAME=ARM
5410         RTL_ARCH=ARM_EABI
5411         PLATFORMID=android_arm_eabi
5412         ;;
5413     aarch64)
5414         CPUNAME=AARCH64
5415         RTL_ARCH=AARCH64
5416         PLATFORMID=android_aarch64
5417         ;;
5418     i*86)
5419         CPUNAME=INTEL
5420         RTL_ARCH=x86
5421         PLATFORMID=android_x86
5422         ;;
5423     x86_64)
5424         CPUNAME=X86_64
5425         RTL_ARCH=X86_64
5426         PLATFORMID=android_x86_64
5427         ;;
5428     *)
5429         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5430         ;;
5431     esac
5432     ;;
5434 *netbsd*)
5435     COM=GCC
5436     OS=NETBSD
5437     RTL_OS=NetBSD
5438     P_SEP=:
5440     case "$host_cpu" in
5441     i*86)
5442         CPUNAME=INTEL
5443         RTL_ARCH=x86
5444         PLATFORMID=netbsd_x86
5445         ;;
5446     powerpc)
5447         CPUNAME=POWERPC
5448         RTL_ARCH=PowerPC
5449         PLATFORMID=netbsd_powerpc
5450         ;;
5451     sparc)
5452         CPUNAME=SPARC
5453         RTL_ARCH=SPARC
5454         PLATFORMID=netbsd_sparc
5455         ;;
5456     x86_64)
5457         CPUNAME=X86_64
5458         RTL_ARCH=X86_64
5459         PLATFORMID=netbsd_x86_64
5460         ;;
5461     *)
5462         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5463         ;;
5464     esac
5465     ;;
5467 openbsd*)
5468     COM=GCC
5469     OS=OPENBSD
5470     RTL_OS=OpenBSD
5471     P_SEP=:
5473     case "$host_cpu" in
5474     i*86)
5475         CPUNAME=INTEL
5476         RTL_ARCH=x86
5477         PLATFORMID=openbsd_x86
5478         ;;
5479     x86_64)
5480         CPUNAME=X86_64
5481         RTL_ARCH=X86_64
5482         PLATFORMID=openbsd_x86_64
5483         ;;
5484     *)
5485         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5486         ;;
5487     esac
5488     SOLARINC="$SOLARINC -I/usr/local/include"
5489     ;;
5491 solaris*)
5492     COM=GCC
5493     OS=SOLARIS
5494     RTL_OS=Solaris
5495     P_SEP=:
5497     case "$host_cpu" in
5498     i*86)
5499         CPUNAME=INTEL
5500         RTL_ARCH=x86
5501         PLATFORMID=solaris_x86
5502         ;;
5503     sparc)
5504         CPUNAME=SPARC
5505         RTL_ARCH=SPARC
5506         PLATFORMID=solaris_sparc
5507         ;;
5508     sparc64)
5509         CPUNAME=SPARC64
5510         RTL_ARCH=SPARC64
5511         PLATFORMID=solaris_sparc64
5512         ;;
5513     *)
5514         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5515         ;;
5516     esac
5517     SOLARINC="$SOLARINC -I/usr/local/include"
5518     ;;
5520 emscripten*)
5521     COM=GCC
5522     OS=EMSCRIPTEN
5523     RTL_OS=Emscripten
5524     P_SEP=:
5526     case "$host_cpu" in
5527     wasm32|wasm64)
5528         ;;
5529     *)
5530         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5531         ;;
5532     esac
5533     CPUNAME=INTEL
5534     RTL_ARCH=x86
5535     PLATFORMID=linux_x86
5536     ;;
5539     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5540     ;;
5541 esac
5543 DISABLE_GUI=""
5544 if test "$enable_gui" = "no"; then
5545     if test "$using_x11" != yes; then
5546         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5547     fi
5548     USING_X11=
5549     DISABLE_GUI=TRUE
5550     test_epoxy=no
5551 else
5552     AC_DEFINE(HAVE_FEATURE_UI)
5554 AC_SUBST(DISABLE_GUI)
5556 if test "$with_x" = "no"; then
5557     USING_X11=
5560 if test -z "$USING_X11" -a "$enable_qt5" = "yes" -a "$enable_gen" = "yes"; then
5561     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5564 if test "$using_x11" = yes; then
5565     if test "$USING_X11" = TRUE; then
5566         AC_DEFINE(USING_X11)
5567     else
5568         disable_x11_tests
5569         if test "$DISABLE_DYNLOADING" = TRUE; then
5570             test_qt5=yes
5571             test_qt6=yes
5572         fi
5573     fi
5574 else
5575     if test "$USING_X11" = TRUE; then
5576         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5577     fi
5580 WORKDIR="${BUILDDIR}/workdir"
5581 INSTDIR="${BUILDDIR}/instdir"
5582 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5583 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5584 AC_SUBST(COM)
5585 AC_SUBST(CPUNAME)
5586 AC_SUBST(RTL_OS)
5587 AC_SUBST(RTL_ARCH)
5588 AC_SUBST(EPM_FLAGS)
5589 AC_SUBST(USING_X11)
5590 AC_SUBST([INSTDIR])
5591 AC_SUBST([INSTROOT])
5592 AC_SUBST([INSTROOTBASE])
5593 AC_SUBST(OS)
5594 AC_SUBST(P_SEP)
5595 AC_SUBST(WORKDIR)
5596 AC_SUBST(PLATFORMID)
5597 AC_SUBST(WINDOWS_X64)
5598 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5599 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5601 if test "$OS" = WNT -a "$COM" = MSC; then
5602     case "$CPUNAME" in
5603     INTEL) CPPU_ENV=msci ;;
5604     X86_64) CPPU_ENV=mscx ;;
5605     AARCH64) CPPU_ENV=msca ;;
5606     *)
5607         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5608         ;;
5609     esac
5610 else
5611     CPPU_ENV=gcc3
5613 AC_SUBST(CPPU_ENV)
5615 dnl ===================================================================
5616 dnl Test which package format to use
5617 dnl ===================================================================
5618 AC_MSG_CHECKING([which package format to use])
5619 if test -n "$with_package_format" -a "$with_package_format" != no; then
5620     for i in $with_package_format; do
5621         case "$i" in
5622         bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5623             ;;
5624         *)
5625             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5626 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5627 deb - Debian software distribution
5628 pkg - Solaris software distribution
5629 rpm - RedHat software distribution
5631 LibreOffice additionally supports:
5632 archive - .tar.gz or .zip
5633 dmg - macOS .dmg
5634 installed - installation tree
5635 msi - Windows .msi
5636         ])
5637             ;;
5638         esac
5639     done
5640     # fakeroot is needed to ensure correct file ownerships/permissions
5641     # inside deb packages and tar archives created on Linux and Solaris.
5642     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5643         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5644         if test "$FAKEROOT" = "no"; then
5645             AC_MSG_ERROR(
5646                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5647         fi
5648     fi
5649     PKGFORMAT="$with_package_format"
5650     AC_MSG_RESULT([$PKGFORMAT])
5651 else
5652     PKGFORMAT=
5653     AC_MSG_RESULT([none])
5655 AC_SUBST(PKGFORMAT)
5657 dnl ===================================================================
5658 dnl handle help related options
5660 dnl If you change help related options, please update README.help
5661 dnl ===================================================================
5663 ENABLE_HTMLHELP=
5664 HELP_OMINDEX_PAGE=
5665 HELP_ONLINE=
5666 WITH_HELPPACKS=
5668 AC_MSG_CHECKING([which help to build])
5669 if test -n "$with_help" -a "$with_help" != "no"; then
5670     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5671     BUILD_TYPE="$BUILD_TYPE HELP"
5672     case "$with_help" in
5673     "html")
5674         ENABLE_HTMLHELP=TRUE
5675         WITH_HELPPACKS=TRUE
5676         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5677         AC_MSG_RESULT([HTML (local)])
5678         ;;
5679     "online")
5680         ENABLE_HTMLHELP=TRUE
5681         HELP_ONLINE=TRUE
5682         AC_MSG_RESULT([HTML (online)])
5683         ;;
5684     yes)
5685         WITH_HELPPACKS=TRUE
5686         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5687         AC_MSG_RESULT([XML (local)])
5688         ;;
5689     *)
5690         AC_MSG_ERROR([Unknown --with-help=$with_help])
5691         ;;
5692     esac
5693 else
5694     AC_MSG_RESULT([no])
5697 AC_MSG_CHECKING([if we need to build the help index tooling])
5698 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5699     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5700     test_clucene=yes
5701     AC_MSG_RESULT([yes])
5702 else
5703     AC_MSG_RESULT([no])
5706 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5707 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5708     if test "$HELP_ONLINE" != TRUE; then
5709         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5710     fi
5711     case "$with_omindex" in
5712     "server")
5713         HELP_OMINDEX_PAGE=TRUE
5714         AC_MSG_RESULT([SERVER])
5715         ;;
5716     "noxap")
5717         AC_MSG_RESULT([NOXAP])
5718         ;;
5719     *)
5720         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5721         ;;
5722     esac
5723 else
5724     AC_MSG_RESULT([no])
5727 AC_MSG_CHECKING([whether to include the XML-help support])
5728 if test "$enable_xmlhelp" = yes; then
5729     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5730     test_clucene=yes
5731     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5732     AC_MSG_RESULT([yes])
5733 else
5734     if test "$with_help" = yes; then
5735         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5736     fi
5737     AC_MSG_RESULT([no])
5740 dnl Test whether to integrate helppacks into the product's installer
5741 AC_MSG_CHECKING([for helppack integration])
5742 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5743     AC_MSG_RESULT([no integration])
5744 else
5745     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5746     AC_MSG_RESULT([integration])
5749 AC_SUBST([ENABLE_HTMLHELP])
5750 AC_SUBST([HELP_OMINDEX_PAGE])
5751 AC_SUBST([HELP_ONLINE])
5752 # WITH_HELPPACKS is used only in configure
5754 dnl ===================================================================
5755 dnl Set up a different compiler to produce tools to run on the build
5756 dnl machine when doing cross-compilation
5757 dnl ===================================================================
5759 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5760 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5761 if test "$cross_compiling" = "yes"; then
5762     AC_MSG_CHECKING([for BUILD platform configuration])
5763     echo
5764     rm -rf CONF-FOR-BUILD config_build.mk
5765     mkdir CONF-FOR-BUILD
5766     # Here must be listed all files needed when running the configure script. In particular, also
5767     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5768     # keep them in the same order as there.
5769     (cd $SRC_ROOT && tar cf - \
5770         config.guess \
5771         bin/get_config_variables \
5772         solenv/bin/getcompver.awk \
5773         solenv/inc/langlist.mk \
5774         download.lst \
5775         config_host.mk.in \
5776         config_host_lang.mk.in \
5777         Makefile.in \
5778         bin/bffvalidator.sh.in \
5779         bin/odfvalidator.sh.in \
5780         bin/officeotron.sh.in \
5781         instsetoo_native/util/openoffice.lst.in \
5782         config_host/*.in \
5783         sysui/desktop/macosx/Info.plist.in \
5784         sysui/desktop/macosx/hardened_runtime.xcent.in \
5785         sysui/desktop/macosx/lo.xcent.in \
5786         .vscode/vs-code-template.code-workspace.in \
5787         solenv/lockfile/autoconf.h.in \
5788         ) \
5789     | (cd CONF-FOR-BUILD && tar xf -)
5790     cp configure CONF-FOR-BUILD
5791     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5792     (
5793     unset COM USING_X11 OS CPUNAME
5794     unset CC CXX SYSBASE CFLAGS
5795     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5796     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5797     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5798     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5799     if test -n "$CC_FOR_BUILD"; then
5800         export CC="$CC_FOR_BUILD"
5801         CC_BASE=`first_arg_basename "$CC"`
5802     fi
5803     if test -n "$CXX_FOR_BUILD"; then
5804         export CXX="$CXX_FOR_BUILD"
5805         CXX_BASE=`first_arg_basename "$CXX"`
5806     fi
5807     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5808     cd CONF-FOR-BUILD
5810     # Handle host configuration, which affects the cross-toolset too
5811     sub_conf_opts=""
5812     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5813     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5814     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5815     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5816     if test -n "$ENABLE_JAVA"; then
5817         case "$_os" in
5818         Android)
5819             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5820             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5821             ;;
5822         *)
5823             if test -z "$with_jdk_home"; then
5824                 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.])
5825             fi
5826             ;;
5827         esac
5828     else
5829         sub_conf_opts="$sub_conf_opts --without-java"
5830     fi
5831     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5832     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5833     test "$with_templates" = "no" -o -z "$WITH_TEMPLATES" && sub_conf_opts="$sub_conf_opts --with-templates=no"
5834     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5835     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5836     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5837     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5838     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5839     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5840     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5841     if test "$_os" = "Emscripten"; then
5842         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5843         if test "${with_main_module+set}" = set; then
5844             sub_conf_opts="$sub_conf_opts --with-main-module=${with_main_module}"
5845         else
5846             sub_conf_opts="$sub_conf_opts --with-main-module=writer"
5847         fi
5848     fi
5849     # windows uses full-internal python and that in turn relies on openssl, so also enable openssl
5850     # when cross-compiling for aarch64, overriding the defaults below
5851     test "${PLATFORMID}" = "windows_aarch64" && sub_conf_opts="$sub_conf_opts --enable-openssl --with-tls=openssl"
5853     # Don't bother having configure look for stuff not needed for the build platform anyway
5854     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5855     sub_conf_defaults=" \
5856         --build="$build_alias" \
5857         --disable-cairo-canvas \
5858         --disable-cups \
5859         --disable-customtarget-components \
5860         --disable-firebird-sdbc \
5861         --disable-gpgmepp \
5862         --disable-gstreamer-1-0 \
5863         --disable-gtk3 \
5864         --disable-gtk4 \
5865         --disable-libcmis \
5866         --disable-mariadb-sdbc \
5867         --disable-nss \
5868         --disable-online-update \
5869         --disable-opencl \
5870         --disable-openssl \
5871         --disable-pdfimport \
5872         --disable-postgresql-sdbc \
5873         --disable-skia \
5874         --disable-xmlhelp \
5875         --enable-dynamic-loading \
5876         --enable-icecream="$enable_icecream" \
5877         --without-doxygen \
5878         --without-tls \
5879         --without-webdav \
5880         --without-x \
5882     # single quotes added for better readability in case of spaces
5883     echo "    Running CONF-FOR-BUILD/configure" \
5884         $sub_conf_defaults \
5885         --with-parallelism="'$with_parallelism'" \
5886         --with-theme="'$with_theme'" \
5887         --with-vendor="'$with_vendor'" \
5888         $sub_conf_opts \
5889         $with_build_platform_configure_options \
5890         --srcdir=$srcdir
5892     ./configure \
5893         $sub_conf_defaults \
5894         --with-parallelism="$with_parallelism" \
5895         --with-theme="$with_theme" \
5896         "--with-vendor=$with_vendor" \
5897         $sub_conf_opts \
5898         $with_build_platform_configure_options \
5899         --srcdir=$srcdir \
5900         2>&1 | sed -e 's/^/    /'
5901     if test [${PIPESTATUS[0]}] -ne 0; then
5902         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5903     fi
5905     # filter permitted build targets
5906     PERMITTED_BUILD_TARGETS="
5907         ARGON2
5908         AVMEDIA
5909         BOOST
5910         BZIP2
5911         CAIRO
5912         CLUCENE
5913         CURL
5914         DBCONNECTIVITY
5915         DESKTOP
5916         DRAGONBOX
5917         DYNLOADING
5918         EPOXY
5919         EXPAT
5920         FROZEN
5921         GLM
5922         GRAPHITE
5923         HARFBUZZ
5924         HELPTOOLS
5925         ICU
5926         LCMS2
5927         LIBJPEG_TURBO
5928         LIBLANGTAG
5929         LibO
5930         LIBFFI
5931         LIBPN
5932         LIBTIFF
5933         LIBWEBP
5934         LIBXML2
5935         LIBXSLT
5936         MDDS
5937         NATIVE
5938         OPENSSL
5939         ORCUS
5940         PYTHON
5941         REPORTBUILDER
5942         SCRIPTING
5943         ZLIB
5944         ZXCVBN
5946     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5947     # newlined lists, to use grep as a filter
5948     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5949     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5950     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5951     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5953     cp config_host.mk ../config_build.mk
5954     cp config_host_lang.mk ../config_build_lang.mk
5955     mv config.log ../config.Build.log
5956     mkdir -p ../config_build
5957     mv config_host/*.h ../config_build
5958     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5960     # all these will get a _FOR_BUILD postfix
5961     DIRECT_FOR_BUILD_SETTINGS="
5962         CC
5963         CPPU_ENV
5964         CXX
5965         ILIB
5966         JAVA_HOME
5967         JAVAIFLAGS
5968         JDK
5969         JDK_SECURITYMANAGER_DISALLOWED
5970         LIBO_BIN_FOLDER
5971         LIBO_LIB_FOLDER
5972         LIBO_URE_LIB_FOLDER
5973         LIBO_URE_MISC_FOLDER
5974         OS
5975         SDKDIRNAME
5976         SYSTEM_LIBXML
5977         SYSTEM_LIBXSLT
5979     # these overwrite host config with build config
5980     OVERWRITING_SETTINGS="
5981         ANT
5982         ANT_HOME
5983         ANT_LIB
5984         JAVA_SOURCE_VER
5985         JAVA_TARGET_VER
5986         JAVACFLAGS
5987         JAVACOMPILER
5988         JAVADOC
5989         JAVADOCISGJDOC
5990         LOCKFILE
5991         SYSTEM_GENBRK
5992         SYSTEM_GENCCODE
5993         SYSTEM_GENCMN
5995     # these need some special handling
5996     EXTRA_HANDLED_SETTINGS="
5997         INSTDIR
5998         INSTROOT
5999         PATH
6000         WORKDIR
6002     OLD_PATH=$PATH
6003     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
6004     BUILD_PATH=$PATH
6005     PATH=$OLD_PATH
6007     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
6008     echo "$line" >>build-config
6010     for V in $DIRECT_FOR_BUILD_SETTINGS; do
6011         VV='$'$V
6012         VV=`eval "echo $VV"`
6013         if test -n "$VV"; then
6014             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
6015             echo "$line" >>build-config
6016         fi
6017     done
6019     for V in $OVERWRITING_SETTINGS; do
6020         VV='$'$V
6021         VV=`eval "echo $VV"`
6022         if test -n "$VV"; then
6023             line=${V}='${'${V}:-$VV'}'
6024             echo "$line" >>build-config
6025         fi
6026     done
6028     for V in INSTDIR INSTROOT WORKDIR; do
6029         VV='$'$V
6030         VV=`eval "echo $VV"`
6031         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
6032         if test -n "$VV"; then
6033             line="${V}_FOR_BUILD='$VV'"
6034             echo "$line" >>build-config
6035         fi
6036     done
6038     )
6039     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
6040     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])
6041     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
6042              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
6044     eval `cat CONF-FOR-BUILD/build-config`
6046     AC_MSG_RESULT([checking for BUILD platform configuration... done])
6048     rm -rf CONF-FOR-BUILD
6049 else
6050     OS_FOR_BUILD="$OS"
6051     CC_FOR_BUILD="$CC"
6052     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
6053     CXX_FOR_BUILD="$CXX"
6054     INSTDIR_FOR_BUILD="$INSTDIR"
6055     INSTROOT_FOR_BUILD="$INSTROOT"
6056     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
6057     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
6058     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
6059     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
6060     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
6061     WORKDIR_FOR_BUILD="$WORKDIR"
6063 AC_SUBST(OS_FOR_BUILD)
6064 AC_SUBST(INSTDIR_FOR_BUILD)
6065 AC_SUBST(INSTROOT_FOR_BUILD)
6066 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
6067 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
6068 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
6069 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
6070 AC_SUBST(SDKDIRNAME_FOR_BUILD)
6071 AC_SUBST(WORKDIR_FOR_BUILD)
6072 AC_SUBST(CC_FOR_BUILD)
6073 AC_SUBST(CXX_FOR_BUILD)
6074 AC_SUBST(CPPU_ENV_FOR_BUILD)
6076 dnl ===================================================================
6077 dnl Check for lockfile deps
6078 dnl ===================================================================
6079 if test -z "$CROSS_COMPILING"; then
6080     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
6081     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
6082     AC_MSG_CHECKING([which lockfile binary to use])
6083     case "$with_system_lockfile" in
6084     yes)
6085         AC_MSG_RESULT([external])
6086         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
6087         ;;
6088     no)
6089         AC_MSG_RESULT([internal])
6090         ;;
6091     *)
6092         if test -x "$with_system_lockfile"; then
6093             LOCKFILE="$with_system_lockfile"
6094         else
6095             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
6096         fi
6097         AC_MSG_RESULT([$with_system_lockfile])
6098         ;;
6099     esac
6102 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
6103     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
6106 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
6107 AC_CHECK_FUNCS([utime utimes])
6108 AC_SUBST(LOCKFILE)
6110 dnl ===================================================================
6111 dnl Check for syslog header
6112 dnl ===================================================================
6113 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
6115 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
6116 dnl ===================================================================
6117 AC_MSG_CHECKING([whether to turn warnings to errors])
6118 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
6119     ENABLE_WERROR="TRUE"
6120     PYTHONWARNINGS="error"
6121     AC_MSG_RESULT([yes])
6122 else
6123     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
6124         ENABLE_WERROR="TRUE"
6125         PYTHONWARNINGS="error"
6126         AC_MSG_RESULT([yes])
6127     else
6128         AC_MSG_RESULT([no])
6129     fi
6131 AC_SUBST(ENABLE_WERROR)
6132 AC_SUBST(PYTHONWARNINGS)
6134 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
6135 dnl ===================================================================
6136 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
6137 if test -z "$enable_assert_always_abort"; then
6138    if test "$ENABLE_DEBUG" = TRUE; then
6139        enable_assert_always_abort=yes
6140    else
6141        enable_assert_always_abort=no
6142    fi
6144 if test "$enable_assert_always_abort" = "yes"; then
6145     ASSERT_ALWAYS_ABORT="TRUE"
6146     AC_MSG_RESULT([yes])
6147 else
6148     ASSERT_ALWAYS_ABORT="FALSE"
6149     AC_MSG_RESULT([no])
6151 AC_SUBST(ASSERT_ALWAYS_ABORT)
6153 # Determine whether to use ooenv for the instdir installation
6154 # ===================================================================
6155 if test $_os != "WINNT" -a $_os != "Darwin"; then
6156     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
6157     if test -z "$enable_ooenv"; then
6158         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
6159             enable_ooenv=yes
6160         else
6161             enable_ooenv=no
6162         fi
6163     fi
6164     if test "$enable_ooenv" = "no"; then
6165         AC_MSG_RESULT([no])
6166     else
6167         ENABLE_OOENV="TRUE"
6168         AC_MSG_RESULT([yes])
6169     fi
6171 AC_SUBST(ENABLE_OOENV)
6173 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
6174     if test "$enable_qt5" = "no"; then
6175         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
6176     else
6177         enable_qt5=yes
6178     fi
6181 if test "$test_kf6" = "yes" -a "$enable_kf6" = "yes"; then
6182     if test "$enable_qt6" = "no"; then
6183         AC_MSG_ERROR([KF6 support depends on QT6, so it conflicts with --disable-qt6])
6184     else
6185         enable_qt6=yes
6186     fi
6190 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
6191 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
6192     AC_MSG_RESULT([yes])
6193     ENABLE_PAGEIN=TRUE
6194     AC_DEFINE(HAVE_FEATURE_PAGEIN)
6195 else
6196     AC_MSG_RESULT([no])
6198 AC_SUBST(ENABLE_PAGEIN)
6200 dnl ===================================================================
6201 dnl check for cups support
6202 dnl ===================================================================
6204 AC_MSG_CHECKING([whether to enable CUPS support])
6205 if test "$test_cups" = yes -a "$enable_cups" != no; then
6206     ENABLE_CUPS=TRUE
6207     AC_MSG_RESULT([yes])
6209     AC_MSG_CHECKING([whether cups support is present])
6210     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
6211     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6212     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6213         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6214     fi
6215 else
6216     AC_MSG_RESULT([no])
6219 AC_SUBST(ENABLE_CUPS)
6221 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.12.0],,system,TRUE)
6223 dnl whether to find & fetch external tarballs?
6224 dnl ===================================================================
6225 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6226    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6227        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6228    else
6229        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6230    fi
6232 if test -z "$TARFILE_LOCATION"; then
6233     if test -d "$SRC_ROOT/src" ; then
6234         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6235         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6236     fi
6237     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6238 else
6239     AbsolutePath "$TARFILE_LOCATION"
6240     PathFormat "${absolute_path}"
6241     TARFILE_LOCATION="${formatted_path_unix}"
6243 AC_SUBST(TARFILE_LOCATION)
6245 AC_MSG_CHECKING([whether we want to fetch tarballs])
6246 if test "$enable_fetch_external" != "no"; then
6247     if test "$with_all_tarballs" = "yes"; then
6248         AC_MSG_RESULT([yes, all of them])
6249         DO_FETCH_TARBALLS="ALL"
6250     else
6251         AC_MSG_RESULT([yes, if we use them])
6252         DO_FETCH_TARBALLS="TRUE"
6253     fi
6254 else
6255     AC_MSG_RESULT([no])
6256     DO_FETCH_TARBALLS=
6258 AC_SUBST(DO_FETCH_TARBALLS)
6260 dnl Test whether to include MySpell dictionaries
6261 dnl ===================================================================
6262 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6263 if test "$with_myspell_dicts" = "yes"; then
6264     AC_MSG_RESULT([yes])
6265     WITH_MYSPELL_DICTS=TRUE
6266     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6267     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6268 else
6269     AC_MSG_RESULT([no])
6270     WITH_MYSPELL_DICTS=
6272 AC_SUBST(WITH_MYSPELL_DICTS)
6274 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6275 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6276     if test "$with_system_dicts" = yes; then
6277         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6278     fi
6279     with_system_dicts=no
6282 AC_MSG_CHECKING([whether to use dicts from external paths])
6283 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6284     AC_MSG_RESULT([yes])
6285     SYSTEM_DICTS=TRUE
6286     AC_MSG_CHECKING([for spelling dictionary directory])
6287     if test -n "$with_external_dict_dir"; then
6288         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6289     else
6290         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6291         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6292             DICT_SYSTEM_DIR=file:///usr/share/myspell
6293         fi
6294     fi
6295     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6296     AC_MSG_CHECKING([for hyphenation patterns directory])
6297     if test -n "$with_external_hyph_dir"; then
6298         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6299     else
6300         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6301     fi
6302     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6303     AC_MSG_CHECKING([for thesaurus directory])
6304     if test -n "$with_external_thes_dir"; then
6305         THES_SYSTEM_DIR=file://$with_external_thes_dir
6306     else
6307         THES_SYSTEM_DIR=file:///usr/share/mythes
6308     fi
6309     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6310 else
6311     AC_MSG_RESULT([no])
6312     SYSTEM_DICTS=
6314 AC_SUBST(SYSTEM_DICTS)
6315 AC_SUBST(DICT_SYSTEM_DIR)
6316 AC_SUBST(HYPH_SYSTEM_DIR)
6317 AC_SUBST(THES_SYSTEM_DIR)
6319 dnl ===================================================================
6320 dnl Precompiled headers.
6321 ENABLE_PCH=""
6322 AC_MSG_CHECKING([whether to enable pch feature])
6323 if test -z "$enable_pch"; then
6324     if test "$_os" = "WINNT"; then
6325         # Enabled by default on Windows.
6326         enable_pch=yes
6327         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6328         if test -z "$enable_ccache" -a "$SCCACHE"; then
6329             CCACHE=""
6330         fi
6331     else
6332         enable_pch=no
6333     fi
6335 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6336     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6338 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6339     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6341 if test "$enable_pch" = "system"; then
6342     ENABLE_PCH="1"
6343     AC_MSG_RESULT([yes (system headers)])
6344 elif test "$enable_pch" = "base"; then
6345     ENABLE_PCH="2"
6346     AC_MSG_RESULT([yes (system and base headers)])
6347 elif test "$enable_pch" = "normal"; then
6348     ENABLE_PCH="3"
6349     AC_MSG_RESULT([yes (normal)])
6350 elif test "$enable_pch" = "full"; then
6351     ENABLE_PCH="4"
6352     AC_MSG_RESULT([yes (full)])
6353 elif test "$enable_pch" = "yes"; then
6354     # Pick a suitable default.
6355     if test "$GCC" = "yes"; then
6356         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6357         # while making the PCHs larger and rebuilds more likely.
6358         ENABLE_PCH="2"
6359         AC_MSG_RESULT([yes (system and base headers)])
6360     else
6361         # With MSVC the highest level makes a significant difference,
6362         # and it was the default when there used to be no PCH levels.
6363         ENABLE_PCH="4"
6364         AC_MSG_RESULT([yes (full)])
6365     fi
6366 elif test "$enable_pch" = "no"; then
6367     AC_MSG_RESULT([no])
6368 else
6369     AC_MSG_ERROR([Unknown value for --enable-pch])
6371 AC_SUBST(ENABLE_PCH)
6372 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6373 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6374     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6375     if test "$CCACHE_BIN" != "not found"; then
6376         AC_MSG_CHECKING([ccache version])
6377         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6378         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6379         AC_MSG_RESULT([$CCACHE_VERSION])
6380         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6381         if test "$CCACHE_NUMVER" -gt "030701"; then
6382             AC_MSG_RESULT([yes])
6383         else
6384             AC_MSG_RESULT([no (not newer than 3.7.1)])
6385             CCACHE_DEPEND_MODE=
6386         fi
6387     fi
6390 PCH_INSTANTIATE_TEMPLATES=
6391 if test -n "$ENABLE_PCH"; then
6392     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6393     save_CFLAGS=$CFLAGS
6394     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6395     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6396     CFLAGS=$save_CFLAGS
6397     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6398         AC_MSG_RESULT(yes)
6399     else
6400         AC_MSG_RESULT(no)
6401     fi
6403 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6405 BUILDING_PCH_WITH_OBJ=
6406 if test -n "$ENABLE_PCH"; then
6407     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6408     save_CFLAGS=$CFLAGS
6409     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6410     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6411     CFLAGS=$save_CFLAGS
6412     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6413         AC_MSG_RESULT(yes)
6414     else
6415         AC_MSG_RESULT(no)
6416     fi
6418 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6420 PCH_CODEGEN=
6421 PCH_NO_CODEGEN=
6422 fpch_prefix=
6423 if test "$COM" = MSC; then
6424     fpch_prefix="-Xclang "
6426 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6427     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6428     save_CFLAGS=$CFLAGS
6429     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6430     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6431         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6432     CFLAGS=$save_CFLAGS
6433     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6434     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6435         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6436     CFLAGS=$save_CFLAGS
6437     if test -n "$PCH_CODEGEN"; then
6438         AC_MSG_RESULT(yes)
6439     else
6440         AC_MSG_RESULT(no)
6441     fi
6443 AC_SUBST(PCH_CODEGEN)
6444 AC_SUBST(PCH_NO_CODEGEN)
6445 PCH_DEBUGINFO=
6446 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6447     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6448     save_CFLAGS=$CFLAGS
6449     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6450     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6451     CFLAGS=$save_CFLAGS
6452     if test -n "$PCH_DEBUGINFO"; then
6453         AC_MSG_RESULT(yes)
6454     else
6455         AC_MSG_RESULT(no)
6456     fi
6458 AC_SUBST(PCH_DEBUGINFO)
6460 TAB=`printf '\t'`
6462 AC_MSG_CHECKING([the GNU Make version])
6463 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6464 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6465 if test "$_make_longver" -ge "040000"; then
6466     AC_MSG_RESULT([$GNUMAKE $_make_version])
6467 else
6468     AC_MSG_ERROR([failed ($GNUMAKE version >= 4.0 needed)])
6471 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6472 STALE_MAKE=
6473 if test "$_make_ver_check" = ""; then
6474    STALE_MAKE=TRUE
6477 HAVE_LD_HASH_STYLE=FALSE
6478 WITH_LINKER_HASH_STYLE=
6479 AC_MSG_CHECKING([for --hash-style gcc linker support])
6480 if test "$GCC" = "yes"; then
6481     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6482         hash_styles="gnu sysv"
6483     elif test "$with_linker_hash_style" = "no"; then
6484         hash_styles=
6485     else
6486         hash_styles="$with_linker_hash_style"
6487     fi
6489     for hash_style in $hash_styles; do
6490         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6491         hash_style_ldflags_save=$LDFLAGS
6492         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6494         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6495             [
6496 #include <stdio.h>
6497             ],[
6498 printf ("");
6499             ])],
6500             [
6501                   HAVE_LD_HASH_STYLE=TRUE
6502                   WITH_LINKER_HASH_STYLE=$hash_style
6503             ],
6504             [HAVE_LD_HASH_STYLE=FALSE],
6505             [HAVE_LD_HASH_STYLE=FALSE])
6506         LDFLAGS=$hash_style_ldflags_save
6507     done
6509     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6510         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6511     else
6512         AC_MSG_RESULT( no )
6513     fi
6514     LDFLAGS=$hash_style_ldflags_save
6515 else
6516     AC_MSG_RESULT( no )
6518 AC_SUBST(HAVE_LD_HASH_STYLE)
6519 AC_SUBST(WITH_LINKER_HASH_STYLE)
6521 dnl ===================================================================
6522 dnl Check whether there's a Perl version available.
6523 dnl ===================================================================
6524 if test -z "$with_perl_home"; then
6525     AC_PATH_PROG(PERL, perl)
6526 else
6527     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6528     _perl_path="$with_perl_home/bin/perl"
6529     if test -x "$_perl_path"; then
6530         PERL=$_perl_path
6531     else
6532         AC_MSG_ERROR([$_perl_path not found])
6533     fi
6536 dnl ===================================================================
6537 dnl Testing for Perl version 5 or greater.
6538 dnl $] is the Perl version variable, it is returned as an integer
6539 dnl ===================================================================
6540 if test "$PERL"; then
6541     AC_MSG_CHECKING([the Perl version])
6542     ${PERL} -e "exit($]);"
6543     _perl_version=$?
6544     if test "$_perl_version" -lt 5; then
6545         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6546     fi
6547     AC_MSG_RESULT([Perl $_perl_version])
6548 else
6549     AC_MSG_ERROR([Perl not found, install Perl 5])
6552 dnl ===================================================================
6553 dnl Testing for required Perl modules
6554 dnl ===================================================================
6556 AC_MSG_CHECKING([for required Perl modules])
6557 perl_use_string="use Cwd ; use Digest::MD5"
6558 if test "$_os" = "WINNT"; then
6559     if test -n "$PKGFORMAT"; then
6560         for i in $PKGFORMAT; do
6561             case "$i" in
6562             msi)
6563                 # for getting fonts versions to use in MSI
6564                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6565                 ;;
6566             esac
6567         done
6568     fi
6570 if test "$with_system_hsqldb" = "yes"; then
6571     perl_use_string="$perl_use_string ; use Archive::Zip"
6573 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6574     # OpenSSL needs that to build
6575     perl_use_string="$perl_use_string ; use FindBin"
6577 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6578     AC_MSG_RESULT([all modules found])
6579 else
6580     AC_MSG_RESULT([failed to find some modules])
6581     # Find out which modules are missing.
6582     for i in $perl_use_string; do
6583         if test "$i" != "use" -a "$i" != ";"; then
6584             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6585                 missing_perl_modules="$missing_perl_modules $i"
6586             fi
6587         fi
6588     done
6589     AC_MSG_ERROR([
6590     The missing Perl modules are: $missing_perl_modules
6591     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6594 dnl ===================================================================
6595 dnl Check for pkg-config
6596 dnl ===================================================================
6597 if test "$_os" != "WINNT"; then
6598     PKG_PROG_PKG_CONFIG
6600 AC_SUBST(PKG_CONFIG)
6601 AC_SUBST(PKG_CONFIG_PATH)
6602 AC_SUBST(PKG_CONFIG_LIBDIR)
6604 if test "$_os" != "WINNT"; then
6606     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6607     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6608     # explicitly. Or put /path/to/compiler in PATH yourself.
6610     toolprefix=gcc
6611     if test "$COM_IS_CLANG" = "TRUE"; then
6612         toolprefix=llvm
6613     fi
6614     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6615     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6616     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6617     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6618     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6619     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6621 AC_SUBST(AR)
6622 AC_SUBST(NM)
6623 AC_SUBST(OBJDUMP)
6624 AC_SUBST(RANLIB)
6625 AC_SUBST(READELF)
6626 AC_SUBST(STRIP)
6628 dnl ===================================================================
6629 dnl pkg-config checks on macOS
6630 dnl ===================================================================
6632 if test $_os = Darwin; then
6633     AC_MSG_CHECKING([for bogus pkg-config])
6634     if test -n "$PKG_CONFIG"; then
6635         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6636             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6637         else
6638             if test "$enable_bogus_pkg_config" = "yes"; then
6639                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6640             else
6641                 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.])
6642             fi
6643         fi
6644     else
6645         AC_MSG_RESULT([no, good])
6646     fi
6649 find_csc()
6651     # Return value: $csctest
6653     unset csctest
6655     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client" "InstallPath"
6656     if test -n "$regvalue"; then
6657         csctest=$regvalue
6658         return
6659     fi
6662 find_al()
6664     # Return value: $altest
6666     unset altest
6668     # We need this check to detect 4.6.1 or above.
6669     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6670         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools" "InstallationFolder"
6671         PathFormat "$regvalue"
6672         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6673             altest=$regvalue
6674             return
6675         fi
6676     done
6678     reg_list_values_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows"
6679     for x in $reglist; do
6680         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools" "InstallationFolder"
6681         PathFormat "$regvalue"
6682         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6683             altest=$regvalue
6684             return
6685         fi
6686     done
6689 find_dotnetsdk()
6691     unset frametest
6693     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6; do
6694         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver" "KitsInstallationFolder"
6695         if test -n "$regvalue"; then
6696             frametest=$regvalue
6697             return
6698         fi
6699     done
6700     AC_MSG_ERROR([The Windows NET SDK (minimum 4.6) not found, check the installation])
6703 find_winsdk_version()
6705     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6706     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6708     unset winsdktest winsdkbinsubdir winsdklibsubdir
6710     case "$1" in
6711     8.0|8.0A)
6712         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots" "KitsRoot"
6713         if test -n "$regvalue"; then
6714             winsdktest=$regvalue
6715             winsdklibsubdir=win8
6716             return
6717         fi
6718         ;;
6719     8.1|8.1A)
6720         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots" "KitsRoot81"
6721         if test -n "$regvalue"; then
6722             winsdktest=$regvalue
6723             winsdklibsubdir=winv6.3
6724             return
6725         fi
6726         ;;
6727     10.0)
6728         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}" "InstallationFolder"
6729         if test -n "$regvalue"; then
6730             winsdktest=$regvalue
6731             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}" "ProductVersion"
6732             if test -n "$regvalue"; then
6733                 winsdkbinsubdir="$regvalue".0
6734                 winsdklibsubdir=$winsdkbinsubdir
6735                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6736                 PathFormat "$tmppath"
6737                 local tmppath_unix=$formatted_path_unix
6738                 # test exist the SDK path
6739                 if test ! -d "$tmppath_unix"; then
6740                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6741                 fi
6742             fi
6743             return
6744         fi
6745         ;;
6746     esac
6749 find_winsdk()
6751     # Return value: From find_winsdk_version
6753     unset winsdktest
6755     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6756         find_winsdk_version $ver
6757         if test -n "$winsdktest"; then
6758             return
6759         fi
6760     done
6763 find_msms()
6765     # Return value: $msmdir
6766     local version="$1"
6768     AC_MSG_CHECKING([for MSVC $version merge modules directory])
6769     local my_msm_file="Microsoft_VC${version}_CRT_x86.msm"
6770     local my_msm_dir
6772     echo "$as_me:$LINENO: searching for $my_msm_file" >&5
6774     msmdir=
6775     case "$VCVER" in
6776     16.0 | 17.0 | 17.10)
6777         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6778             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6779             echo "$as_me:$LINENO: looking for $my_msm_dir${my_msm_file}])" >&5
6780             if test -e "$my_msm_dir${my_msm_file}"; then
6781                 msmdir=$my_msm_dir
6782             fi
6783         done
6784         ;;
6785     esac
6787     if test -n "$msmdir"; then
6788         msmdir=`cygpath -m "$msmdir"`
6789         AC_MSG_RESULT([$msmdir])
6790     else
6791         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6792             AC_MSG_FAILURE([not found])
6793         else
6794             AC_MSG_WARN([not found (check config.log)])
6795             add_warning "MSM ${my_msm_file} not found"
6796         fi
6797     fi
6800 find_msvc_x64_dlls()
6802     # Return value: $msvcdllpath, $msvcdlls
6804     AC_MSG_CHECKING([for MSVC x64 DLL path])
6806     dnl Order crtver in increasing order. Then check the directories returned by
6807     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6808     dnl the result will be the highest CRT version found in the highest directory.
6810     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6811     case "$VCVER" in
6812     16.0 | 17.0 | 17.10)
6813         for crtver in 141 142 143; do
6814             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6815                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6816                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6817                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6818                 fi
6819             done
6820         done
6821         ;;
6822     esac
6823     AC_MSG_RESULT([$msvcdllpath])
6824     AC_MSG_CHECKING([for MSVC x64 DLLs])
6825     msvcdlls="msvcp140.dll vcruntime140.dll"
6826     for dll in $msvcdlls; do
6827         if ! test -f "$msvcdllpath/$dll"; then
6828             AC_MSG_FAILURE([missing $dll])
6829         fi
6830     done
6831     AC_MSG_RESULT([found all ($msvcdlls)])
6834 dnl =========================================
6835 dnl Check for the Windows  SDK.
6836 dnl =========================================
6837 if test "$_os" = "WINNT"; then
6838     AC_MSG_CHECKING([for Windows SDK])
6839     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6840         find_winsdk
6841         WINDOWS_SDK_HOME=$winsdktest
6843         # normalize if found
6844         if test -n "$WINDOWS_SDK_HOME"; then
6845             PathFormat "$WINDOWS_SDK_HOME"
6846             WINDOWS_SDK_HOME=$formatted_path_unix
6847         fi
6849         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6850         # The variable also contains the Windows SDK version
6851         echo $WINDOWS_SDK_LIB_SUBDIR
6852         IFS='.' read -r SDK_v1 SDK_v2 SDK_v3 SDK_v4 <<< "$WINDOWS_SDK_LIB_SUBDIR"
6853         # Assuming maximum of 5 digits for each part and ignoring last part
6854         SDK_NORMALIZED_VER=$((SDK_v1 * 10000000000 + SDK_v2 * 100000 + SDK_v3))
6855         # 10.0.20348.0 is the minimum required version
6856         if test "$SDK_NORMALIZED_VER" -lt 100000020348; then
6857             AC_MSG_ERROR([You need Windows SDK greater than or equal 10.0.20348.0])
6858         fi
6859     fi
6861     if test -n "$WINDOWS_SDK_HOME"; then
6862         # Remove a possible trailing backslash
6863         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6865         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6866              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6867              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6868             have_windows_sdk_headers=yes
6869         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6870              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6871              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6872             have_windows_sdk_headers=yes
6873         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6874              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6875              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6876             have_windows_sdk_headers=yes
6877         else
6878             have_windows_sdk_headers=no
6879         fi
6881         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6882             have_windows_sdk_libs=yes
6883         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6884             have_windows_sdk_libs=yes
6885         else
6886             have_windows_sdk_libs=no
6887         fi
6889         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6890             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6891 the  Windows SDK are installed.])
6892         fi
6893     fi
6895     if test -z "$WINDOWS_SDK_HOME"; then
6896         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6897     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6898         WINDOWS_SDK_VERSION=80
6899         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6900     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6901         WINDOWS_SDK_VERSION=81
6902         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6903     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6904         WINDOWS_SDK_VERSION=10
6905         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6906     else
6907         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6908     fi
6909     PathFormat "$WINDOWS_SDK_HOME"
6910     WINDOWS_SDK_HOME="$formatted_path"
6911     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6912     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6913         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6914         if test -d "$WINDOWS_SDK_HOME_unix/include/um"; then
6915             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6916         elif test -d "$WINDOWS_SDK_HOME_unix/Include/$winsdklibsubdir/um"; then
6917             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6918         fi
6919     fi
6921     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6922     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6923     dnl but not in v8.0), so allow this to be overridden with a
6924     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6925     dnl and configuration error if no WiLangId.vbs is found would arguably be
6926     dnl better, but I do not know under which conditions exactly it is needed by
6927     dnl msiglobal.pm:
6928     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6929         WINDOWS_SDK_WILANGID_unix=$WINDOWS_SDK_HOME_unix/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6930         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6931             WINDOWS_SDK_WILANGID_unix="${WINDOWS_SDK_HOME_unix}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6932         fi
6933         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6934             WINDOWS_SDK_WILANGID_unix=$WINDOWS_SDK_HOME_unix/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6935         fi
6936         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6937             WINDOWS_SDK_WILANGID_unix="C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs"
6938         fi
6939         PathFormat "$WINDOWS_SDK_WILANGID_unix"
6940         WINDOWS_SDK_WILANGID="$formatted_path"
6941     fi
6942     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6943         if test -n "$with_package_format" -a "$with_package_format" != no; then
6944             for i in "$with_package_format"; do
6945                 if test "$i" = "msi"; then
6946                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6947                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6948                     fi
6949                 fi
6950             done
6951         fi
6952     fi
6954 AC_SUBST(WINDOWS_SDK_HOME)
6955 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6956 AC_SUBST(WINDOWS_SDK_VERSION)
6957 AC_SUBST(WINDOWS_SDK_WILANGID)
6959 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6960     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6961     dnl dir, it also determines that dir's path w/o an arch segment if any,
6962     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6963     AC_MSG_CHECKING([for midl.exe])
6965     find_winsdk
6966     PathFormat "$winsdktest"
6967     winsdktest_unix="$formatted_path_unix"
6969     if test -n "$winsdkbinsubdir" \
6970         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6971     then
6972         MIDL_PATH=$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6973         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin/$winsdkbinsubdir
6974     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6975         MIDL_PATH=$winsdktest_unix/Bin/$WIN_BUILD_ARCH
6976         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6977     elif test -f "$winsdktest_unix/Bin/midl.exe"; then
6978         MIDL_PATH=$winsdktest_unix/Bin
6979         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6980     fi
6981     PathFormat "$MIDL_PATH"
6982     if test ! -f "$formatted_path_unix/midl.exe"; then
6983         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6984     else
6985         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6986     fi
6988     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6989     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6991     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6992          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6993          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6994          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6995     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6996          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6997          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
6998          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
6999     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
7000          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
7001          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
7002          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
7003     else
7004         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
7005     fi
7007     dnl Check csc.exe
7008     AC_MSG_CHECKING([for csc.exe])
7009     find_csc
7010     PathFormat "$csctest"
7011     csctest_unix="$formatted_path_unix"
7012     if test -f "$csctest_unix/csc.exe"; then
7013         CSC_PATH="$csctest"
7014     fi
7015     if test ! -f "$csctest_unix/csc.exe"; then
7016         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
7017     else
7018         AC_MSG_RESULT([$CSC_PATH/csc.exe])
7019     fi
7021     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
7023     dnl Check al.exe
7024     AC_MSG_CHECKING([for al.exe])
7025     if test -n "$winsdkbinsubdir" \
7026         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
7027     then
7028         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
7029     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/al.exe"; then
7030         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
7031     elif test -f "$winsdktest_unix/Bin/al.exe"; then
7032         AL_PATH="$winsdktest/Bin"
7033     fi
7035     if test -z "$AL_PATH"; then
7036         find_al
7037         PathFormat "$altest"
7038         altest_unix="$formatted_path_unix"
7039         if test -f "$altest_unix/bin/al.exe"; then
7040             AL_PATH="$altest/bin"
7041         elif test -f "$altest_unix/al.exe"; then
7042             AL_PATH="$altest"
7043         fi
7044     fi
7045     PathFormat "$AL_PATH"
7046     if test ! -f "$formatted_path_unix/al.exe"; then
7047         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
7048     else
7049         AC_MSG_RESULT([$AL_PATH/al.exe])
7050     fi
7052     AL_PATH=`win_short_path_for_make "$AL_PATH"`
7054     dnl Check mscoree.lib / .NET Framework dir
7055     AC_MSG_CHECKING(.NET Framework)
7056     find_dotnetsdk
7057     PathFormat "$frametest"
7058     frametest="$formatted_path_unix"
7059     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
7060         DOTNET_FRAMEWORK_HOME="$frametest"
7061     else
7062         if test -f "$winsdktest_unix/lib/mscoree.lib" -o -f "$winsdktest_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
7063             DOTNET_FRAMEWORK_HOME="$winsdktest"
7064         fi
7065     fi
7066     PathFormat "$DOTNET_FRAMEWORK_HOME"
7067     if test ! -f "$formatted_path_unix/lib/mscoree.lib" -a ! -f "$formatted_path_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib" -a ! -f "$formatted_path_unix/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
7068         AC_MSG_ERROR([mscoree.lib not found])
7069     fi
7070     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
7072     PathFormat "$MIDL_PATH"
7073     MIDL_PATH="$formatted_path"
7075     PathFormat "$AL_PATH"
7076     AL_PATH="$formatted_path"
7078     PathFormat "$DOTNET_FRAMEWORK_HOME"
7079     DOTNET_FRAMEWORK_HOME="$formatted_path"
7081     PathFormat "$CSC_PATH"
7082     CSC_PATH="$formatted_path"
7085 dnl ===================================================================
7086 dnl Testing for C++ compiler and version...
7087 dnl ===================================================================
7089 if test "$_os" != "WINNT"; then
7090     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that (and avoid -O2 during AC_PROG_CXX,
7091     # see AC_PROG_CC above):
7092     save_CXXFLAGS=$CXXFLAGS
7093     CXXFLAGS=-g
7094     AC_PROG_CXX
7095     CXXFLAGS=$save_CXXFLAGS
7096     if test -z "$CXX_BASE"; then
7097         CXX_BASE=`first_arg_basename "$CXX"`
7098     fi
7101 dnl check for GNU C++ compiler version
7102 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
7103     AC_MSG_CHECKING([the GNU C++ compiler version])
7105     _gpp_version=`$CXX -dumpversion`
7106     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
7108     if test "$_gpp_majmin" -lt "700"; then
7109         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
7110     else
7111         AC_MSG_RESULT([ok (g++ $_gpp_version)])
7112     fi
7114     dnl see https://issuetracker.google.com/issues/36962819
7115         glibcxx_threads=no
7116         AC_LANG_PUSH([C++])
7117         AC_REQUIRE_CPP
7118         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
7119         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
7120             #include <bits/c++config.h>]],[[
7121             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
7122             && !defined(_GLIBCXX__PTHREADS) \
7123             && !defined(_GLIBCXX_HAS_GTHREADS)
7124             choke me
7125             #endif
7126         ]])],[AC_MSG_RESULT([yes])
7127         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
7128         AC_LANG_POP([C++])
7129         if test $glibcxx_threads = yes; then
7130             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
7131         fi
7133 AC_SUBST(BOOST_CXXFLAGS)
7136 # prefx CXX with ccache if needed
7138 if test "$CCACHE" != ""; then
7139     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
7140     AC_LANG_PUSH([C++])
7141     save_CXXFLAGS=$CXXFLAGS
7142     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
7143     # msvc does not fail on unknown options, check stdout
7144     if test "$COM" = MSC; then
7145         CXXFLAGS="$CXXFLAGS -nologo"
7146     fi
7147     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
7148     ac_cxx_werror_flag=yes
7149     dnl an empty program will do, we're checking the compiler flags
7150     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
7151                       [use_ccache=yes], [use_ccache=no])
7152     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
7153         AC_MSG_RESULT([yes])
7154     else
7155         CXX="$CCACHE $CXX"
7156         CXX_BASE="ccache $CXX_BASE"
7157         AC_MSG_RESULT([no])
7158     fi
7159     CXXFLAGS=$save_CXXFLAGS
7160     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
7161     AC_LANG_POP([C++])
7164 dnl ===================================================================
7165 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
7166 dnl ===================================================================
7168 if test "$_os" != "WINNT"; then
7169     AC_PROG_CXXCPP
7171     dnl Check whether there's a C pre-processor.
7172     AC_PROG_CPP
7176 dnl ===================================================================
7177 dnl Find integral type sizes and alignments
7178 dnl ===================================================================
7180 if test "$_os" != "WINNT"; then
7182     AC_CHECK_SIZEOF(long)
7183     AC_CHECK_SIZEOF(short)
7184     AC_CHECK_SIZEOF(int)
7185     AC_CHECK_SIZEOF(long long)
7186     AC_CHECK_SIZEOF(double)
7187     AC_CHECK_SIZEOF(void*)
7188     AC_CHECK_SIZEOF(size_t)
7190     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
7191     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7192     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7193     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7194     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7195     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7197     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7198     m4_pattern_allow([AC_CHECK_ALIGNOF])
7199     m4_ifdef([AC_CHECK_ALIGNOF],
7200         [
7201             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7202             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7203             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7204             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7205         ],
7206         [
7207             case "$_os-$host_cpu" in
7208             Linux-i686)
7209                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7210                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7211                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7212                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7213                 ;;
7214             Linux-x86_64)
7215                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7216                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7217                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7218                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7219                 ;;
7220             *)
7221                 if test -z "$ac_cv_alignof_short" -o \
7222                         -z "$ac_cv_alignof_int" -o \
7223                         -z "$ac_cv_alignof_long" -o \
7224                         -z "$ac_cv_alignof_double"; then
7225                    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.])
7226                 fi
7227                 ;;
7228             esac
7229         ])
7231     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7232     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7233     if test $ac_cv_sizeof_long -eq 8; then
7234         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7235     elif test $ac_cv_sizeof_double -eq 8; then
7236         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7237     else
7238         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7239     fi
7241     dnl Check for large file support
7242     AC_SYS_LARGEFILE
7243     if test -n "$ac_cv_sys_largefile_opts"  -a "$ac_cv_sys_largefile_opts" != "none needed" -a "$ac_cv_sys_largefile_opts" != "support not detected"; then
7244         LFS_CFLAGS="$ac_cv_sys_largefile_opts"
7245     elif test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7246         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7247     fi
7248     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7249         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7250     fi
7251 else
7252     # Hardcode for MSVC
7253     SAL_TYPES_SIZEOFSHORT=2
7254     SAL_TYPES_SIZEOFINT=4
7255     SAL_TYPES_SIZEOFLONG=4
7256     SAL_TYPES_SIZEOFLONGLONG=8
7257     if test $WIN_HOST_BITS -eq 32; then
7258         SAL_TYPES_SIZEOFPOINTER=4
7259         SIZEOF_SIZE_T=4
7260     else
7261         SAL_TYPES_SIZEOFPOINTER=8
7262         SIZEOF_SIZE_T=8
7263     fi
7264     SAL_TYPES_ALIGNMENT2=2
7265     SAL_TYPES_ALIGNMENT4=4
7266     SAL_TYPES_ALIGNMENT8=8
7267     LFS_CFLAGS=''
7269 AC_SUBST(LFS_CFLAGS)
7270 AC_SUBST(SIZEOF_SIZE_T)
7272 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7273 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7274 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7275 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7276 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7277 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7278 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7279 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7281 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7282 AC_MSG_CHECKING([whether jumbo sheets are supported])
7283 if test "$_os" != "WINNT"; then
7284     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7285         AC_MSG_RESULT([yes])
7286         ENABLE_JUMBO_SHEETS=TRUE
7287         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7288     else
7289         AC_MSG_RESULT([no])
7290     fi
7291 else
7292     if test $WIN_HOST_BITS -gt 32; then
7293         # 64bit windows is special-cased for tools::Long because long is 32bit
7294         AC_MSG_RESULT([yes])
7295         ENABLE_JUMBO_SHEETS=TRUE
7296         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7297     else
7298         AC_MSG_RESULT([no])
7299     fi
7301 AC_SUBST(ENABLE_JUMBO_SHEETS)
7303 dnl ===================================================================
7304 dnl Check whether to enable runtime optimizations
7305 dnl ===================================================================
7306 ENABLE_RUNTIME_OPTIMIZATIONS=
7307 AC_MSG_CHECKING([whether to enable runtime optimizations])
7308 if test -z "$enable_runtime_optimizations"; then
7309     for i in $CC; do
7310         case $i in
7311         -fsanitize=*)
7312             enable_runtime_optimizations=no
7313             break
7314             ;;
7315         esac
7316     done
7318 if test "$enable_runtime_optimizations" != no; then
7319     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7320     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7321     AC_MSG_RESULT([yes])
7322 else
7323     AC_MSG_RESULT([no])
7325 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7327 dnl ===================================================================
7328 dnl Check if valgrind headers are available
7329 dnl ===================================================================
7330 ENABLE_VALGRIND=
7331 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7332     prev_cppflags=$CPPFLAGS
7333     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7334     # or where does it come from?
7335     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7336     AC_CHECK_HEADER([valgrind/valgrind.h],
7337         [ENABLE_VALGRIND=TRUE])
7338     CPPFLAGS=$prev_cppflags
7340 AC_SUBST([ENABLE_VALGRIND])
7341 if test -z "$ENABLE_VALGRIND"; then
7342     if test "$with_valgrind" = yes; then
7343         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7344     fi
7345     VALGRIND_CFLAGS=
7347 AC_SUBST([VALGRIND_CFLAGS])
7350 dnl ===================================================================
7351 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7352 dnl ===================================================================
7354 # We need at least the sys/sdt.h include header.
7355 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7356 if test "$SDT_H_FOUND" = "TRUE"; then
7357     # Found sys/sdt.h header, now make sure the c++ compiler works.
7358     # Old g++ versions had problems with probes in constructors/destructors.
7359     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7360     AC_LANG_PUSH([C++])
7361     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7362     #include <sys/sdt.h>
7363     class ProbeClass
7364     {
7365     private:
7366       int& ref;
7367       const char *name;
7369     public:
7370       ProbeClass(int& v, const char *n) : ref(v), name(n)
7371       {
7372         DTRACE_PROBE2(_test_, cons, name, ref);
7373       }
7375       void method(int min)
7376       {
7377         DTRACE_PROBE3(_test_, meth, name, ref, min);
7378         ref -= min;
7379       }
7381       ~ProbeClass()
7382       {
7383         DTRACE_PROBE2(_test_, dest, name, ref);
7384       }
7385     };
7386     ]],[[
7387     int i = 64;
7388     DTRACE_PROBE1(_test_, call, i);
7389     ProbeClass inst = ProbeClass(i, "call");
7390     inst.method(24);
7391     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7392           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7393     AC_LANG_POP([C++])
7395 AC_CONFIG_HEADERS([config_host/config_probes.h])
7397 dnl ===================================================================
7398 dnl GCC features
7399 dnl ===================================================================
7400 HAVE_GCC_STACK_CLASH_PROTECTION=
7401 HARDENING_CFLAGS=
7402 HARDENING_OPT_CFLAGS=
7403 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7404     AC_MSG_CHECKING([whether $CC_BASE supports -grecord-gcc-switches])
7405     save_CFLAGS=$CFLAGS
7406     CFLAGS="$CFLAGS -Werror -grecord-gcc-switches"
7407     AC_LINK_IFELSE(
7408         [AC_LANG_PROGRAM(, [[return 0;]])],
7409         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -grecord-gcc-switches"],
7410         [AC_MSG_RESULT([no])])
7411     CFLAGS=$save_CFLAGS
7413     AC_MSG_CHECKING([whether $CC_BASE supports -D_FORTIFY_SOURCE=2])
7414     save_CFLAGS=$CFLAGS
7415     CFLAGS="$CFLAGS -Werror -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"
7416     if test "$ENABLE_OPTIMIZED" = TRUE; then
7417         CFLAGS="$CFLAGS -O2"
7418     fi
7419     AC_LINK_IFELSE(
7420         [AC_LANG_PROGRAM([[#include <string.h>]], [[return 0;]])],
7421         [AC_MSG_RESULT([yes]); HARDENING_OPT_CFLAGS="$HARDENING_OPT_CFLAGS -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"],
7422         [AC_MSG_RESULT([no])])
7423     CFLAGS=$save_CFLAGS
7425     AC_MSG_CHECKING([whether $CC_BASE supports -D_GLIBCXX_ASSERTIONS])
7426     save_CFLAGS=$CFLAGS
7427     CFLAGS="$CFLAGS -Werror -Wp,-D_GLIBCXX_ASSERTIONS"
7428     AC_LINK_IFELSE(
7429         [AC_LANG_PROGRAM(, [[return 0;]])],
7430         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"],
7431         [AC_MSG_RESULT([no])])
7432     CFLAGS=$save_CFLAGS
7434     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7435     save_CFLAGS=$CFLAGS
7436     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7437     AC_LINK_IFELSE(
7438         [AC_LANG_PROGRAM(, [[return 0;]])],
7439         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE; HARDENING_CFLAGS="$HARDENING_CFLAGS -fstack-clash-protection"],
7440         [AC_MSG_RESULT([no])])
7441     CFLAGS=$save_CFLAGS
7443     AC_MSG_CHECKING([whether $CC_BASE supports -fcf-protection])
7444     save_CFLAGS=$CFLAGS
7445     CFLAGS="$CFLAGS -Werror -fcf-protection"
7446     AC_LINK_IFELSE(
7447         [AC_LANG_PROGRAM(, [[return 0;]])],
7448         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -fcf-protection"],
7449         [AC_MSG_RESULT([no])])
7450     CFLAGS=$save_CFLAGS
7452     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7453     save_CFLAGS=$CFLAGS
7454     CFLAGS="$CFLAGS -Werror -mno-avx"
7455     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7456     CFLAGS=$save_CFLAGS
7457     if test "$HAVE_GCC_AVX" = "TRUE"; then
7458         AC_MSG_RESULT([yes])
7459     else
7460         AC_MSG_RESULT([no])
7461     fi
7463     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7464     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7465     int v = 0;
7466     if (__sync_add_and_fetch(&v, 1) != 1 ||
7467         __sync_sub_and_fetch(&v, 1) != 0)
7468         return 1;
7469     __sync_synchronize();
7470     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7471         v != 1)
7472         return 1;
7473     return 0;
7474 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7475     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7476         AC_MSG_RESULT([yes])
7477         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7478     else
7479         AC_MSG_RESULT([no])
7480     fi
7482     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7483     AC_LANG_PUSH([C++])
7484     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7485             #include <cstddef>
7486             #include <cxxabi.h>
7487             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7488         ])], [
7489             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7490             AC_MSG_RESULT([yes])
7491         ], [AC_MSG_RESULT([no])])
7492     AC_LANG_POP([C++])
7494     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7495     AC_LANG_PUSH([C++])
7496     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7497             #include <cstddef>
7498             #include <cxxabi.h>
7499             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7500         ])], [
7501             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7502             AC_MSG_RESULT([yes])
7503         ], [AC_MSG_RESULT([no])])
7504     AC_LANG_POP([C++])
7506     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7507     AC_LANG_PUSH([C++])
7508     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7509             #include <cxxabi.h>
7510             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7511         ])], [
7512             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7513             AC_MSG_RESULT([yes])
7514         ], [AC_MSG_RESULT([no])])
7515     AC_LANG_POP([C++])
7517     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7518     AC_LANG_PUSH([C++])
7519     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7520             #include <cstddef>
7521             #include <cxxabi.h>
7522             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7523         ])], [
7524             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7525             AC_MSG_RESULT([yes])
7526         ], [AC_MSG_RESULT([no])])
7527     AC_LANG_POP([C++])
7529     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7530     AC_LANG_PUSH([C++])
7531     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7532             #include <cstddef>
7533             #include <cxxabi.h>
7534             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7535         ])], [
7536             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7537             AC_MSG_RESULT([yes])
7538         ], [AC_MSG_RESULT([no])])
7539     AC_LANG_POP([C++])
7541     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7542     AC_LANG_PUSH([C++])
7543     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7544             #include <cxxabi.h>
7545             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7546         ])], [
7547             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7548             AC_MSG_RESULT([yes])
7549         ], [AC_MSG_RESULT([no])])
7550     AC_LANG_POP([C++])
7552     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7553     AC_LANG_PUSH([C++])
7554     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7555             #include <cxxabi.h>
7556             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7557         ])], [
7558             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7559             AC_MSG_RESULT([yes])
7560         ], [AC_MSG_RESULT([no])])
7561     AC_LANG_POP([C++])
7563     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7564     AC_LANG_PUSH([C++])
7565     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7566             #include <cxxabi.h>
7567             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7568         ])], [
7569             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7570             AC_MSG_RESULT([yes])
7571         ], [AC_MSG_RESULT([no])])
7572     AC_LANG_POP([C++])
7574     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7575     AC_LANG_PUSH([C++])
7576     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7577             #include <cstddef>
7578             #include <cxxabi.h>
7579             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7580         ])], [
7581             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7582             AC_MSG_RESULT([yes])
7583         ], [AC_MSG_RESULT([no])])
7584     AC_LANG_POP([C++])
7586     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7587     AC_LANG_PUSH([C++])
7588     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7589             #include <cstddef>
7590             #include <cxxabi.h>
7591             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7592         ])], [
7593             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7594             AC_MSG_RESULT([yes])
7595         ], [AC_MSG_RESULT([no])])
7596     AC_LANG_POP([C++])
7599 AC_SUBST(HAVE_GCC_AVX)
7600 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7601 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7602 AC_SUBST(HARDENING_CFLAGS)
7603 AC_SUBST(HARDENING_OPT_CFLAGS)
7605 dnl ===================================================================
7606 dnl Identify the C++ library
7607 dnl ===================================================================
7609 AC_MSG_CHECKING([what the C++ library is])
7610 HAVE_LIBSTDCPP=
7611 HAVE_LIBCPP=
7612 AC_LANG_PUSH([C++])
7613 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7614 #include <utility>
7615 #ifndef __GLIBCXX__
7616 foo bar
7617 #endif
7618 ]])],
7619     [CPP_LIBRARY=GLIBCXX
7620      cpp_library_name="GNU libstdc++"
7621      HAVE_LIBSTDCPP=TRUE
7622     ],
7623     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7624 #include <utility>
7625 #ifndef _LIBCPP_VERSION
7626 foo bar
7627 #endif
7628 ]])],
7629     [CPP_LIBRARY=LIBCPP
7630      cpp_library_name="LLVM libc++"
7631      AC_DEFINE([HAVE_LIBCPP])
7632      HAVE_LIBCPP=TRUE
7633     ],
7634     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7635 #include <utility>
7636 #ifndef _MSC_VER
7637 foo bar
7638 #endif
7639 ]])],
7640     [CPP_LIBRARY=MSVCRT
7641      cpp_library_name="Microsoft"
7642     ],
7643     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7644 AC_MSG_RESULT([$cpp_library_name])
7645 AC_LANG_POP([C++])
7646 AC_SUBST([HAVE_LIBSTDCPP])
7647 AC_SUBST([HAVE_LIBCPP])
7649 if test -z "${LIBCPP_DEBUG+x}" -a -z "$CROSS_COMPILING" -a -n "$HAVE_LIBCPP" -a -n "$ENABLE_DBGUTIL"
7650 then
7651     # Libc++ has two levels of debug mode, assertions mode enabled with -D_LIBCPP_DEBUG=0,
7652     # and actual debug mode enabled with -D_LIBCPP_DEBUG=1 (and starting with LLVM15
7653     # assertions mode will be separate and controlled by -D_LIBCPP_ENABLE_ASSERTIONS=1,
7654     # although there will be backwards compatibility).
7655     # Debug mode is supported by libc++ only if built for it, e.g. Mac libc++ isn't,
7656     # and there would be undefined references to debug functions.
7657     # Moreover std::to_string() has a bug (https://reviews.llvm.org/D125184).
7658     # So check if debug mode can be used and disable or downgrade it to assertions
7659     # if needed.
7660     AC_MSG_CHECKING([if libc++ has a usable debug mode])
7661     AC_LANG_PUSH([C++])
7662     libcpp_debug_links=
7663     AC_LINK_IFELSE([AC_LANG_SOURCE([[
7664 #define _LIBCPP_DEBUG 0 // only assertions
7665 #include <vector>
7666 int main()
7668     std::vector<int> v;
7669     v.push_back( 1 );
7670     return v[ 3 ];
7672 ]])], [libcpp_debug_links=1])
7673     if test -n "$libcpp_debug_links"; then
7674         # we can use at least assertions, check if debug mode works
7675         AC_RUN_IFELSE([AC_LANG_SOURCE([[
7676 #define _LIBCPP_DEBUG 1 // debug mode
7677 #include <string>
7678 #include <vector>
7679 int foo(const std::vector<int>& v) { return *v.begin(); }
7680 int main()
7682     std::vector<int> v;
7683     v.push_back( 1 );
7684     std::string s = "xxxxxxxxxxxxxxxxxxxxxxxxx" + std::to_string(10);
7685     return (foo(v) + s.size()) != 0 ? 0 : 1;
7687 ]])],
7688         [AC_MSG_RESULT(yes)
7689          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=1
7690         ],
7691         [AC_MSG_RESULT(no, using only assertions)
7692          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=0
7693         ]
7694         )
7695     else
7696         AC_MSG_RESULT(no)
7697     fi
7698     AC_LANG_POP([C++])
7700 AC_SUBST([LIBCPP_DEBUG])
7702 dnl ===================================================================
7703 dnl Check for gperf
7704 dnl ===================================================================
7705 AC_PATH_PROG(GPERF, gperf)
7706 if test -z "$GPERF"; then
7707     AC_MSG_ERROR([gperf not found but needed. Install it.])
7709 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7710     GPERF=`cygpath -m $GPERF`
7712 AC_MSG_CHECKING([whether gperf is new enough])
7713 my_gperf_ver1=$($GPERF --version | head -n 1)
7714 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7715 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7716 if test "$my_gperf_ver3" -ge 301; then
7717     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7718 else
7719     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7721 AC_SUBST(GPERF)
7723 dnl ===================================================================
7724 dnl Check for system libcmis
7725 dnl ===================================================================
7726 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.6 >= 0.6.1],enabled)
7728 dnl ===================================================================
7729 dnl C++11
7730 dnl ===================================================================
7732 if test -z "${CXXFLAGS_CXX11+x}"; then
7733     AC_MSG_CHECKING([whether $CXX_BASE supports C++20])
7734     if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7735         if test "$with_latest_c__" = yes; then
7736             CXXFLAGS_CXX11=-std:c++latest
7737         else
7738             CXXFLAGS_CXX11=-std:c++20
7739         fi
7740         CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus,preprocessor"
7741     elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7742         my_flags='-std=c++20 -std=c++2a'
7743         if test "$with_latest_c__" = yes; then
7744             my_flags="-std=c++26 -std=c++2c -std=c++23 -std=c++2b $my_flags"
7745         fi
7746         for flag in $my_flags; do
7747             if test "$COM" = MSC; then
7748                 flag="-Xclang $flag"
7749             fi
7750             save_CXXFLAGS=$CXXFLAGS
7751             CXXFLAGS="$CXXFLAGS $flag -Werror"
7752             AC_LANG_PUSH([C++])
7753             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7754                 #include <algorithm>
7755                 #include <functional>
7756                 #include <vector>
7758                 void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7759                     std::sort(v.begin(), v.end(), fn);
7760                 }
7761                 ]])],[CXXFLAGS_CXX11=$flag])
7762             AC_LANG_POP([C++])
7763             CXXFLAGS=$save_CXXFLAGS
7764             if test -n "$CXXFLAGS_CXX11"; then
7765                 break
7766             fi
7767         done
7768     fi
7769     if test -n "$CXXFLAGS_CXX11"; then
7770         AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7771     else
7772         AC_MSG_ERROR(no)
7773     fi
7775 AC_SUBST(CXXFLAGS_CXX11)
7777 if test "$GCC" = "yes"; then
7778     save_CXXFLAGS=$CXXFLAGS
7779     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7780     CHECK_L_ATOMIC
7781     CXXFLAGS=$save_CXXFLAGS
7782     AC_SUBST(ATOMIC_LIB)
7785 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7786 save_CXXFLAGS=$CXXFLAGS
7787 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7788 AC_LANG_PUSH([C++])
7790 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7791 #include <stddef.h>
7793 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7795 namespace
7797         struct b
7798         {
7799                 int i;
7800                 int j;
7801         };
7803 ]], [[
7804 struct a
7806         int i;
7807         int j;
7809 a thinga[]={{0,0}, {1,1}};
7810 b thingb[]={{0,0}, {1,1}};
7811 size_t i = sizeof(sal_n_array_size(thinga));
7812 size_t j = sizeof(sal_n_array_size(thingb));
7813 return !(i != 0 && j != 0);
7815     ], [ AC_MSG_RESULT(yes) ],
7816     [ AC_MSG_ERROR(no)])
7817 AC_LANG_POP([C++])
7818 CXXFLAGS=$save_CXXFLAGS
7820 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7821 if test "$GCC" = yes; then
7822     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7823     AC_LANG_PUSH([C++])
7824     save_CXXFLAGS=$CXXFLAGS
7825     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7826     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7827     CXXFLAGS=$save_CXXFLAGS
7828     AC_LANG_POP([C++])
7829     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7830         AC_MSG_RESULT([yes])
7831     else
7832         AC_MSG_RESULT([no])
7833     fi
7835 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7837 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7838 AC_LANG_PUSH([C++])
7839 save_CXXFLAGS=$CXXFLAGS
7840 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7841 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7842         #include <algorithm>
7843         #include <initializer_list>
7844         #include <vector>
7845         template<typename T> class S {
7846         private:
7847             std::vector<T> v_;
7848         public:
7849             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7850         };
7851         constinit S<int> s{3, 2, 1};
7852     ])], [
7853         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7854         AC_MSG_RESULT([yes])
7855     ], [AC_MSG_RESULT([no])])
7856 CXXFLAGS=$save_CXXFLAGS
7857 AC_LANG_POP([C++])
7859 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7860 AC_LANG_PUSH([C++])
7861 save_CXXFLAGS=$CXXFLAGS
7862 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7863 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7864         struct S1 { S1(S1 &&); };
7865         struct S2: S1 {};
7866         S1 f(S2 s) { return s; }
7867     ])], [
7868         AC_DEFINE([HAVE_P1155R3],[1])
7869         AC_MSG_RESULT([yes])
7870     ], [AC_MSG_RESULT([no])])
7871 CXXFLAGS=$save_CXXFLAGS
7872 AC_LANG_POP([C++])
7874 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7875 HAVE_CXX20_ATOMIC_REF=
7876 AC_LANG_PUSH([C++])
7877 save_CXXFLAGS=$CXXFLAGS
7878 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7879 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7880         #include <atomic>
7881         int x;
7882         std::atomic_ref<int> y(x);
7883     ])], [
7884         HAVE_CXX20_ATOMIC_REF=TRUE
7885         AC_MSG_RESULT([yes])
7886     ], [AC_MSG_RESULT([no])])
7887 CXXFLAGS=$save_CXXFLAGS
7888 AC_LANG_POP([C++])
7889 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7891 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7892 dnl which is included in -Wextra anyway):
7893 HAVE_WDEPRECATED_COPY_DTOR=
7894 if test "$GCC" = yes; then
7895     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7896     AC_LANG_PUSH([C++])
7897     save_CXXFLAGS=$CXXFLAGS
7898     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7899     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7900             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7901             AC_MSG_RESULT([yes])
7902         ], [AC_MSG_RESULT([no])])
7903     CXXFLAGS=$save_CXXFLAGS
7904     AC_LANG_POP([C++])
7906 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7908 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7909 dnl uninitialized warning for code like
7911 dnl   OString f();
7912 dnl   boost::optional<OString> * g(bool b) {
7913 dnl       boost::optional<OString> o;
7914 dnl       if (b) o = f();
7915 dnl       return new boost::optional<OString>(o);
7916 dnl   }
7918 dnl (as is e.g. present, in a slightly more elaborate form, in
7919 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7920 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7921 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7922 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7923     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7924     AC_LANG_PUSH([C++])
7925     save_CXXFLAGS=$CXXFLAGS
7926     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7927     if test "$ENABLE_OPTIMIZED" = TRUE; then
7928         CXXFLAGS="$CXXFLAGS -O2"
7929     else
7930         CXXFLAGS="$CXXFLAGS -O0"
7931     fi
7932     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7933             #include <new>
7934             void f1(int);
7935             struct S1 {
7936                 ~S1() { f1(n); }
7937                 int n = 0;
7938             };
7939             struct S2 {
7940                 S2() {}
7941                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7942                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7943                 void set(S1 s) {
7944                     new (stg) S1(s);
7945                     init = true;
7946                 }
7947                 bool init = false;
7948                 char stg[sizeof (S1)];
7949             } ;
7950             S1 f2();
7951             S2 * f3(bool b) {
7952                 S2 o;
7953                 if (b) o.set(f2());
7954                 return new S2(o);
7955             }
7956         ]])], [AC_MSG_RESULT([no])], [
7957             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7958             AC_MSG_RESULT([yes])
7959         ])
7960     CXXFLAGS=$save_CXXFLAGS
7961     AC_LANG_POP([C++])
7963 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7965 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7966 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7967 dnl hits us e.g. with GCC 10 and --enable-optimized at
7969 dnl   In file included from include/rtl/string.hxx:49,
7970 dnl                    from include/rtl/ustring.hxx:43,
7971 dnl                    from include/osl/file.hxx:35,
7972 dnl                    from include/codemaker/global.hxx:28,
7973 dnl                    from include/codemaker/options.hxx:23,
7974 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7975 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7976 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,
7977 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,
7978 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,
7979 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7980 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7981 dnl      78 |         memcpy( buffer, data, length );
7982 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7983 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7984 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7985     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7986     AC_LANG_PUSH([C++])
7987     save_CXXFLAGS=$CXXFLAGS
7988     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7989     if test "$ENABLE_OPTIMIZED" = TRUE; then
7990         CXXFLAGS="$CXXFLAGS -O2"
7991     else
7992         CXXFLAGS="$CXXFLAGS -O0"
7993     fi
7994     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7995     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7996             void fill(char const * begin, char const * end, char c);
7997             struct q {
7998                 char ids[4];
7999                 char username[6];
8000             };
8001             void test(q & c) {
8002                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
8003                 __builtin_strncpy(c.username, "root", sizeof(c.username));
8004             }
8005         ]])], [AC_MSG_RESULT([no])], [
8006             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
8007             AC_MSG_RESULT([yes])
8008         ])
8009     CXXFLAGS=$save_CXXFLAGS
8010     AC_LANG_POP([C++])
8012 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
8014 HAVE_DLLEXPORTINLINES=
8015 if test "$_os" = "WINNT"; then
8016     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
8017     AC_LANG_PUSH([C++])
8018     save_CXXFLAGS=$CXXFLAGS
8019     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
8020     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
8021             HAVE_DLLEXPORTINLINES=TRUE
8022             AC_MSG_RESULT([yes])
8023         ], [AC_MSG_RESULT([no])])
8024     CXXFLAGS=$save_CXXFLAGS
8025     AC_LANG_POP([C++])
8027 AC_SUBST([HAVE_DLLEXPORTINLINES])
8029 dnl ===================================================================
8030 dnl CPU Intrinsics support - SSE, AVX
8031 dnl ===================================================================
8033 CXXFLAGS_INTRINSICS_SSE2=
8034 CXXFLAGS_INTRINSICS_SSSE3=
8035 CXXFLAGS_INTRINSICS_SSE41=
8036 CXXFLAGS_INTRINSICS_SSE42=
8037 CXXFLAGS_INTRINSICS_AVX=
8038 CXXFLAGS_INTRINSICS_AVX2=
8039 CXXFLAGS_INTRINSICS_AVX512=
8040 CXXFLAGS_INTRINSICS_AVX512F=
8041 CXXFLAGS_INTRINSICS_F16C=
8042 CXXFLAGS_INTRINSICS_FMA=
8044 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
8045     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
8046     flag_sse2=-msse2
8047     flag_ssse3=-mssse3
8048     flag_sse41=-msse4.1
8049     flag_sse42=-msse4.2
8050     flag_avx=-mavx
8051     flag_avx2=-mavx2
8052     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
8053     flag_avx512f=-mavx512f
8054     flag_f16c=-mf16c
8055     flag_fma=-mfma
8056 else
8057     # With MSVC using -arch is in fact not necessary for being able
8058     # to use CPU intrinsics, code using AVX512F intrinsics will compile
8059     # even if compiled with -arch:AVX, the -arch option really only affects
8060     # instructions generated for C/C++ code.
8061     # So use the matching same (or lower) -arch options, but only in order
8062     # to generate the best matching instructions for the C++ code surrounding
8063     # the intrinsics.
8064     # SSE2 is the default for x86/x64, so no need to specify the option.
8065     flag_sse2=
8066     # No specific options for these, use the next lower.
8067     flag_ssse3="$flag_sse2"
8068     flag_sse41="$flag_sse2"
8069     flag_sse42="$flag_sse2"
8070     flag_avx=-arch:AVX
8071     flag_avx2=-arch:AVX2
8072     flag_avx512=-arch:AVX512
8073     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
8074     flag_avx512f=-arch:AVX2
8075     # No MSVC options for these.
8076     flag_f16c="$flag_sse2"
8077     flag_fma="$flag_sse2"
8080 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
8081 AC_LANG_PUSH([C++])
8082 save_CXXFLAGS=$CXXFLAGS
8083 CXXFLAGS="$CXXFLAGS $flag_sse2"
8084 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8085     #include <emmintrin.h>
8086     int main () {
8087         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8088         c = _mm_xor_si128 (a, b);
8089         return 0;
8090     }
8091     ])],
8092     [can_compile_sse2=yes],
8093     [can_compile_sse2=no])
8094 AC_LANG_POP([C++])
8095 CXXFLAGS=$save_CXXFLAGS
8096 AC_MSG_RESULT([${can_compile_sse2}])
8097 if test "${can_compile_sse2}" = "yes" ; then
8098     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
8101 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
8102 AC_LANG_PUSH([C++])
8103 save_CXXFLAGS=$CXXFLAGS
8104 CXXFLAGS="$CXXFLAGS $flag_ssse3"
8105 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8106     #include <tmmintrin.h>
8107     int main () {
8108         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8109         c = _mm_maddubs_epi16 (a, b);
8110         return 0;
8111     }
8112     ])],
8113     [can_compile_ssse3=yes],
8114     [can_compile_ssse3=no])
8115 AC_LANG_POP([C++])
8116 CXXFLAGS=$save_CXXFLAGS
8117 AC_MSG_RESULT([${can_compile_ssse3}])
8118 if test "${can_compile_ssse3}" = "yes" ; then
8119     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
8122 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
8123 AC_LANG_PUSH([C++])
8124 save_CXXFLAGS=$CXXFLAGS
8125 CXXFLAGS="$CXXFLAGS $flag_sse41"
8126 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8127     #include <smmintrin.h>
8128     int main () {
8129         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8130         c = _mm_cmpeq_epi64 (a, b);
8131         return 0;
8132     }
8133     ])],
8134     [can_compile_sse41=yes],
8135     [can_compile_sse41=no])
8136 AC_LANG_POP([C++])
8137 CXXFLAGS=$save_CXXFLAGS
8138 AC_MSG_RESULT([${can_compile_sse41}])
8139 if test "${can_compile_sse41}" = "yes" ; then
8140     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
8143 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
8144 AC_LANG_PUSH([C++])
8145 save_CXXFLAGS=$CXXFLAGS
8146 CXXFLAGS="$CXXFLAGS $flag_sse42"
8147 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8148     #include <nmmintrin.h>
8149     int main () {
8150         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8151         c = _mm_cmpgt_epi64 (a, b);
8152         return 0;
8153     }
8154     ])],
8155     [can_compile_sse42=yes],
8156     [can_compile_sse42=no])
8157 AC_LANG_POP([C++])
8158 CXXFLAGS=$save_CXXFLAGS
8159 AC_MSG_RESULT([${can_compile_sse42}])
8160 if test "${can_compile_sse42}" = "yes" ; then
8161     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
8164 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
8165 AC_LANG_PUSH([C++])
8166 save_CXXFLAGS=$CXXFLAGS
8167 CXXFLAGS="$CXXFLAGS $flag_avx"
8168 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8169     #include <immintrin.h>
8170     int main () {
8171         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
8172         c = _mm256_xor_ps(a, b);
8173         return 0;
8174     }
8175     ])],
8176     [can_compile_avx=yes],
8177     [can_compile_avx=no])
8178 AC_LANG_POP([C++])
8179 CXXFLAGS=$save_CXXFLAGS
8180 AC_MSG_RESULT([${can_compile_avx}])
8181 if test "${can_compile_avx}" = "yes" ; then
8182     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
8185 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
8186 AC_LANG_PUSH([C++])
8187 save_CXXFLAGS=$CXXFLAGS
8188 CXXFLAGS="$CXXFLAGS $flag_avx2"
8189 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8190     #include <immintrin.h>
8191     int main () {
8192         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
8193         c = _mm256_maddubs_epi16(a, b);
8194         return 0;
8195     }
8196     ])],
8197     [can_compile_avx2=yes],
8198     [can_compile_avx2=no])
8199 AC_LANG_POP([C++])
8200 CXXFLAGS=$save_CXXFLAGS
8201 AC_MSG_RESULT([${can_compile_avx2}])
8202 if test "${can_compile_avx2}" = "yes" ; then
8203     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
8206 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
8207 AC_LANG_PUSH([C++])
8208 save_CXXFLAGS=$CXXFLAGS
8209 CXXFLAGS="$CXXFLAGS $flag_avx512"
8210 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8211     #include <immintrin.h>
8212     int main () {
8213         __m512i a = _mm512_loadu_si512(0);
8214         __m512d v1 = _mm512_load_pd(0);
8215         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
8216         __m512d v2 = _mm512_abs_pd(v1);
8217         return 0;
8218     }
8219     ])],
8220     [can_compile_avx512=yes],
8221     [can_compile_avx512=no])
8222 AC_LANG_POP([C++])
8223 CXXFLAGS=$save_CXXFLAGS
8224 AC_MSG_RESULT([${can_compile_avx512}])
8225 if test "${can_compile_avx512}" = "yes" ; then
8226     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
8227     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
8230 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
8231 AC_LANG_PUSH([C++])
8232 save_CXXFLAGS=$CXXFLAGS
8233 CXXFLAGS="$CXXFLAGS $flag_f16c"
8234 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8235     #include <immintrin.h>
8236     int main () {
8237         __m128i a = _mm_set1_epi32 (0);
8238         __m128 c;
8239         c = _mm_cvtph_ps(a);
8240         return 0;
8241     }
8242     ])],
8243     [can_compile_f16c=yes],
8244     [can_compile_f16c=no])
8245 AC_LANG_POP([C++])
8246 CXXFLAGS=$save_CXXFLAGS
8247 AC_MSG_RESULT([${can_compile_f16c}])
8248 if test "${can_compile_f16c}" = "yes" ; then
8249     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8252 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8253 AC_LANG_PUSH([C++])
8254 save_CXXFLAGS=$CXXFLAGS
8255 CXXFLAGS="$CXXFLAGS $flag_fma"
8256 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8257     #include <immintrin.h>
8258     int main () {
8259         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
8260         d = _mm256_fmadd_ps(a, b, c);
8261         return 0;
8262     }
8263     ])],
8264     [can_compile_fma=yes],
8265     [can_compile_fma=no])
8266 AC_LANG_POP([C++])
8267 CXXFLAGS=$save_CXXFLAGS
8268 AC_MSG_RESULT([${can_compile_fma}])
8269 if test "${can_compile_fma}" = "yes" ; then
8270     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8273 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8274 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8275 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8276 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8277 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8278 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8279 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8280 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8281 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8282 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8284 dnl ===================================================================
8285 dnl system stl sanity tests
8286 dnl ===================================================================
8287 if test "$_os" != "WINNT"; then
8289     AC_LANG_PUSH([C++])
8291     save_CPPFLAGS="$CPPFLAGS"
8292     if test -n "$MACOSX_SDK_PATH"; then
8293         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8294     fi
8296     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8297     # only.
8298     if test "$CPP_LIBRARY" = GLIBCXX; then
8299         dnl gcc#19664, gcc#22482, rhbz#162935
8300         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8301         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8302         AC_MSG_RESULT([$stlvisok])
8303         if test "$stlvisok" = "no"; then
8304             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8305         fi
8306     fi
8308     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8309     # when we don't make any dynamic libraries?
8310     if test "$DISABLE_DYNLOADING" = ""; then
8311         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8312         cat > conftestlib1.cc <<_ACEOF
8313 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8314 struct S2: S1<int> { virtual ~S2(); };
8315 S2::~S2() {}
8316 _ACEOF
8317         cat > conftestlib2.cc <<_ACEOF
8318 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8319 struct S2: S1<int> { virtual ~S2(); };
8320 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8321 _ACEOF
8322         gccvisinlineshiddenok=yes
8323         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8324             gccvisinlineshiddenok=no
8325         else
8326             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8327             dnl known to not work with -z defs (unsetting which makes the test
8328             dnl moot, though):
8329             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8330             if test "$COM_IS_CLANG" = TRUE; then
8331                 for i in $CXX $CXXFLAGS; do
8332                     case $i in
8333                     -fsanitize=*)
8334                         my_linkflagsnoundefs=
8335                         break
8336                         ;;
8337                     esac
8338                 done
8339             fi
8340             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8341                 gccvisinlineshiddenok=no
8342             fi
8343         fi
8345         rm -fr libconftest*
8346         AC_MSG_RESULT([$gccvisinlineshiddenok])
8347         if test "$gccvisinlineshiddenok" = "no"; then
8348             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8349         fi
8350     fi
8352    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8353     cat >visibility.cxx <<_ACEOF
8354 #pragma GCC visibility push(hidden)
8355 struct __attribute__ ((visibility ("default"))) TestStruct {
8356   static void Init();
8358 __attribute__ ((visibility ("default"))) void TestFunc() {
8359   TestStruct::Init();
8361 _ACEOF
8362     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8363         gccvisbroken=yes
8364     else
8365         case "$host_cpu" in
8366         i?86|x86_64)
8367             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8368                 gccvisbroken=no
8369             else
8370                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8371                     gccvisbroken=no
8372                 else
8373                     gccvisbroken=yes
8374                 fi
8375             fi
8376             ;;
8377         *)
8378             gccvisbroken=no
8379             ;;
8380         esac
8381     fi
8382     rm -f visibility.s visibility.cxx
8384     AC_MSG_RESULT([$gccvisbroken])
8385     if test "$gccvisbroken" = "yes"; then
8386         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8387     fi
8389     CPPFLAGS="$save_CPPFLAGS"
8391     AC_MSG_CHECKING([if CET endbranch is recognized])
8392 cat > endbr.s <<_ACEOF
8393 endbr32
8394 _ACEOF
8395     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8396     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8397         AC_MSG_RESULT([yes])
8398         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8399     else
8400         AC_MSG_RESULT([no])
8401     fi
8402     rm -f endbr.s endbr.o
8403     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8405     AC_LANG_POP([C++])
8408 dnl ===================================================================
8409 dnl  Clang++ tests
8410 dnl ===================================================================
8412 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8413 if test "$GCC" = "yes"; then
8414     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8415     AC_LANG_PUSH([C++])
8416     save_CXXFLAGS=$CXXFLAGS
8417     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8418     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8419     CXXFLAGS=$save_CXXFLAGS
8420     AC_LANG_POP([C++])
8421     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8422         AC_MSG_RESULT([yes])
8423     else
8424         AC_MSG_RESULT([no])
8425     fi
8427 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8429 dnl ===================================================================
8430 dnl Compiler plugins
8431 dnl ===================================================================
8433 COMPILER_PLUGINS=
8434 # currently only Clang
8436 if test "$COM_IS_CLANG" != "TRUE"; then
8437     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8438         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8439         enable_compiler_plugins=no
8440     fi
8443 COMPILER_PLUGINS_COM_IS_CLANG=
8444 if test "$COM_IS_CLANG" = "TRUE"; then
8445     if test -n "$enable_compiler_plugins"; then
8446         compiler_plugins="$enable_compiler_plugins"
8447     elif test -n "$ENABLE_DBGUTIL"; then
8448         compiler_plugins=test
8449     else
8450         compiler_plugins=no
8451     fi
8452     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8453         if test "$CLANGVER" -lt 120001; then
8454             if test "$compiler_plugins" = yes; then
8455                 AC_MSG_ERROR(
8456                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8457             else
8458                 compiler_plugins=no
8459             fi
8460         fi
8461     fi
8462     if test "$compiler_plugins" != "no"; then
8463         dnl The prefix where Clang resides, override to where Clang resides if
8464         dnl using a source build:
8465         if test -z "$CLANGDIR"; then
8466             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8467         fi
8468         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8469         if test -z "$COMPILER_PLUGINS_CXX"; then
8470             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8471         fi
8472         clangbindir=$CLANGDIR/bin
8473         if test "$build_os" = "cygwin"; then
8474             clangbindir=$(cygpath -u "$clangbindir")
8475         fi
8476         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8477         if test -n "$LLVM_CONFIG"; then
8478             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8479             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8480             if test -z "$CLANGLIBDIR"; then
8481                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8482             fi
8483             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8484             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8485             if $LLVM_CONFIG --src-root >/dev/null 2>&1; then
8486                 clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8487                 if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8488                     COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8489                 fi
8490             fi
8491             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8492             clangobjdir=$($LLVM_CONFIG --obj-root)
8493             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8494                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8495             fi
8496         fi
8497         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8498         AC_LANG_PUSH([C++])
8499         save_CXX=$CXX
8500         save_CXXCPP=$CXXCPP
8501         save_CPPFLAGS=$CPPFLAGS
8502         save_CXXFLAGS=$CXXFLAGS
8503         save_LDFLAGS=$LDFLAGS
8504         save_LIBS=$LIBS
8505         CXX=$COMPILER_PLUGINS_CXX
8506         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8507         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8508         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8509         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8510             [COMPILER_PLUGINS=TRUE],
8511             [
8512             if test "$compiler_plugins" = "yes"; then
8513                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8514             else
8515                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8516                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8517             fi
8518             ])
8519         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8520         dnl comment in compilerplugins/Makefile-clang.mk:
8521         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8522             LDFLAGS=""
8523             AC_MSG_CHECKING([for clang libraries to use])
8524             if test -z "$CLANGTOOLLIBS"; then
8525                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8526                 AC_LINK_IFELSE([
8527                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8528                         [[ clang::FullSourceLoc().dump(); ]])
8529                 ],[CLANGTOOLLIBS="$LIBS"],[])
8530             fi
8531             dnl If the above check for the combined -lclang-cpp failed, fall back to a hand-curated
8532             dnl list of individual -lclang* (but note that that list can become outdated over time,
8533             dnl see e.g. the since-reverted 5078591de9a0e65ca560a4f1913e90dfe95f66bf "CLANGTOOLLIBS
8534             dnl needs to include -lclangSupport now"):
8535             if test -z "$CLANGTOOLLIBS"; then
8536                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8537  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8538                 AC_LINK_IFELSE([
8539                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8540                         [[ clang::FullSourceLoc().dump(); ]])
8541                 ],[CLANGTOOLLIBS="$LIBS"],[])
8542             fi
8543             AC_MSG_RESULT([$CLANGTOOLLIBS])
8544             if test -z "$CLANGTOOLLIBS"; then
8545                 if test "$compiler_plugins" = "yes"; then
8546                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8547                 else
8548                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8549                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8550                 fi
8551                 COMPILER_PLUGINS=
8552             fi
8553             if test -n "$COMPILER_PLUGINS"; then
8554                 if test -z "$CLANGSYSINCLUDE"; then
8555                     if test -n "$LLVM_CONFIG"; then
8556                         # Path to the clang system headers (no idea if there's a better way to get it).
8557                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8558                     fi
8559                 fi
8560             fi
8561         fi
8562         CXX=$save_CXX
8563         CXXCPP=$save_CXXCPP
8564         CPPFLAGS=$save_CPPFLAGS
8565         CXXFLAGS=$save_CXXFLAGS
8566         LDFLAGS=$save_LDFLAGS
8567         LIBS="$save_LIBS"
8568         AC_LANG_POP([C++])
8570         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8571         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8572             #ifndef __clang__
8573             you lose
8574             #endif
8575             int foo=42;
8576             ]])],
8577             [AC_MSG_RESULT([yes])
8578              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8579             [AC_MSG_RESULT([no])])
8580         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8581     fi
8582 else
8583     if test "$enable_compiler_plugins" = "yes"; then
8584         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8585     fi
8587 COMPILER_PLUGINS_ANALYZER_PCH=
8588 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8589     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8591 AC_SUBST(COMPILER_PLUGINS)
8592 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8593 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8594 AC_SUBST(COMPILER_PLUGINS_CXX)
8595 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8596 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8597 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8598 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8599 AC_SUBST(CLANGDIR)
8600 AC_SUBST(CLANGLIBDIR)
8601 AC_SUBST(CLANGTOOLLIBS)
8602 AC_SUBST(CLANGSYSINCLUDE)
8604 # Plugin to help linker.
8605 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8606 # This makes --enable-lto build with clang work.
8607 AC_SUBST(LD_PLUGIN)
8609 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8610 AC_SUBST(HAVE_POSIX_FALLOCATE)
8612 JITC_PROCESSOR_TYPE=""
8613 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8614     # IBMs JDK needs this...
8615     JITC_PROCESSOR_TYPE=6
8616     export JITC_PROCESSOR_TYPE
8618 AC_SUBST([JITC_PROCESSOR_TYPE])
8620 # Misc Windows Stuff
8621 AC_ARG_WITH(ucrt-dir,
8622     AS_HELP_STRING([--with-ucrt-dir],
8623         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8624         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8625         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8626             Windows6.1-KB2999226-x64.msu
8627             Windows6.1-KB2999226-x86.msu
8628             Windows8.1-KB2999226-x64.msu
8629             Windows8.1-KB2999226-x86.msu
8630             Windows8-RT-KB2999226-x64.msu
8631             Windows8-RT-KB2999226-x86.msu
8632         A zip archive including those files is available from Microsoft site:
8633         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8636 UCRT_REDISTDIR="$with_ucrt_dir"
8637 if test $_os = "WINNT"; then
8638     find_msvc_x64_dlls
8639     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8640     MSVC_DLLS="$msvcdlls"
8641     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8642         with_redist=143
8643     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8644         with_redist=142
8645     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8646         with_redist=141
8647     fi
8648     for i in $PKGFORMAT; do
8649         if test "$i" = msi; then
8650             find_msms "$with_redist"
8651             if test -n "$msmdir"; then
8652                 MSM_PATH=`win_short_path_for_make "$msmdir"`
8653                 SCPDEFS="$SCPDEFS -DWITH_VC_REDIST=$with_redist"
8654             fi
8655             break
8656         fi
8657     done
8659     if test "$UCRT_REDISTDIR" = "no"; then
8660         dnl explicitly disabled
8661         UCRT_REDISTDIR=""
8662     else
8663         PathFormat "$UCRT_REDISTDIR"
8664         UCRT_REDISTDIR="$formatted_path"
8665         UCRT_REDISTDIR_unix="$formatted_path_unix"
8666         if ! test -f "$UCRT_REDISTDIR_unix/Windows6.1-KB2999226-x64.msu" -a \
8667                   -f "$UCRT_REDISTDIR_unix/Windows6.1-KB2999226-x86.msu" -a \
8668                   -f "$UCRT_REDISTDIR_unix/Windows8.1-KB2999226-x64.msu" -a \
8669                   -f "$UCRT_REDISTDIR_unix/Windows8.1-KB2999226-x86.msu" -a \
8670                   -f "$UCRT_REDISTDIR_unix/Windows8-RT-KB2999226-x64.msu" -a \
8671                   -f "$UCRT_REDISTDIR_unix/Windows8-RT-KB2999226-x86.msu"; then
8672             UCRT_REDISTDIR=""
8673             if test -n "$PKGFORMAT"; then
8674                for i in $PKGFORMAT; do
8675                    case "$i" in
8676                    msi)
8677                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8678                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8679                        ;;
8680                    esac
8681                done
8682             fi
8683         fi
8684     fi
8687 AC_SUBST(UCRT_REDISTDIR)
8688 AC_SUBST(MSVC_DLL_PATH)
8689 AC_SUBST(MSVC_DLLS)
8690 AC_SUBST(MSM_PATH)
8693 dnl ===================================================================
8694 dnl Checks for Java
8695 dnl ===================================================================
8696 if test "$ENABLE_JAVA" != ""; then
8698     # Windows-specific tests
8699     if test "$build_os" = "cygwin"; then
8700         if test -z "$with_jdk_home"; then
8701             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8702             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8703             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK" "CurrentVersion"
8704             if test -n "$regvalue"; then
8705                 ver=$regvalue
8706                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver" "JavaHome"
8707                 with_jdk_home=$regvalue
8708             fi
8709             howfound="found automatically"
8710         else
8711             with_jdk_home=`win_short_path_for_make "$with_jdk_home"`
8712             howfound="you passed"
8713         fi
8715         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8716             AC_MSG_ERROR([No JDK found, pass the --with-jdk-home option (or fix the path) pointing to a $WIN_HOST_BITS-bit JDK >= 8])
8717         fi
8718     fi
8720     # 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.
8721     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8722     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8723         with_jdk_home=`/usr/libexec/java_home`
8724     fi
8726     JAVA_HOME=; export JAVA_HOME
8727     if test -z "$with_jdk_home"; then
8728         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8729     else
8730         _java_path="$with_jdk_home/bin/$with_java"
8731         dnl Check if there is a Java interpreter at all.
8732         if test -x "$_java_path"; then
8733             JAVAINTERPRETER=$_java_path
8734         else
8735             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8736         fi
8737     fi
8739     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8740     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8741     dnl loaded by java to run JunitTests:
8742     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8743         shortjdkhome=`cygpath -d "$with_jdk_home"`
8744         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
8745             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8746             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8747         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
8748             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8749             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8750         fi
8752         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8753             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8754         fi
8755         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8756     elif test "$cross_compiling" != "yes"; then
8757         case $CPUNAME in
8758             AARCH64|AXP|X86_64|IA64|POWERPC64|S390X|SPARC64|MIPS64|RISCV64|LOONGARCH64)
8759                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8760                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8761                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8762                 fi
8763                 ;;
8764             *) # assumption: everything else 32-bit
8765                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8766                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8767                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8768                 fi
8769                 ;;
8770         esac
8771     fi
8774 dnl ===================================================================
8775 dnl Checks for JDK.
8776 dnl ===================================================================
8778 # Whether all the complexity here actually is needed any more or not, no idea.
8780 JDK_SECURITYMANAGER_DISALLOWED=
8781 MODULAR_JAVA=
8782 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8783     _gij_longver=0
8784     AC_MSG_CHECKING([the installed JDK])
8785     if test -n "$JAVAINTERPRETER"; then
8786         dnl java -version sends output to stderr!
8787         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8788             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8789         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8790             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8791         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8792             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8793         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8794             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8795         else
8796             JDK=sun
8798             dnl Sun JDK specific tests
8799             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8800             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8802             if test "$_jdk_ver" -lt 10800; then
8803                 AC_MSG_ERROR([JDK is too old, you need at least 8 ($_jdk_ver < 10800)])
8804             fi
8805             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8806             dnl completely removed in some Java version > 18 (see
8807             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8808             if test "$_jdk_ver" -ge 180000; then
8809                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8810             fi
8812             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8813             if test "$_os" = "WINNT"; then
8814                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8815             fi
8816             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8818             dnl Check whether the build Java supports modules
8819             if test "$_jdk_ver" -ge 90000; then
8820                 MODULAR_JAVA=TRUE
8821             else
8822                 AC_MSG_WARN([Modular jars will not be built. They need at least Java 9 ($_jdk_ver < 90000)])
8823                 add_warning "Modular jars will not be built. They need at least Java 9 ($_jdk_ver < 90000)"
8824             fi
8826             # set to limit VM usage for JunitTests
8827             JAVAIFLAGS=-Xmx64M
8828             # set to limit VM usage for javac
8829             JAVACFLAGS=-J-Xmx128M
8830         fi
8831     else
8832         AC_MSG_ERROR([Java not found. You need at least JDK 8])
8833     fi
8834 else
8835     if test -z "$ENABLE_JAVA"; then
8836         dnl Java disabled
8837         JAVA_HOME=
8838         export JAVA_HOME
8839     elif test "$cross_compiling" = "yes"; then
8840         # Just assume compatibility of build and host JDK
8841         JDK=$JDK_FOR_BUILD
8842         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8843     fi
8846 dnl ===================================================================
8847 dnl Checks for javac
8848 dnl ===================================================================
8849 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8850     javacompiler="javac"
8851     : ${JAVA_SOURCE_VER=8}
8852     : ${JAVA_TARGET_VER=8}
8853     if test -z "$with_jdk_home"; then
8854         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8855     else
8856         _javac_path="$with_jdk_home/bin/$javacompiler"
8857         dnl Check if there is a Java compiler at all.
8858         if test -x "$_javac_path"; then
8859             JAVACOMPILER=$_javac_path
8860         fi
8861     fi
8862     if test -z "$JAVACOMPILER"; then
8863         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8864     fi
8865     if test "$build_os" = "cygwin"; then
8866         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8867             JAVACOMPILER="${JAVACOMPILER}.exe"
8868         fi
8869         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8870     fi
8873 dnl ===================================================================
8874 dnl Checks for javadoc
8875 dnl ===================================================================
8876 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8877     if test -z "$with_jdk_home"; then
8878         AC_PATH_PROG(JAVADOC, javadoc)
8879     else
8880         _javadoc_path="$with_jdk_home/bin/javadoc"
8881         dnl Check if there is a javadoc at all.
8882         if test -x "$_javadoc_path"; then
8883             JAVADOC=$_javadoc_path
8884         else
8885             AC_PATH_PROG(JAVADOC, javadoc)
8886         fi
8887     fi
8888     if test -z "$JAVADOC"; then
8889         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8890     fi
8891     if test "$build_os" = "cygwin"; then
8892         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8893             JAVADOC="${JAVADOC}.exe"
8894         fi
8895         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8896     fi
8898     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8899     JAVADOCISGJDOC="yes"
8900     fi
8902 AC_SUBST(JAVADOC)
8903 AC_SUBST(JAVADOCISGJDOC)
8905 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8906     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8907     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8908         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8909            # try to recover first by looking whether we have an alternative
8910            # system as in Debian or newer SuSEs where following /usr/bin/javac
8911            # over /etc/alternatives/javac leads to the right bindir where we
8912            # just need to strip a bit away to get a valid JAVA_HOME
8913            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8914         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8915             # maybe only one level of symlink (e.g. on Mac)
8916             JAVA_HOME=$(readlink $JAVACOMPILER)
8917             if test "$(dirname $JAVA_HOME)" = "."; then
8918                 # we've got no path to trim back
8919                 JAVA_HOME=""
8920             fi
8921         else
8922             # else warn
8923             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8924             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8925             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8926             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8927         fi
8928         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8929         if test "$JAVA_HOME" != "/usr"; then
8930             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8931                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8932                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8933                 dnl Tiger already returns a JDK path...
8934                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8935             else
8936                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8937                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8938                 dnl that checks which version to run
8939                 if test -f "$JAVA_HOME"; then
8940                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8941                 fi
8942             fi
8943         fi
8944     fi
8945     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8947     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8948     if test -z "$JAVA_HOME"; then
8949         if test "x$with_jdk_home" = "x"; then
8950             cat > findhome.java <<_ACEOF
8951 [import java.io.File;
8953 class findhome
8955     public static void main(String args[])
8956     {
8957         String jrelocation = System.getProperty("java.home");
8958         File jre = new File(jrelocation);
8959         System.out.println(jre.getParent());
8960     }
8962 _ACEOF
8963             AC_MSG_CHECKING([if javac works])
8964             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8965             AC_TRY_EVAL(javac_cmd)
8966             if test $? = 0 -a -f ./findhome.class; then
8967                 AC_MSG_RESULT([javac works])
8968             else
8969                 echo "configure: javac test failed" >&5
8970                 cat findhome.java >&5
8971                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8972             fi
8973             AC_MSG_CHECKING([if gij knows its java.home])
8974             JAVA_HOME=`$JAVAINTERPRETER findhome`
8975             if test $? = 0 -a "$JAVA_HOME" != ""; then
8976                 AC_MSG_RESULT([$JAVA_HOME])
8977             else
8978                 echo "configure: java test failed" >&5
8979                 cat findhome.java >&5
8980                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8981             fi
8982             # clean-up after ourselves
8983             rm -f ./findhome.java ./findhome.class
8984         else
8985             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8986         fi
8987     fi
8989     # now check if $JAVA_HOME is really valid
8990     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8991         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8992             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8993             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8994             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
8995             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
8996             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
8997             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
8998         fi
8999     fi
9000     PathFormat "$JAVA_HOME"
9001     JAVA_HOME="$formatted_path"
9004 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
9005     "$_os" != Darwin
9006 then
9007     AC_MSG_CHECKING([for JAWT lib])
9008     if test "$_os" = WINNT; then
9009         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
9010         JAWTLIB=jawt.lib
9011     else
9012         case "$host_cpu" in
9013         arm*)
9014             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
9015             JAVA_ARCH=$my_java_arch
9016             ;;
9017         i*86)
9018             my_java_arch=i386
9019             ;;
9020         m68k)
9021             my_java_arch=m68k
9022             ;;
9023         powerpc)
9024             my_java_arch=ppc
9025             ;;
9026         powerpc64)
9027             my_java_arch=ppc64
9028             ;;
9029         powerpc64le)
9030             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
9031             JAVA_ARCH=$my_java_arch
9032             ;;
9033         sparc64)
9034             my_java_arch=sparcv9
9035             ;;
9036         x86_64)
9037             my_java_arch=amd64
9038             ;;
9039         *)
9040             my_java_arch=$host_cpu
9041             ;;
9042         esac
9043         # This is where JDK9 puts the library
9044         if test -e "$JAVA_HOME/lib/libjawt.so"; then
9045             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
9046         else
9047             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
9048         fi
9049         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
9050     fi
9051     AC_MSG_RESULT([$JAWTLIB])
9053 AC_SUBST(JAWTLIB)
9055 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
9056     case "$host_os" in
9058     cygwin*|wsl*)
9059         JAVAINC="-I$JAVA_HOME/include/win32"
9060         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
9061         ;;
9063     darwin*)
9064         if test -d "$JAVA_HOME/include/darwin"; then
9065             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
9066         else
9067             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
9068         fi
9069         ;;
9071     dragonfly*)
9072         JAVAINC="-I$JAVA_HOME/include"
9073         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9074         ;;
9076     freebsd*)
9077         JAVAINC="-I$JAVA_HOME/include"
9078         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
9079         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
9080         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9081         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9082         ;;
9084     k*bsd*-gnu*)
9085         JAVAINC="-I$JAVA_HOME/include"
9086         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9087         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9088         ;;
9090     linux-gnu*)
9091         JAVAINC="-I$JAVA_HOME/include"
9092         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9093         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9094         ;;
9096     *netbsd*)
9097         JAVAINC="-I$JAVA_HOME/include"
9098         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
9099         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9100        ;;
9102     openbsd*)
9103         JAVAINC="-I$JAVA_HOME/include"
9104         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
9105         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9106         ;;
9108     solaris*)
9109         JAVAINC="-I$JAVA_HOME/include"
9110         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
9111         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9112         ;;
9113     esac
9115 SOLARINC="$SOLARINC $JAVAINC"
9117 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
9118     JAVA_HOME_FOR_BUILD=$JAVA_HOME
9119     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
9120     JDK_FOR_BUILD=$JDK
9121     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
9124 AC_SUBST(JAVACFLAGS)
9125 AC_SUBST(JAVACOMPILER)
9126 AC_SUBST(JAVAINTERPRETER)
9127 AC_SUBST(JAVAIFLAGS)
9128 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
9129 AC_SUBST(JAVA_HOME)
9130 AC_SUBST(JAVA_HOME_FOR_BUILD)
9131 AC_SUBST(JDK)
9132 AC_SUBST(JDK_FOR_BUILD)
9133 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
9134 AC_SUBST(JAVA_SOURCE_VER)
9135 AC_SUBST(JAVA_TARGET_VER)
9136 AC_SUBST(MODULAR_JAVA)
9139 dnl ===================================================================
9140 dnl Export file validation
9141 dnl ===================================================================
9142 AC_MSG_CHECKING([whether to enable export file validation])
9143 if test "$with_export_validation" != "no"; then
9144     if test -z "$ENABLE_JAVA"; then
9145         if test "$with_export_validation" = "yes"; then
9146             AC_MSG_ERROR([requested, but Java is disabled])
9147         else
9148             AC_MSG_RESULT([no, as Java is disabled])
9149         fi
9150     elif ! test -d "${SRC_ROOT}/schema"; then
9151         if test "$with_export_validation" = "yes"; then
9152             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
9153         else
9154             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
9155         fi
9156     else
9157         AC_MSG_RESULT([yes])
9158         AC_DEFINE(HAVE_EXPORT_VALIDATION)
9160         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
9161         if test -z "$ODFVALIDATOR"; then
9162             # remember to download the ODF toolkit with validator later
9163             AC_MSG_NOTICE([no odfvalidator found, will download it])
9164             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
9165             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
9167             # and fetch name of odfvalidator jar name from download.lst
9168             ODFVALIDATOR_JAR=`$SED -n -e "s/^ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9169             AC_SUBST(ODFVALIDATOR_JAR)
9171             if test -z "$ODFVALIDATOR_JAR"; then
9172                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
9173             fi
9174         fi
9175         if test "$build_os" = "cygwin"; then
9176             # In case of Cygwin it will be executed from Windows,
9177             # so we need to run bash and absolute path to validator
9178             # so instead of "odfvalidator" it will be
9179             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9180             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
9181         else
9182             ODFVALIDATOR="sh $ODFVALIDATOR"
9183         fi
9184         AC_SUBST(ODFVALIDATOR)
9187         AC_PATH_PROGS(OFFICEOTRON, officeotron)
9188         if test -z "$OFFICEOTRON"; then
9189             # remember to download the officeotron with validator later
9190             AC_MSG_NOTICE([no officeotron found, will download it])
9191             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
9192             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
9194             # and fetch name of officeotron jar name from download.lst
9195             OFFICEOTRON_JAR=`$SED -n -e "s/^OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9196             AC_SUBST(OFFICEOTRON_JAR)
9198             if test -z "$OFFICEOTRON_JAR"; then
9199                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
9200             fi
9201         else
9202             # check version of existing officeotron
9203             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
9204             if test 0"$OFFICEOTRON_VER" -lt 704; then
9205                 AC_MSG_ERROR([officeotron too old])
9206             fi
9207         fi
9208         if test "$build_os" = "cygwin"; then
9209             # In case of Cygwin it will be executed from Windows,
9210             # so we need to run bash and absolute path to validator
9211             # so instead of "odfvalidator" it will be
9212             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9213             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
9214         else
9215             OFFICEOTRON="sh $OFFICEOTRON"
9216         fi
9217     fi
9218     AC_SUBST(OFFICEOTRON)
9219 else
9220     AC_MSG_RESULT([no])
9223 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
9224 if test "$with_bffvalidator" != "no"; then
9225     AC_DEFINE(HAVE_BFFVALIDATOR)
9227     if test "$with_export_validation" = "no"; then
9228         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
9229     fi
9231     if test "$with_bffvalidator" = "yes"; then
9232         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
9233     else
9234         BFFVALIDATOR="$with_bffvalidator"
9235     fi
9237     if test "$build_os" = "cygwin"; then
9238         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
9239             AC_MSG_RESULT($BFFVALIDATOR)
9240         else
9241             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9242         fi
9243     elif test -n "$BFFVALIDATOR"; then
9244         # We are not in Cygwin but need to run Windows binary with wine
9245         AC_PATH_PROGS(WINE, wine)
9247         # so swap in a shell wrapper that converts paths transparently
9248         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9249         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9250         AC_SUBST(BFFVALIDATOR_EXE)
9251         AC_MSG_RESULT($BFFVALIDATOR)
9252     else
9253         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9254     fi
9255     AC_SUBST(BFFVALIDATOR)
9256 else
9257     AC_MSG_RESULT([no])
9260 dnl ===================================================================
9261 dnl Check for epm (not needed for Windows)
9262 dnl ===================================================================
9263 AC_MSG_CHECKING([whether to enable EPM for packing])
9264 if test "$enable_epm" = "yes"; then
9265     AC_MSG_RESULT([yes])
9266     if test "$_os" != "WINNT"; then
9267         if test $_os = Darwin; then
9268             EPM=internal
9269         elif test -n "$with_epm"; then
9270             EPM=$with_epm
9271         else
9272             AC_PATH_PROG(EPM, epm, no)
9273         fi
9274         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9275             AC_MSG_NOTICE([EPM will be built.])
9276             BUILD_TYPE="$BUILD_TYPE EPM"
9277             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9278         else
9279             # Gentoo has some epm which is something different...
9280             AC_MSG_CHECKING([whether the found epm is the right epm])
9281             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9282                 AC_MSG_RESULT([yes])
9283             else
9284                 AC_MSG_ERROR([no. Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9285             fi
9286             AC_MSG_CHECKING([epm version])
9287             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9288             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9289                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9290                 AC_MSG_RESULT([OK, >= 3.7])
9291             else
9292                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9293                 AC_MSG_ERROR([Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9294             fi
9295         fi
9296     fi
9298     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9299         AC_MSG_CHECKING([for rpm])
9300         for a in "$RPM" rpmbuild rpm; do
9301             $a --usage >/dev/null 2> /dev/null
9302             if test $? -eq 0; then
9303                 RPM=$a
9304                 break
9305             else
9306                 $a --version >/dev/null 2> /dev/null
9307                 if test $? -eq 0; then
9308                     RPM=$a
9309                     break
9310                 fi
9311             fi
9312         done
9313         if test -z "$RPM"; then
9314             AC_MSG_ERROR([not found])
9315         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9316             RPM_PATH=`command -v $RPM`
9317             AC_MSG_RESULT([$RPM_PATH])
9318             SCPDEFS="$SCPDEFS -DWITH_RPM"
9319         else
9320             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9321         fi
9322     fi
9323     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9324         AC_PATH_PROG(DPKG, dpkg, no)
9325         if test "$DPKG" = "no"; then
9326             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9327         fi
9328     fi
9329     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9330        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9331         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9332             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9333                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9334                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9335                     AC_MSG_RESULT([yes])
9336                 else
9337                     AC_MSG_RESULT([no])
9338                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9339                         _pt="rpm"
9340                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9341                         add_warning "the rpms will need to be installed with --nodeps"
9342                     else
9343                         _pt="pkg"
9344                     fi
9345                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9346                     add_warning "the ${_pt}s will not be relocatable"
9347                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9348                                  relocation will work, you need to patch your epm with the
9349                                  patch in epm/epm-3.7.patch or build with
9350                                  --with-epm=internal which will build a suitable epm])
9351                 fi
9352             fi
9353         fi
9354     fi
9355     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9356         AC_PATH_PROG(PKGMK, pkgmk, no)
9357         if test "$PKGMK" = "no"; then
9358             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9359         fi
9360     fi
9361     AC_SUBST(RPM)
9362     AC_SUBST(DPKG)
9363     AC_SUBST(PKGMK)
9364 else
9365     for i in $PKGFORMAT; do
9366         case "$i" in
9367         bsd | deb | pkg | rpm | native | portable)
9368             AC_MSG_ERROR(
9369                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9370             ;;
9371         esac
9372     done
9373     AC_MSG_RESULT([no])
9374     EPM=NO
9376 AC_SUBST(EPM)
9378 ENABLE_LWP=
9379 if test "$enable_lotuswordpro" = "yes"; then
9380     ENABLE_LWP="TRUE"
9382 AC_SUBST(ENABLE_LWP)
9384 dnl ===================================================================
9385 dnl Check for building ODK
9386 dnl ===================================================================
9387 AC_MSG_CHECKING([whether to build the ODK])
9388 if test "$enable_odk" = yes; then
9389     if test "$DISABLE_DYNLOADING" = TRUE; then
9390         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9391     fi
9392     AC_MSG_RESULT([yes])
9393     BUILD_TYPE="$BUILD_TYPE ODK"
9394 else
9395     AC_MSG_RESULT([no])
9398 if test "$enable_odk" != yes; then
9399     unset DOXYGEN
9400 else
9401     if test "$with_doxygen" = no; then
9402         AC_MSG_CHECKING([for doxygen])
9403         unset DOXYGEN
9404         AC_MSG_RESULT([no])
9405     else
9406         if test "$with_doxygen" = yes; then
9407             AC_PATH_PROG([DOXYGEN], [doxygen])
9408             if test -z "$DOXYGEN"; then
9409                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9410             fi
9411             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9412                 if ! dot -V 2>/dev/null; then
9413                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9414                 fi
9415             fi
9416         else
9417             AC_MSG_CHECKING([for doxygen])
9418             DOXYGEN=$with_doxygen
9419             AC_MSG_RESULT([$DOXYGEN])
9420         fi
9421         if test -n "$DOXYGEN"; then
9422             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9423             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9424             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9425                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9426             fi
9427         fi
9428     fi
9430 AC_SUBST([DOXYGEN])
9432 dnl ==================================================================
9433 dnl libfuzzer
9434 dnl ==================================================================
9435 AC_MSG_CHECKING([whether to enable fuzzers])
9436 if test "$enable_fuzzers" != yes; then
9437     AC_MSG_RESULT([no])
9438 else
9439     if test -z $LIB_FUZZING_ENGINE; then
9440       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9441     fi
9442     AC_MSG_RESULT([yes])
9443     ENABLE_FUZZERS="TRUE"
9444     AC_DEFINE([ENABLE_FUZZERS],1)
9445     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9447 AC_SUBST(LIB_FUZZING_ENGINE)
9449 dnl ===================================================================
9450 dnl Check for system zlib
9451 dnl ===================================================================
9452 if test "$with_system_zlib" = "auto"; then
9453     case "$_os" in
9454     WINNT)
9455         with_system_zlib="$with_system_libs"
9456         ;;
9457     *)
9458         if test "$enable_fuzzers" != "yes"; then
9459             with_system_zlib=yes
9460         else
9461             with_system_zlib=no
9462         fi
9463         ;;
9464     esac
9467 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9468 dnl and has no pkg-config for it at least on some tinderboxes,
9469 dnl so leaving that out for now
9470 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9471 AC_MSG_CHECKING([which zlib to use])
9472 if test "$with_system_zlib" = "yes"; then
9473     AC_MSG_RESULT([external])
9474     SYSTEM_ZLIB=TRUE
9475     AC_CHECK_HEADER(zlib.h, [],
9476         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9477     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9478         [AC_MSG_ERROR(zlib not found or functional)], [])
9479 else
9480     AC_MSG_RESULT([internal])
9481     SYSTEM_ZLIB=
9482     BUILD_TYPE="$BUILD_TYPE ZLIB"
9483     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9484     if test "$COM" = "MSC"; then
9485         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9486     else
9487         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9488     fi
9490 AC_SUBST(ZLIB_CFLAGS)
9491 AC_SUBST(ZLIB_LIBS)
9492 AC_SUBST(SYSTEM_ZLIB)
9494 dnl ===================================================================
9495 dnl Check for system jpeg
9496 dnl ===================================================================
9497 AC_MSG_CHECKING([which libjpeg to use])
9498 if test "$with_system_jpeg" = "yes"; then
9499     AC_MSG_RESULT([external])
9500     SYSTEM_LIBJPEG=TRUE
9501     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9502         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9503     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9504         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9505 else
9506     SYSTEM_LIBJPEG=
9507     AC_MSG_RESULT([internal, libjpeg-turbo])
9508     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9510     case "$host_cpu" in
9511     x86_64 | amd64 | i*86 | x86 | ia32)
9512         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9513         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9514             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9515                 NASM="$LODE_HOME/opt/bin/nasm"
9516             elif test -x "/opt/lo/bin/nasm"; then
9517                 NASM="/opt/lo/bin/nasm"
9518             fi
9519         fi
9521         if test -n "$NASM"; then
9522             AC_MSG_CHECKING([for object file format of host system])
9523             case "$host_os" in
9524               cygwin* | mingw* | pw32* | wsl*)
9525                 case "$host_cpu" in
9526                   x86_64)
9527                     objfmt='Win64-COFF'
9528                     ;;
9529                   *)
9530                     objfmt='Win32-COFF'
9531                     ;;
9532                 esac
9533               ;;
9534               msdosdjgpp* | go32*)
9535                 objfmt='COFF'
9536               ;;
9537               os2-emx*) # not tested
9538                 objfmt='MSOMF' # obj
9539               ;;
9540               linux*coff* | linux*oldld*)
9541                 objfmt='COFF' # ???
9542               ;;
9543               linux*aout*)
9544                 objfmt='a.out'
9545               ;;
9546               linux*)
9547                 case "$host_cpu" in
9548                   x86_64)
9549                     objfmt='ELF64'
9550                     ;;
9551                   *)
9552                     objfmt='ELF'
9553                     ;;
9554                 esac
9555               ;;
9556               kfreebsd* | freebsd* | netbsd* | openbsd*)
9557                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9558                   objfmt='BSD-a.out'
9559                 else
9560                   case "$host_cpu" in
9561                     x86_64 | amd64)
9562                       objfmt='ELF64'
9563                       ;;
9564                     *)
9565                       objfmt='ELF'
9566                       ;;
9567                   esac
9568                 fi
9569               ;;
9570               solaris* | sunos* | sysv* | sco*)
9571                 case "$host_cpu" in
9572                   x86_64)
9573                     objfmt='ELF64'
9574                     ;;
9575                   *)
9576                     objfmt='ELF'
9577                     ;;
9578                 esac
9579               ;;
9580               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9581                 case "$host_cpu" in
9582                   x86_64)
9583                     objfmt='Mach-O64'
9584                     ;;
9585                   *)
9586                     objfmt='Mach-O'
9587                     ;;
9588                 esac
9589               ;;
9590               *)
9591                 objfmt='ELF ?'
9592               ;;
9593             esac
9595             AC_MSG_RESULT([$objfmt])
9596             if test "$objfmt" = 'ELF ?'; then
9597               objfmt='ELF'
9598               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9599             fi
9601             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9602             case "$objfmt" in
9603               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9604               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9605               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9606               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9607               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9608               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9609               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9610               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9611               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9612               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9613               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9614             esac
9615             AC_MSG_RESULT([$NAFLAGS])
9617             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9618             cat > conftest.asm << EOF
9619             [%line __oline__ "configure"
9620                     section .text
9621                     global  _main,main
9622             _main:
9623             main:   xor     eax,eax
9624                     ret
9625             ]
9627             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9628             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9629               AC_MSG_RESULT(yes)
9630             else
9631               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9632               cat conftest.asm >&AS_MESSAGE_LOG_FD
9633               rm -rf conftest*
9634               AC_MSG_RESULT(no)
9635               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9636               NASM=""
9637             fi
9639         fi
9641         if test -z "$NASM"; then
9642 cat << _EOS
9643 ****************************************************************************
9644 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9645 To get one please:
9647 _EOS
9648             if test "$build_os" = "cygwin"; then
9649 cat << _EOS
9650 install a pre-compiled binary for Win32
9652 mkdir -p /opt/lo/bin
9653 cd /opt/lo/bin
9654 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9655 chmod +x nasm
9657 or get and install one from https://www.nasm.us/
9659 Then re-run autogen.sh
9661 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9662 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`command -v nasm\` finds it.
9664 _EOS
9665             else
9666 cat << _EOS
9667 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/BUILDING.md
9669 _EOS
9670             fi
9671             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9672             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9673         fi
9674       ;;
9675     esac
9678 AC_SUBST(NASM)
9679 AC_SUBST(NAFLAGS)
9680 AC_SUBST(LIBJPEG_CFLAGS)
9681 AC_SUBST(LIBJPEG_LIBS)
9682 AC_SUBST(SYSTEM_LIBJPEG)
9684 dnl ===================================================================
9685 dnl Check for system clucene
9686 dnl ===================================================================
9687 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9688 if test "$SYSTEM_CLUCENE" = TRUE; then
9689     AC_LANG_PUSH([C++])
9690     save_CXXFLAGS=$CXXFLAGS
9691     save_CPPFLAGS=$CPPFLAGS
9692     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9693     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9694     dnl https://sourceforge.net/p/clucene/bugs/200/
9695     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9696     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9697                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9698     CXXFLAGS=$save_CXXFLAGS
9699     CPPFLAGS=$save_CPPFLAGS
9700     AC_LANG_POP([C++])
9701     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9704 dnl ===================================================================
9705 dnl Check for system expat
9706 dnl ===================================================================
9707 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9709 dnl ===================================================================
9710 dnl Check for system xmlsec
9711 dnl ===================================================================
9712 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.35])
9714 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9715 if test "$enable_eot" = "yes"; then
9716     ENABLE_EOT="TRUE"
9717     AC_DEFINE([ENABLE_EOT])
9718     AC_MSG_RESULT([yes])
9720     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9721 else
9722     ENABLE_EOT=
9723     AC_MSG_RESULT([no])
9725 AC_SUBST([ENABLE_EOT])
9727 dnl ===================================================================
9728 dnl Check for DLP libs
9729 dnl ===================================================================
9730 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9731 AS_IF([test "$COM" = "MSC"],
9732       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9733       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9735 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9736 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9738 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9740 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9742 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9743 AS_IF([test "$COM" = "MSC"],
9744       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9745       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9747 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9748 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9750 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9752 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9753 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.14])
9755 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9757 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9759 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9761 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.21])
9762 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9764 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9765 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9767 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9769 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9770 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9772 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9774 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9776 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9778 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9780 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9781 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9783 dnl ===================================================================
9784 dnl Check for system lcms2
9785 dnl ===================================================================
9786 if test "$with_system_lcms2" != "yes"; then
9787     SYSTEM_LCMS2=
9789 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9790 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9791 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9792 if test "$GCC" = "yes"; then
9793     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9795 if test "$COM" = "MSC"; then # override the above
9796     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9799 dnl ===================================================================
9800 dnl Check for system cppunit
9801 dnl ===================================================================
9802 if test "$_os" != "Android" ; then
9803     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9806 dnl ===================================================================
9807 dnl Check whether freetype is available
9809 dnl FreeType has 3 different kinds of versions
9810 dnl * release, like 2.4.10
9811 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9812 dnl * soname
9813 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9815 dnl 9.9.3 is 2.2.0
9816 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9817 dnl ===================================================================
9818 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9819 if test "x$ac_config_site_64bit_host" = xYES; then
9820     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9821 else
9822     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9824 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9826 # ===================================================================
9827 # Check for system libxslt
9828 # to prevent incompatibilities between internal libxml2 and external libxslt,
9829 # or vice versa, use with_system_libxml here
9830 # ===================================================================
9831 if test "$with_system_libxml" = "auto"; then
9832     case "$_os" in
9833     WINNT|iOS|Android)
9834         with_system_libxml="$with_system_libs"
9835         ;;
9836     Emscripten)
9837         with_system_libxml=no
9838         ;;
9839     *)
9840         if test "$enable_fuzzers" != "yes"; then
9841             with_system_libxml=yes
9842         else
9843             with_system_libxml=no
9844         fi
9845         ;;
9846     esac
9849 AC_MSG_CHECKING([which libxslt to use])
9850 if test "$with_system_libxml" = "yes"; then
9851     AC_MSG_RESULT([external])
9852     SYSTEM_LIBXSLT=TRUE
9853     if test "$_os" = "Darwin"; then
9854         dnl make sure to use SDK path
9855         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9856         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9857         dnl omit -L/usr/lib
9858         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9859         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9860     else
9861         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9862         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9863         FilterLibs "${LIBXSLT_LIBS}"
9864         LIBXSLT_LIBS="${filteredlibs}"
9865         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9866         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9867         FilterLibs "${LIBEXSLT_LIBS}"
9868         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9869     fi
9871     dnl Check for xsltproc
9872     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9873     if test "$XSLTPROC" = "no"; then
9874         AC_MSG_ERROR([xsltproc is required])
9875     fi
9876 else
9877     AC_MSG_RESULT([internal])
9878     SYSTEM_LIBXSLT=
9879     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9881 AC_SUBST(SYSTEM_LIBXSLT)
9882 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9883     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9885 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9887 AC_SUBST(LIBEXSLT_CFLAGS)
9888 AC_SUBST(LIBEXSLT_LIBS)
9889 AC_SUBST(LIBXSLT_CFLAGS)
9890 AC_SUBST(LIBXSLT_LIBS)
9891 AC_SUBST(XSLTPROC)
9893 # ===================================================================
9894 # Check for system libxml
9895 # ===================================================================
9896 AC_MSG_CHECKING([which libxml to use])
9897 if test "$with_system_libxml" = "yes"; then
9898     AC_MSG_RESULT([external])
9899     SYSTEM_LIBXML=TRUE
9900     if test "$_os" = "Darwin"; then
9901         dnl make sure to use SDK path
9902         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9903         dnl omit -L/usr/lib
9904         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9905     elif test $_os = iOS; then
9906         dnl make sure to use SDK path
9907         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9908         LIBXML_CFLAGS="-I$usr/include/libxml2"
9909         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9910     else
9911         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9912         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9913         FilterLibs "${LIBXML_LIBS}"
9914         LIBXML_LIBS="${filteredlibs}"
9915     fi
9917     dnl Check for xmllint
9918     AC_PATH_PROG(XMLLINT, xmllint, no)
9919     if test "$XMLLINT" = "no"; then
9920         AC_MSG_ERROR([xmllint is required])
9921     fi
9922 else
9923     AC_MSG_RESULT([internal])
9924     SYSTEM_LIBXML=
9925     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9926     if test "$COM" = "MSC"; then
9927         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9928     fi
9929     if test "$COM" = "MSC"; then
9930         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9931     else
9932         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9933         if test "$DISABLE_DYNLOADING" = TRUE; then
9934             LIBXML_LIBS="$LIBXML_LIBS -lm"
9935         fi
9936     fi
9937     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9939 AC_SUBST(SYSTEM_LIBXML)
9940 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9941     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9943 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9944 AC_SUBST(LIBXML_CFLAGS)
9945 AC_SUBST(LIBXML_LIBS)
9946 AC_SUBST(XMLLINT)
9948 # =====================================================================
9949 # Checking for a Python interpreter with version >= 3.3.
9950 # Optionally user can pass an option to configure, i. e.
9951 # ./configure PYTHON=/usr/bin/python
9952 # =====================================================================
9953 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9954     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9955     # unless PYTHON is defined as above which allows 'system'
9956     enable_python=internal
9958 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9959     if test -n "$PYTHON"; then
9960         PYTHON_FOR_BUILD=$PYTHON
9961     else
9962         # This allows a lack of system python with no error, we use internal one in that case.
9963         AM_PATH_PYTHON([3.3],, [:])
9964         # Clean PYTHON_VERSION checked below if cross-compiling
9965         PYTHON_VERSION=""
9966         if test "$PYTHON" != ":"; then
9967             PYTHON_FOR_BUILD=$PYTHON
9968         fi
9969     fi
9972 # Checks for Python to use for Pyuno
9973 AC_MSG_CHECKING([which Python to use for Pyuno])
9974 case "$enable_python" in
9975 no|disable)
9976     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9977         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9978         # requirement from the choice whether to include Python stuff in the installer, but why
9979         # bother?
9980         AC_MSG_ERROR([Python is required at build time.])
9981     fi
9982     enable_python=no
9983     AC_MSG_RESULT([none])
9984     ;;
9985 ""|yes|auto)
9986     if test "$DISABLE_SCRIPTING" = TRUE; then
9987         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9988             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9989         fi
9990         AC_MSG_RESULT([none, overridden by --disable-scripting])
9991         enable_python=no
9992     elif test $build_os = cygwin -o $build_os = wsl; then
9993         dnl When building on Windows we don't attempt to use any installed
9994         dnl "system"  Python.
9995         AC_MSG_RESULT([fully internal])
9996         enable_python=internal
9997     elif test "$cross_compiling" = yes; then
9998         AC_MSG_RESULT([system])
9999         enable_python=system
10000     else
10001         # Unset variables set by the above AM_PATH_PYTHON so that
10002         # we actually do check anew.
10003         AC_MSG_RESULT([])
10004         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
10005         AM_PATH_PYTHON([3.3],, [:])
10006         AC_MSG_CHECKING([which Python to use for Pyuno])
10007         if test "$PYTHON" = ":"; then
10008             if test -z "$PYTHON_FOR_BUILD"; then
10009                 AC_MSG_RESULT([fully internal])
10010             else
10011                 AC_MSG_RESULT([internal])
10012             fi
10013             enable_python=internal
10014         else
10015             AC_MSG_RESULT([system])
10016             enable_python=system
10017         fi
10018     fi
10019     ;;
10020 internal)
10021     AC_MSG_RESULT([internal])
10022     ;;
10023 fully-internal)
10024     AC_MSG_RESULT([fully internal])
10025     enable_python=internal
10026     ;;
10027 system)
10028     AC_MSG_RESULT([system])
10029     if test "$_os" = Darwin -a -z "$PYTHON"; then
10030         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
10031     fi
10032     ;;
10034     AC_MSG_ERROR([Incorrect --enable-python option])
10035     ;;
10036 esac
10038 if test $enable_python != no; then
10039     BUILD_TYPE="$BUILD_TYPE PYUNO"
10042 if test $enable_python = system; then
10043     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
10044         # Fallback: Accept these in the environment, or as set above
10045         # for MacOSX.
10046         :
10047     elif test "$cross_compiling" != yes; then
10048         # Unset variables set by the above AM_PATH_PYTHON so that
10049         # we actually do check anew.
10050         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
10051         # This causes an error if no python command is found
10052         AM_PATH_PYTHON([3.3])
10053         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
10054         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
10055         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
10056         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
10057         if test -z "$PKG_CONFIG"; then
10058             PYTHON_CFLAGS="-I$python_include"
10059             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
10060         elif $PKG_CONFIG --exists python-$python_version-embed; then
10061             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
10062             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
10063         elif $PKG_CONFIG --exists python-$python_version; then
10064             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
10065             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
10066         else
10067             PYTHON_CFLAGS="-I$python_include"
10068             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
10069         fi
10070         FilterLibs "${PYTHON_LIBS}"
10071         PYTHON_LIBS="${filteredlibs}"
10072     else
10073         dnl How to find out the cross-compilation Python installation path?
10074         AC_MSG_CHECKING([for python version])
10075         AS_IF([test -n "$PYTHON_VERSION"],
10076               [AC_MSG_RESULT([$PYTHON_VERSION])],
10077               [AC_MSG_RESULT([not found])
10078                AC_MSG_ERROR([no usable python found])])
10079         test -n "$PYTHON_CFLAGS" && break
10080     fi
10082     dnl Check if the headers really work
10083     save_CPPFLAGS="$CPPFLAGS"
10084     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
10085     AC_CHECK_HEADER(Python.h)
10086     CPPFLAGS="$save_CPPFLAGS"
10088     # let the PYTHON_FOR_BUILD match the same python installation that
10089     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
10090     # better for PythonTests.
10091     PYTHON_FOR_BUILD=$PYTHON
10094 if test "$with_lxml" != no; then
10095     if test -z "$PYTHON_FOR_BUILD"; then
10096         case $build_os in
10097             cygwin)
10098                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
10099                 ;;
10100             *)
10101                 if test "$cross_compiling" != yes ; then
10102                     BUILD_TYPE="$BUILD_TYPE LXML"
10103                 fi
10104                 ;;
10105         esac
10106     else
10107         AC_MSG_CHECKING([for python lxml])
10108         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
10109             AC_MSG_RESULT([yes])
10110         else
10111             case $build_os in
10112                 cygwin)
10113                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
10114                     ;;
10115                 *)
10116                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
10117                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
10118                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
10119                         else
10120                             BUILD_TYPE="$BUILD_TYPE LXML"
10121                             AC_MSG_RESULT([no, using internal lxml])
10122                         fi
10123                     else
10124                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
10125                     fi
10126                     ;;
10127             esac
10128         fi
10129     fi
10132 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
10133     SYSTEM_PYTHON=
10134     PYTHON_VERSION_MAJOR=3
10135     PYTHON_VERSION_MINOR=8
10136     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.19
10137     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
10138         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
10139     fi
10140     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
10142     # Embedded Python dies without Home set
10143     if test "$HOME" = ""; then
10144         export HOME=""
10145     fi
10148 dnl By now enable_python should be "system", "internal" or "no"
10149 case $enable_python in
10150 system)
10151     SYSTEM_PYTHON=TRUE
10153     if test "x$ac_cv_header_Python_h" != "xyes"; then
10154        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
10155     fi
10157     AC_LANG_PUSH(C)
10158     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
10159     AC_MSG_CHECKING([for correct python library version])
10160        AC_RUN_IFELSE([AC_LANG_SOURCE([[
10161 #include <Python.h>
10163 int main(int argc, char **argv) {
10164    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
10165    else return 1;
10167        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
10168     AC_LANG_POP(C)
10170     dnl FIXME Check if the Python library can be linked with, too?
10171     ;;
10173 internal)
10174     BUILD_TYPE="$BUILD_TYPE PYTHON"
10175     if test "$OS" = LINUX -o "$OS" = WNT ; then
10176         BUILD_TYPE="$BUILD_TYPE LIBFFI"
10177     fi
10178     ;;
10180     DISABLE_PYTHON=TRUE
10181     SYSTEM_PYTHON=
10182     ;;
10184     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
10185     ;;
10186 esac
10188 AC_SUBST(DISABLE_PYTHON)
10189 AC_SUBST(SYSTEM_PYTHON)
10190 AC_SUBST(PYTHON_CFLAGS)
10191 AC_SUBST(PYTHON_FOR_BUILD)
10192 AC_SUBST(PYTHON_LIBS)
10193 AC_SUBST(PYTHON_VERSION)
10194 AC_SUBST(PYTHON_VERSION_MAJOR)
10195 AC_SUBST(PYTHON_VERSION_MINOR)
10197 AC_MSG_CHECKING([whether to build LibreLogo])
10198 case "$enable_python" in
10199 no|disable)
10200     AC_MSG_RESULT([no; Python disabled])
10201     ;;
10203     if test "${enable_librelogo}" = "no"; then
10204         AC_MSG_RESULT([no])
10205     else
10206         AC_MSG_RESULT([yes])
10207         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
10208         AC_DEFINE([ENABLE_LIBRELOGO],1)
10209     fi
10210     ;;
10211 esac
10212 AC_SUBST(ENABLE_LIBRELOGO)
10214 ENABLE_MARIADBC=
10215 MARIADBC_MAJOR=1
10216 MARIADBC_MINOR=0
10217 MARIADBC_MICRO=2
10218 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
10219 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
10220     ENABLE_MARIADBC=TRUE
10221     AC_MSG_RESULT([yes])
10222     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10223 else
10224     AC_MSG_RESULT([no])
10226 AC_SUBST(ENABLE_MARIADBC)
10227 AC_SUBST(MARIADBC_MAJOR)
10228 AC_SUBST(MARIADBC_MINOR)
10229 AC_SUBST(MARIADBC_MICRO)
10231 if test "$ENABLE_MARIADBC" = "TRUE"; then
10232     dnl ===================================================================
10233     dnl Check for system MariaDB
10234     dnl ===================================================================
10236     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10237         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10238     fi
10240     AC_MSG_CHECKING([which MariaDB to use])
10241     if test "$with_system_mariadb" = "yes"; then
10242         AC_MSG_RESULT([external])
10243         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10244         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10245         if test -z "$MARIADBCONFIG"; then
10246             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10247             if test -z "$MARIADBCONFIG"; then
10248                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10249                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10250             fi
10251         fi
10252         AC_MSG_CHECKING([MariaDB version])
10253         MARIADB_VERSION=`$MARIADBCONFIG --version`
10254         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10255         if test "$MARIADB_MAJOR" -ge "5"; then
10256             AC_MSG_RESULT([OK])
10257         else
10258             AC_MSG_ERROR([too old, use 5.0.x or later])
10259         fi
10260         AC_MSG_CHECKING([for MariaDB Client library])
10261         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10262         if test "$COM_IS_CLANG" = TRUE; then
10263             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10264         fi
10265         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10266         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10267         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10268         dnl linux32:
10269         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10270             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10271             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10272                 | sed -e 's|/lib64/|/lib/|')
10273         fi
10274         FilterLibs "${MARIADB_LIBS}"
10275         MARIADB_LIBS="${filteredlibs}"
10276         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10277         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10278         if test "$enable_bundle_mariadb" = "yes"; then
10279             AC_MSG_RESULT([yes])
10280             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10281             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10283 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10285 /g' | grep -E '(mysqlclient|mariadb)')
10286             if test "$_os" = "Darwin"; then
10287                 LIBMARIADB=${LIBMARIADB}.dylib
10288                 if test "$with_gssapi" != "no"; then
10289                     WITH_GSSAPI=TRUE
10290                     save_LIBS=$LIBS
10291                     AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10292                         [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10293                     GSSAPI_LIBS=$LIBS
10294                     LIBS=$save_LIBS
10295                 fi
10296             elif test "$_os" = "WINNT"; then
10297                 LIBMARIADB=${LIBMARIADB}.dll
10298             else
10299                 LIBMARIADB=${LIBMARIADB}.so
10300                 if test "$with_gssapi" != "no"; then
10301                     WITH_GSSAPI=TRUE
10302                     save_LIBS=$LIBS
10303                     AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10304                         [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10305                     GSSAPI_LIBS=$LIBS
10306                     LIBS=$save_LIBS
10307                 fi
10308             fi
10309             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10310             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10311             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10312                 AC_MSG_RESULT([found.])
10313                 PathFormat "$LIBMARIADB_PATH"
10314                 LIBMARIADB_PATH="$formatted_path"
10315             else
10316                 AC_MSG_ERROR([not found.])
10317             fi
10318         else
10319             AC_MSG_RESULT([no])
10320             BUNDLE_MARIADB_CONNECTOR_C=
10321         fi
10322     else
10323         AC_MSG_RESULT([internal])
10324         SYSTEM_MARIADB_CONNECTOR_C=
10325         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10326         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10327         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10328     fi
10330     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10331     AC_SUBST(MARIADB_CFLAGS)
10332     AC_SUBST(MARIADB_LIBS)
10333     AC_SUBST(LIBMARIADB)
10334     AC_SUBST(LIBMARIADB_PATH)
10335     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10338 dnl ===================================================================
10339 dnl Check for system hsqldb
10340 dnl ===================================================================
10341 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10342     AC_MSG_CHECKING([which hsqldb to use])
10343     if test "$with_system_hsqldb" = "yes"; then
10344         AC_MSG_RESULT([external])
10345         SYSTEM_HSQLDB=TRUE
10346         if test -z $HSQLDB_JAR; then
10347             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10348         fi
10349         if ! test -f $HSQLDB_JAR; then
10350                AC_MSG_ERROR(hsqldb.jar not found.)
10351         fi
10352         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10353         export HSQLDB_JAR
10354         if $PERL -e \
10355            'use Archive::Zip;
10356             my $file = "$ENV{'HSQLDB_JAR'}";
10357             my $zip = Archive::Zip->new( $file );
10358             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10359             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10360             {
10361                 push @l, split(/\n/, $mf);
10362                 foreach my $line (@l)
10363                 {
10364                     if ($line =~ m/Specification-Version:/)
10365                     {
10366                         ($t, $version) = split (/:/,$line);
10367                         $version =~ s/^\s//;
10368                         ($a, $b, $c, $d) = split (/\./,$version);
10369                         if ($c == "0" && $d > "8")
10370                         {
10371                             exit 0;
10372                         }
10373                         else
10374                         {
10375                             exit 1;
10376                         }
10377                     }
10378                 }
10379             }
10380             else
10381             {
10382                 exit 1;
10383             }'; then
10384             AC_MSG_RESULT([yes])
10385         else
10386             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10387         fi
10388     else
10389         AC_MSG_RESULT([internal])
10390         SYSTEM_HSQLDB=
10391         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10392         NEED_ANT=TRUE
10393     fi
10394 else
10395     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10396         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10397     fi
10399 AC_SUBST(SYSTEM_HSQLDB)
10400 AC_SUBST(HSQLDB_JAR)
10402 dnl ===================================================================
10403 dnl Check for PostgreSQL stuff
10404 dnl ===================================================================
10405 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10406 if test "x$enable_postgresql_sdbc" != "xno"; then
10407     AC_MSG_RESULT([yes])
10408     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10410     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10411         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10412     fi
10413     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10414         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10415     fi
10417     postgres_interface=""
10418     if test "$with_system_postgresql" = "yes"; then
10419         postgres_interface="external PostgreSQL"
10420         SYSTEM_POSTGRESQL=TRUE
10421         if test "$_os" = Darwin; then
10422             supp_path=''
10423             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10424                 pg_supp_path="$P_SEP$d$pg_supp_path"
10425             done
10426         fi
10427         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10428         if test -n "$PGCONFIG"; then
10429             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10430             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10431         else
10432             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10433               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10434               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10435             ],[
10436               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10437             ])
10438         fi
10439         FilterLibs "${POSTGRESQL_LIB}"
10440         POSTGRESQL_LIB="${filteredlibs}"
10441     else
10442         # if/when anything else than PostgreSQL uses Kerberos,
10443         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10444         WITH_KRB5=
10445         WITH_GSSAPI=
10446         case "$_os" in
10447         Darwin)
10448             # macOS has system MIT Kerberos 5 since 10.4
10449             if test "$with_krb5" != "no"; then
10450                 WITH_KRB5=TRUE
10451                 save_LIBS=$LIBS
10452                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10453                 # that the libraries where these functions are located on macOS will change, is it?
10454                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10455                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10456                 KRB5_LIBS=$LIBS
10457                 LIBS=$save_LIBS
10458                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10459                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10460                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10461                 LIBS=$save_LIBS
10462             fi
10463             if test "$with_gssapi" != "no"; then
10464                 WITH_GSSAPI=TRUE
10465                 save_LIBS=$LIBS
10466                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10467                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10468                 GSSAPI_LIBS=$LIBS
10469                 LIBS=$save_LIBS
10470             fi
10471             ;;
10472         WINNT)
10473             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10474                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10475             fi
10476             ;;
10477         Linux|GNU|*BSD|DragonFly)
10478             if test "$with_krb5" != "no"; then
10479                 WITH_KRB5=TRUE
10480                 save_LIBS=$LIBS
10481                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10482                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10483                 KRB5_LIBS=$LIBS
10484                 LIBS=$save_LIBS
10485                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10486                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10487                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10488                 LIBS=$save_LIBS
10489             fi
10490             if test "$with_gssapi" != "no"; then
10491                 WITH_GSSAPI=TRUE
10492                 save_LIBS=$LIBS
10493                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10494                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10495                 GSSAPI_LIBS=$LIBS
10496                 LIBS=$save_LIBS
10497             fi
10498             ;;
10499         *)
10500             if test "$with_krb5" = "yes"; then
10501                 WITH_KRB5=TRUE
10502                 save_LIBS=$LIBS
10503                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10504                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10505                 KRB5_LIBS=$LIBS
10506                 LIBS=$save_LIBS
10507                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10508                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10509                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10510                 LIBS=$save_LIBS
10511             fi
10512             if test "$with_gssapi" = "yes"; then
10513                 WITH_GSSAPI=TRUE
10514                 save_LIBS=$LIBS
10515                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10516                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10517                 LIBS=$save_LIBS
10518                 GSSAPI_LIBS=$LIBS
10519             fi
10520         esac
10522         if test -n "$with_libpq_path"; then
10523             SYSTEM_POSTGRESQL=TRUE
10524             postgres_interface="external libpq"
10525             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10526             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10527         else
10528             SYSTEM_POSTGRESQL=
10529             postgres_interface="internal"
10530             POSTGRESQL_LIB=""
10531             POSTGRESQL_INC="%OVERRIDE_ME%"
10532             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10533         fi
10534     fi
10536     AC_MSG_CHECKING([PostgreSQL C interface])
10537     AC_MSG_RESULT([$postgres_interface])
10539     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10540         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10541         save_CFLAGS=$CFLAGS
10542         save_CPPFLAGS=$CPPFLAGS
10543         save_LIBS=$LIBS
10544         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10545         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10546         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10547         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10548             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10549         CFLAGS=$save_CFLAGS
10550         CPPFLAGS=$save_CPPFLAGS
10551         LIBS=$save_LIBS
10552     fi
10553     BUILD_POSTGRESQL_SDBC=TRUE
10554 else
10555     AC_MSG_RESULT([no])
10557 AC_SUBST(WITH_KRB5)
10558 AC_SUBST(WITH_GSSAPI)
10559 AC_SUBST(GSSAPI_LIBS)
10560 AC_SUBST(KRB5_LIBS)
10561 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10562 AC_SUBST(SYSTEM_POSTGRESQL)
10563 AC_SUBST(POSTGRESQL_INC)
10564 AC_SUBST(POSTGRESQL_LIB)
10566 dnl ===================================================================
10567 dnl Check for Firebird stuff
10568 dnl ===================================================================
10569 ENABLE_FIREBIRD_SDBC=
10570 if test "$enable_firebird_sdbc" = "yes" ; then
10571     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10573     dnl ===================================================================
10574     dnl Check for system Firebird
10575     dnl ===================================================================
10576     AC_MSG_CHECKING([which Firebird to use])
10577     if test "$with_system_firebird" = "yes"; then
10578         AC_MSG_RESULT([external])
10579         SYSTEM_FIREBIRD=TRUE
10580         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10581         if test -z "$FIREBIRDCONFIG"; then
10582             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10583             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10584                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10585             ])
10586             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10587         else
10588             AC_MSG_NOTICE([fb_config found])
10589             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10590             AC_MSG_CHECKING([for Firebird Client library])
10591             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10592             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10593             FilterLibs "${FIREBIRD_LIBS}"
10594             FIREBIRD_LIBS="${filteredlibs}"
10595         fi
10596         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10597         AC_MSG_CHECKING([Firebird version])
10598         if test -n "${FIREBIRD_VERSION}"; then
10599             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10600             if test "$FIREBIRD_MAJOR" -ge "3"; then
10601                 AC_MSG_RESULT([OK])
10602             else
10603                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10604             fi
10605         else
10606             save_CFLAGS="${CFLAGS}"
10607             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10608             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10609 #if defined(FB_API_VER) && FB_API_VER == 30
10610 int fb_api_is_30(void) { return 0; }
10611 #else
10612 #error "Wrong Firebird API version"
10613 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10614             CFLAGS="$save_CFLAGS"
10615         fi
10616         ENABLE_FIREBIRD_SDBC=TRUE
10617         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10618     elif test "$enable_database_connectivity" = no; then
10619         AC_MSG_RESULT([none])
10620     elif test "$cross_compiling" = "yes"; then
10621         AC_MSG_RESULT([none])
10622     else
10623         dnl Embedded Firebird has version 3.0
10624         dnl We need libatomic_ops for any non X86/X64 system
10625         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10626             dnl ===================================================================
10627             dnl Check for system libatomic_ops
10628             dnl ===================================================================
10629             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10630             if test "$with_system_libatomic_ops" = "yes"; then
10631                 SYSTEM_LIBATOMIC_OPS=TRUE
10632                 AC_CHECK_HEADERS(atomic_ops.h, [],
10633                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10634             else
10635                 SYSTEM_LIBATOMIC_OPS=
10636                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10637                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10638                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10639             fi
10640         fi
10642         AC_MSG_RESULT([internal])
10643         SYSTEM_FIREBIRD=
10644         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10645         FIREBIRD_LIBS="-lfbclient"
10647         if test "$with_system_libtommath" = "yes"; then
10648             SYSTEM_LIBTOMMATH=TRUE
10649             dnl check for tommath presence
10650             save_LIBS=$LIBS
10651             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10652             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10653             LIBS=$save_LIBS
10654         else
10655             SYSTEM_LIBTOMMATH=
10656             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10657             LIBTOMMATH_LIBS="-ltommath"
10658             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10659         fi
10661         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10662         ENABLE_FIREBIRD_SDBC=TRUE
10663         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10664     fi
10666 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10667 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10668 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10669 AC_SUBST(LIBATOMIC_OPS_LIBS)
10670 AC_SUBST(SYSTEM_FIREBIRD)
10671 AC_SUBST(FIREBIRD_CFLAGS)
10672 AC_SUBST(FIREBIRD_LIBS)
10673 AC_SUBST(SYSTEM_LIBTOMMATH)
10674 AC_SUBST(LIBTOMMATH_CFLAGS)
10675 AC_SUBST(LIBTOMMATH_LIBS)
10677 dnl ===================================================================
10678 dnl Check for system curl
10679 dnl ===================================================================
10680 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10682 dnl ===================================================================
10683 dnl Check for system boost
10684 dnl ===================================================================
10685 AC_MSG_CHECKING([which boost to use])
10686 if test "$with_system_boost" = "yes"; then
10687     AC_MSG_RESULT([external])
10688     SYSTEM_BOOST=TRUE
10689     AX_BOOST_BASE([1.69],,[AC_MSG_ERROR([no suitable Boost found])])
10690     AX_BOOST_DATE_TIME
10691     AX_BOOST_FILESYSTEM
10692     AX_BOOST_IOSTREAMS
10693     AX_BOOST_LOCALE
10694     AC_LANG_PUSH([C++])
10695     save_CXXFLAGS=$CXXFLAGS
10696     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10697     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10698        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10699     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10700        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10701     CXXFLAGS=$save_CXXFLAGS
10702     AC_LANG_POP([C++])
10703     # this is in m4/ax_boost_base.m4
10704     FilterLibs "${BOOST_LDFLAGS}"
10705     BOOST_LDFLAGS="${filteredlibs}"
10706 else
10707     AC_MSG_RESULT([internal])
10708     BUILD_TYPE="$BUILD_TYPE BOOST"
10709     SYSTEM_BOOST=
10710     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10711         # use warning-suppressing wrapper headers
10712         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10713     else
10714         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10715     fi
10717 AC_SUBST(SYSTEM_BOOST)
10719 dnl ===================================================================
10720 dnl Check for system mdds
10721 dnl ===================================================================
10722 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10723 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.1 >= 2.1.0])
10725 dnl ===================================================================
10726 dnl Check for system dragonbox
10727 dnl ===================================================================
10728 AC_MSG_CHECKING([which dragonbox to use])
10729 if test "$with_system_dragonbox" = "yes"; then
10730     AC_MSG_RESULT([external])
10731     SYSTEM_DRAGONBOX=TRUE
10732     AC_LANG_PUSH([C++])
10733     save_CPPFLAGS=$CPPFLAGS
10734     # This is where upstream installs to, unfortunately no .pc or so...
10735     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.1.3
10736     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10737     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10738        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10739     AC_LANG_POP([C++])
10740     CPPFLAGS=$save_CPPFLAGS
10741 else
10742     AC_MSG_RESULT([internal])
10743     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10744     SYSTEM_DRAGONBOX=
10746 AC_SUBST([SYSTEM_DRAGONBOX])
10747 AC_SUBST([DRAGONBOX_CFLAGS])
10749 dnl ===================================================================
10750 dnl Check for system frozen
10751 dnl ===================================================================
10752 AC_MSG_CHECKING([which frozen to use])
10753 if test "$with_system_frozen" = "yes"; then
10754     AC_MSG_RESULT([external])
10755     SYSTEM_FROZEN=TRUE
10756     AC_LANG_PUSH([C++])
10757     save_CPPFLAGS=$CPPFLAGS
10758     AC_CHECK_HEADER([frozen/unordered_map.h], [],
10759        [AC_MSG_ERROR([frozen/unordered_map.h not found. install frozen headers])], [])
10760     AC_LANG_POP([C++])
10761     CPPFLAGS=$save_CPPFLAGS
10762 else
10763     AC_MSG_RESULT([internal])
10764     BUILD_TYPE="$BUILD_TYPE FROZEN"
10765     SYSTEM_FROZEN=
10767 AC_SUBST([SYSTEM_FROZEN])
10768 AC_SUBST([FROZEN_CFLAGS])
10770 dnl ===================================================================
10771 dnl Check for system libfixmath
10772 dnl ===================================================================
10773 AC_MSG_CHECKING([which libfixmath to use])
10774 if test "$with_system_libfixmath" = "yes"; then
10775     AC_MSG_RESULT([external])
10776     SYSTEM_LIBFIXMATH=TRUE
10777     AC_LANG_PUSH([C++])
10778     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10779        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10780     AC_CHECK_LIB([libfixmath], [fix16_mul], [LIBFIXMATH_LIBS=-llibfixmath],
10781                  [AC_CHECK_LIB([fixmath], [fix16_mul], [LIBFIXMATH_LIBS=-lfixmath],
10782                                [AC_MSG_ERROR(libfixmath lib not found or functional)])])
10783     AC_LANG_POP([C++])
10784 else
10785     AC_MSG_RESULT([internal])
10786     SYSTEM_LIBFIXMATH=
10787     LIBFIXMATH_LIBS=
10789 AC_SUBST([SYSTEM_LIBFIXMATH])
10790 AC_SUBST([LIBFIXMATH_LIBS])
10792 dnl ===================================================================
10793 dnl Check for system glm
10794 dnl ===================================================================
10795 AC_MSG_CHECKING([which glm to use])
10796 if test "$with_system_glm" = "yes"; then
10797     AC_MSG_RESULT([external])
10798     SYSTEM_GLM=TRUE
10799     AC_LANG_PUSH([C++])
10800     AC_CHECK_HEADER([glm/glm.hpp], [],
10801        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10802     AC_LANG_POP([C++])
10803 else
10804     AC_MSG_RESULT([internal])
10805     BUILD_TYPE="$BUILD_TYPE GLM"
10806     SYSTEM_GLM=
10807     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10809 AC_SUBST([GLM_CFLAGS])
10810 AC_SUBST([SYSTEM_GLM])
10812 dnl ===================================================================
10813 dnl Check for system odbc
10814 dnl ===================================================================
10815 AC_MSG_CHECKING([which odbc headers to use])
10816 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
10817     AC_MSG_RESULT([external])
10818     SYSTEM_ODBC_HEADERS=TRUE
10820     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10821         save_CPPFLAGS=$CPPFLAGS
10822         find_winsdk
10823         PathFormat "$winsdktest"
10824         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"
10825         AC_CHECK_HEADER(sqlext.h, [],
10826             [AC_MSG_ERROR(odbc not found. install odbc)],
10827             [#include <windows.h>])
10828         CPPFLAGS=$save_CPPFLAGS
10829     else
10830         AC_CHECK_HEADER(sqlext.h, [],
10831             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10832     fi
10833 elif test "$enable_database_connectivity" = no; then
10834     AC_MSG_RESULT([none])
10835 else
10836     AC_MSG_RESULT([internal])
10837     SYSTEM_ODBC_HEADERS=
10839 AC_SUBST(SYSTEM_ODBC_HEADERS)
10841 dnl ===================================================================
10842 dnl Check for system NSS
10843 dnl ===================================================================
10844 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10845     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,system-if-linux)
10846     AC_DEFINE(HAVE_FEATURE_NSS)
10847     ENABLE_NSS=TRUE
10848 elif test $_os != iOS -a "$enable_openssl" != "no"; then
10849     with_tls=openssl
10851 AC_SUBST(ENABLE_NSS)
10853 dnl ===================================================================
10854 dnl Enable LDAP support
10855 dnl ===================================================================
10857 if test "$test_openldap" = yes; then
10858     AC_MSG_CHECKING([whether to enable LDAP support])
10859     if test "$enable_ldap" = yes -a \( "$enable_openssl" = yes -o "$with_system_openldap" = yes \); then
10860         AC_MSG_RESULT([yes])
10861         ENABLE_LDAP=TRUE
10862     else
10863         if test "$enable_ldap" != "yes"; then
10864             AC_MSG_RESULT([no])
10865         else
10866             AC_MSG_RESULT([no (needs OPENSSL or system openldap)])
10867         fi
10868     fi
10870 dnl ===================================================================
10871 dnl Check for system openldap
10872 dnl ===================================================================
10874     if test "$ENABLE_LDAP" = TRUE; then
10875         AC_MSG_CHECKING([which openldap library to use])
10876         if test "$with_system_openldap" = yes; then
10877             AC_MSG_RESULT([external])
10878             SYSTEM_OPENLDAP=TRUE
10879             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10880             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10881             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10882         else
10883             AC_MSG_RESULT([internal])
10884             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10885         fi
10886     fi
10889 AC_SUBST(ENABLE_LDAP)
10890 AC_SUBST(SYSTEM_OPENLDAP)
10892 dnl ===================================================================
10893 dnl Check for TLS/SSL and cryptographic implementation to use
10894 dnl ===================================================================
10895 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10896 if test -n "$with_tls"; then
10897     case $with_tls in
10898     openssl)
10899         AC_DEFINE(USE_TLS_OPENSSL)
10900         TLS=OPENSSL
10901         AC_MSG_RESULT([$TLS])
10903         if test "$enable_openssl" != "yes"; then
10904             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10905         fi
10907         # warn that OpenSSL has been selected but not all TLS code has this option
10908         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10909         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10910         ;;
10911     nss)
10912         AC_DEFINE(USE_TLS_NSS)
10913         TLS=NSS
10914         AC_MSG_RESULT([$TLS])
10915         ;;
10916     no)
10917         AC_MSG_RESULT([none])
10918         AC_MSG_WARN([Skipping TLS/SSL])
10919         ;;
10920     *)
10921         AC_MSG_RESULT([])
10922         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10923 openssl - OpenSSL
10924 nss - Mozilla's Network Security Services (NSS)
10925     ])
10926         ;;
10927     esac
10928 else
10929     # default to using NSS, it results in smaller oox lib
10930     AC_DEFINE(USE_TLS_NSS)
10931     TLS=NSS
10932     AC_MSG_RESULT([$TLS])
10934 AC_SUBST(TLS)
10936 dnl ===================================================================
10937 dnl Check for system sane
10938 dnl ===================================================================
10939 AC_MSG_CHECKING([which sane header to use])
10940 if test "$with_system_sane" = "yes"; then
10941     AC_MSG_RESULT([external])
10942     AC_CHECK_HEADER(sane/sane.h, [],
10943       [AC_MSG_ERROR(sane not found. install sane)], [])
10944 else
10945     AC_MSG_RESULT([internal])
10946     BUILD_TYPE="$BUILD_TYPE SANE"
10949 dnl ===================================================================
10950 dnl Check for system icu
10951 dnl ===================================================================
10952 ICU_MAJOR=73
10953 ICU_MINOR=2
10954 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10955 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10956 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 66])
10957 if test "$SYSTEM_ICU" = TRUE; then
10958     AC_LANG_PUSH([C++])
10959     AC_MSG_CHECKING([for unicode/rbbi.h])
10960     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10961     AC_LANG_POP([C++])
10963     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10964     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10965     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10967     if test "$CROSS_COMPILING" != TRUE; then
10968         # using the system icu tools can lead to version confusion, use the
10969         # ones from the build environment when cross-compiling
10970         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10971         if test -z "$SYSTEM_GENBRK"; then
10972             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10973         fi
10974         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10975         if test -z "$SYSTEM_GENCCODE"; then
10976             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10977         fi
10978         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10979         if test -z "$SYSTEM_GENCMN"; then
10980             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10981         fi
10982     fi
10985 AC_SUBST(SYSTEM_GENBRK)
10986 AC_SUBST(SYSTEM_GENCCODE)
10987 AC_SUBST(SYSTEM_GENCMN)
10988 AC_SUBST(ICU_MAJOR)
10989 AC_SUBST(ICU_MINOR)
10991 dnl ==================================================================
10992 dnl CURL
10993 dnl ==================================================================
10994 if test "$enable_curl" == "yes"; then
10995     AC_DEFINE([HAVE_FEATURE_CURL])
10998 dnl ==================================================================
10999 dnl Breakpad
11000 dnl ==================================================================
11001 DEFAULT_CRASHDUMP_VALUE="true"
11002 AC_MSG_CHECKING([whether to enable breakpad])
11003 if test "$enable_breakpad" != yes; then
11004     AC_MSG_RESULT([no])
11005 else
11006     if test "$enable_curl" != "yes"; then
11007         AC_MSG_ERROR([--disable-breakpad must be used when --disable-curl is used])
11008     fi
11009     AC_MSG_RESULT([yes])
11010     ENABLE_BREAKPAD="TRUE"
11011     AC_DEFINE(ENABLE_BREAKPAD)
11012     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
11013     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
11015     AC_MSG_CHECKING([for disable crash dump])
11016     if test "$enable_crashdump" = no; then
11017         DEFAULT_CRASHDUMP_VALUE="false"
11018         AC_MSG_RESULT([yes])
11019     else
11020        AC_MSG_RESULT([no])
11021     fi
11023     AC_MSG_CHECKING([for crashreport config])
11024     if test "$with_symbol_config" = "no"; then
11025         BREAKPAD_SYMBOL_CONFIG="invalid"
11026         AC_MSG_RESULT([no])
11027     else
11028         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
11029         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
11030         AC_MSG_RESULT([yes])
11031     fi
11032     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
11034 AC_SUBST(ENABLE_BREAKPAD)
11035 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
11037 dnl ==================================================================
11038 dnl libcmis
11039 dnl ==================================================================
11040 if test "$enable_libcmis" == "yes"; then
11041     if test "$enable_curl" != "yes"; then
11042         AC_MSG_ERROR([--disable-libcmis must be used when --disable-curl is used])
11043     fi
11046 dnl ===================================================================
11047 dnl Orcus
11048 dnl ===================================================================
11049 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.18 >= 0.19.1])
11050 if test "$with_system_orcus" != "yes"; then
11051     if test "$SYSTEM_BOOST" = "TRUE"; then
11052         dnl Link with Boost.System
11053         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
11054         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
11055         dnl in documentation has no effect.
11056         AX_BOOST_SYSTEM
11057     fi
11059 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
11060 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
11061 AC_SUBST([BOOST_SYSTEM_LIB])
11062 AC_SUBST(SYSTEM_LIBORCUS)
11064 dnl ===================================================================
11065 dnl HarfBuzz
11066 dnl ===================================================================
11067 harfbuzz_required_version=5.1.0
11069 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
11070 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
11071 case "$_os" in
11072     Linux)
11073         GRAPHITE_LIBS_internal="${WORKDIR}/LinkTarget/StaticLibrary/libgraphite.a"
11074         HARFBUZZ_LIBS_internal="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.a"
11075         ;;
11076     *)
11077         GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
11078         HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
11079         ;;
11080 esac
11081 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
11082 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= $harfbuzz_required_version])
11084 if test "$COM" = "MSC"; then # override the above
11085     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
11086     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
11089 if test "$with_system_harfbuzz" = "yes"; then
11090     if test "$with_system_graphite" = "no"; then
11091         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
11092     fi
11093     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
11094     save_LIBS="$LIBS"
11095     save_CFLAGS="$CFLAGS"
11096     LIBS="$LIBS $HARFBUZZ_LIBS"
11097     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
11098     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
11099     LIBS="$save_LIBS"
11100     CFLAGS="$save_CFLAGS"
11101 else
11102     if test "$with_system_graphite" = "yes"; then
11103         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
11104     fi
11107 if test "$USING_X11" = TRUE; then
11108     AC_PATH_X
11109     AC_PATH_XTRA
11110     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
11112     if test -z "$x_includes"; then
11113         x_includes="default_x_includes"
11114     fi
11115     if test -z "$x_libraries"; then
11116         x_libraries="default_x_libraries"
11117     fi
11118     CFLAGS="$CFLAGS $X_CFLAGS"
11119     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
11120     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
11121 else
11122     x_includes="no_x_includes"
11123     x_libraries="no_x_libraries"
11126 if test "$USING_X11" = TRUE; then
11127     dnl ===================================================================
11128     dnl Check for extension headers
11129     dnl ===================================================================
11130     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
11131      [#include <X11/extensions/shape.h>])
11133     # vcl needs ICE and SM
11134     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
11135     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
11136         [AC_MSG_ERROR(ICE library not found)])
11137     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
11138     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
11139         [AC_MSG_ERROR(SM library not found)])
11142 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
11143     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
11144     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
11147 dnl ===================================================================
11148 dnl Check for system Xrender
11149 dnl ===================================================================
11150 AC_MSG_CHECKING([whether to use Xrender])
11151 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
11152     AC_MSG_RESULT([yes])
11153     PKG_CHECK_MODULES(XRENDER, xrender)
11154     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11155     FilterLibs "${XRENDER_LIBS}"
11156     XRENDER_LIBS="${filteredlibs}"
11157     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
11158       [AC_MSG_ERROR(libXrender not found or functional)], [])
11159     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
11160       [AC_MSG_ERROR(Xrender not found. install X)], [])
11161 else
11162     AC_MSG_RESULT([no])
11164 AC_SUBST(XRENDER_CFLAGS)
11165 AC_SUBST(XRENDER_LIBS)
11167 dnl ===================================================================
11168 dnl Check for XRandr
11169 dnl ===================================================================
11170 AC_MSG_CHECKING([whether to enable RandR support])
11171 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
11172     AC_MSG_RESULT([yes])
11173     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
11174     if test "$ENABLE_RANDR" != "TRUE"; then
11175         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
11176                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
11177         XRANDR_CFLAGS=" "
11178         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
11179           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
11180         XRANDR_LIBS="-lXrandr "
11181         ENABLE_RANDR="TRUE"
11182     fi
11183     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11184     FilterLibs "${XRANDR_LIBS}"
11185     XRANDR_LIBS="${filteredlibs}"
11186 else
11187     ENABLE_RANDR=""
11188     AC_MSG_RESULT([no])
11190 AC_SUBST(XRANDR_CFLAGS)
11191 AC_SUBST(XRANDR_LIBS)
11192 AC_SUBST(ENABLE_RANDR)
11194 if test -z "$with_webdav"; then
11195     with_webdav=$test_webdav
11198 AC_MSG_CHECKING([for WebDAV support])
11199 case "$with_webdav" in
11201     AC_MSG_RESULT([no])
11202     WITH_WEBDAV=""
11203     ;;
11205     AC_MSG_RESULT([yes])
11206     # curl is already mandatory (almost) and checked elsewhere
11207     if test "$enable_curl" = "no"; then
11208         AC_MSG_ERROR(["--without-webdav must be used when --disable-curl is used"])
11209     fi
11210     WITH_WEBDAV=TRUE
11211     ;;
11212 esac
11213 AC_SUBST(WITH_WEBDAV)
11215 dnl ===================================================================
11216 dnl Check for disabling cve_tests
11217 dnl ===================================================================
11218 AC_MSG_CHECKING([whether to execute CVE tests])
11219 if test "$enable_cve_tests" = "no"; then
11220     AC_MSG_RESULT([no])
11221     DISABLE_CVE_TESTS=TRUE
11222     AC_SUBST(DISABLE_CVE_TESTS)
11223 else
11224     AC_MSG_RESULT([yes])
11227 dnl ===================================================================
11228 dnl Check for system openssl
11229 dnl ===================================================================
11230 ENABLE_OPENSSL=
11231 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11232 if test "$enable_openssl" = "yes"; then
11233     AC_MSG_RESULT([no])
11234     ENABLE_OPENSSL=TRUE
11235     if test "$_os" = Darwin ; then
11236         # OpenSSL is deprecated when building for 10.7 or later.
11237         #
11238         # https://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11239         # https://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11241         with_system_openssl=no
11242         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11243     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11244             && test "$with_system_openssl" != "no"; then
11245         with_system_openssl=yes
11246         SYSTEM_OPENSSL=TRUE
11247         OPENSSL_CFLAGS=
11248         OPENSSL_LIBS="-lssl -lcrypto"
11249     else
11250         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11251         if test -n "${SYSTEM_OPENSSL}"; then
11252             AC_DEFINE([SYSTEM_OPENSSL])
11253         fi
11254     fi
11255     if test "$with_system_openssl" = "yes"; then
11256         AC_MSG_CHECKING([whether openssl supports SHA512])
11257         AC_LANG_PUSH([C])
11258         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11259             SHA512_CTX context;
11260 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11261         AC_LANG_POP(C)
11262     fi
11263 else
11264     AC_MSG_RESULT([yes])
11266     # warn that although OpenSSL is disabled, system libraries may depend on it
11267     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11268     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11271 AC_SUBST([ENABLE_OPENSSL])
11273 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11274     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11275         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11276         enable_cipher_openssl_backend=no
11277     else
11278         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11279     fi
11281 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11282 ENABLE_CIPHER_OPENSSL_BACKEND=
11283 if test "$enable_cipher_openssl_backend" = yes; then
11284     AC_MSG_RESULT([yes])
11285     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11286 else
11287     AC_MSG_RESULT([no])
11289 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11291 dnl ===================================================================
11292 dnl Select the crypto backends used by LO
11293 dnl ===================================================================
11295 if test "$build_crypto" = yes; then
11296     if test "$OS" = WNT; then
11297         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11298         AC_DEFINE([USE_CRYPTO_MSCAPI])
11299     elif test "$ENABLE_NSS" = TRUE; then
11300         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11301         AC_DEFINE([USE_CRYPTO_NSS])
11302     fi
11305 ARGON2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/argon2/include"
11306 if test "$COM" = "MSC"; then
11307     ARGON2_LIBS_internal="${WORKDIR}/UnpackedTarball/argon2/vs2015/build/Argon2OptDll.lib"
11308 else
11309     ARGON2_LIBS_internal="${WORKDIR}/UnpackedTarball/argon2/libargon2.a"
11311 libo_CHECK_SYSTEM_MODULE([argon2],[ARGON2],[libargon2])
11313 dnl ===================================================================
11314 dnl Check for system redland
11315 dnl ===================================================================
11316 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11317 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11318 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11319 if test "$with_system_redland" = "yes"; then
11320     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11321             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11322 else
11323     RAPTOR_MAJOR="0"
11324     RASQAL_MAJOR="3"
11325     REDLAND_MAJOR="0"
11327 AC_SUBST(RAPTOR_MAJOR)
11328 AC_SUBST(RASQAL_MAJOR)
11329 AC_SUBST(REDLAND_MAJOR)
11331 dnl ===================================================================
11332 dnl Check for system hunspell
11333 dnl ===================================================================
11334 AC_MSG_CHECKING([which libhunspell to use])
11335 if test "$with_system_hunspell" = "yes"; then
11336     AC_MSG_RESULT([external])
11337     SYSTEM_HUNSPELL=TRUE
11338     AC_LANG_PUSH([C++])
11339     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11340     if test "$HUNSPELL_PC" != "TRUE"; then
11341         AC_CHECK_HEADER(hunspell.hxx, [],
11342             [
11343             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11344             [AC_MSG_ERROR(hunspell headers not found.)], [])
11345             ], [])
11346         AC_CHECK_LIB([hunspell], [main], [:],
11347            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11348         HUNSPELL_LIBS=-lhunspell
11349     fi
11350     AC_LANG_POP([C++])
11351     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11352     FilterLibs "${HUNSPELL_LIBS}"
11353     HUNSPELL_LIBS="${filteredlibs}"
11354 else
11355     AC_MSG_RESULT([internal])
11356     SYSTEM_HUNSPELL=
11357     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11358     if test "$COM" = "MSC"; then
11359         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11360     else
11361         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11362     fi
11363     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11365 AC_SUBST(SYSTEM_HUNSPELL)
11366 AC_SUBST(HUNSPELL_CFLAGS)
11367 AC_SUBST(HUNSPELL_LIBS)
11369 dnl ===================================================================
11370 dnl Check for system zxcvbn
11371 dnl ===================================================================
11372 AC_MSG_CHECKING([which zxcvbn to use])
11373 if test "$with_system_zxcvbn" = "yes"; then
11374     AC_MSG_RESULT([external])
11375     SYSTEM_ZXCVBN=TRUE
11376     AC_CHECK_HEADER(zxcvbn.h, [],
11377        [ AC_MSG_ERROR(zxcvbn headers not found.)], [])
11378     AC_CHECK_LIB(zxcvbn, ZxcvbnMatch, [],
11379         [ AC_MSG_ERROR(zxcvbn library not found.)], [])
11380 else
11381    AC_MSG_RESULT([internal])
11382    BUILD_TYPE="$BUILD_TYPE ZXCVBN"
11383    SYSTEM_ZXCVBN=
11385 AC_SUBST(SYSTEM_ZXCVBN)
11387 dnl ===================================================================
11388 dnl Check for system zxing
11389 dnl ===================================================================
11390 AC_MSG_CHECKING([whether to use zxing])
11391 if test "$enable_zxing" = "no"; then
11392     AC_MSG_RESULT([no])
11393     ENABLE_ZXING=
11394     SYSTEM_ZXING=
11395 else
11396     AC_MSG_RESULT([yes])
11397     ENABLE_ZXING=TRUE
11398     AC_MSG_CHECKING([which libzxing to use])
11399     if test "$with_system_zxing" = "yes"; then
11400         AC_MSG_RESULT([external])
11401         SYSTEM_ZXING=TRUE
11402         ZXING_CFLAGS=
11403         AC_LANG_PUSH([C++])
11404         save_CXXFLAGS=$CXXFLAGS
11405         save_IFS=$IFS
11406         IFS=$P_SEP
11407         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11408             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11409             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11410             dnl unsetting follows the advice at <https://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11411             dnl a=commitdiff;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11412             dnl unsetting IFS."):
11413             IFS=$save_IFS
11414             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11415             dnl ignore them here:
11416             if test -z "$i"; then
11417                 continue
11418             fi
11419             dnl TODO: White space in $i would cause problems:
11420             CXXFLAGS="$save_CXXFLAGS ${CXXFLAGS_CXX11} -I$i/ZXing"
11421             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11422                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11423         done
11424         CXXFLAGS=$save_CXXFLAGS
11425         if test -z "$ZXING_CFLAGS"; then
11426             AC_MSG_ERROR(zxing headers not found.)
11427         fi
11428         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11429             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11430             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11431         AC_LANG_POP([C++])
11432         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11433         FilterLibs "${ZXING_LIBS}"
11434         ZXING_LIBS="${filteredlibs}"
11435     else
11436         AC_MSG_RESULT([internal])
11437         SYSTEM_ZXING=
11438         BUILD_TYPE="$BUILD_TYPE ZXING"
11439         ZXING_CFLAGS="-I${WORKDIR}/UnpackedTarball/zxing/core/src"
11440     fi
11441     if test "$ENABLE_ZXING" = TRUE; then
11442         AC_DEFINE(ENABLE_ZXING)
11443     fi
11444     AC_MSG_CHECKING([whether zxing::tosvg function is available])
11445     AC_LANG_PUSH([C++])
11446     save_CXXFLAGS=$CXXFLAGS
11447     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 $ZXING_CFLAGS"
11448     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11449             #include <BitMatrix.h>
11450             #include <BitMatrixIO.h>
11451             int main(){
11452                 ZXing::BitMatrix matrix(1, 1);
11453                 matrix.set(0, 0, true);
11454                 ZXing::ToSVG(matrix);
11455                 return 0;
11456             }
11457         ])], [
11458             AC_DEFINE([HAVE_ZXING_TOSVG],[1])
11459             AC_MSG_RESULT([yes])
11460         ], [AC_MSG_RESULT([no])])
11461     CXXFLAGS=$save_CXXFLAGS
11462     AC_LANG_POP([C++])
11463     AC_SUBST(HAVE_ZXING_TOSVG)
11465 AC_SUBST(SYSTEM_ZXING)
11466 AC_SUBST(ENABLE_ZXING)
11467 AC_SUBST(ZXING_CFLAGS)
11468 AC_SUBST(ZXING_LIBS)
11470 dnl ===================================================================
11471 dnl Check for system box2d
11472 dnl ===================================================================
11473 AC_MSG_CHECKING([which box2d to use])
11474 if test "$with_system_box2d" = "yes"; then
11475     AC_MSG_RESULT([external])
11476     SYSTEM_BOX2D=TRUE
11477     AC_LANG_PUSH([C++])
11478     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11479         [BOX2D_H_FOUND='FALSE'])
11480     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11481         _BOX2D_LIB=box2d
11482         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11483     else
11484         # fail this. there's no other alternative to check when we are here.
11485         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11486             [AC_MSG_ERROR(box2d headers not found.)])
11487         _BOX2D_LIB=Box2D
11488         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11489     fi
11490     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11491         [ AC_MSG_ERROR(box2d library not found.) ], [])
11492     BOX2D_LIBS=-l$_BOX2D_LIB
11493     AC_LANG_POP([C++])
11494     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11495     FilterLibs "${BOX2D_LIBS}"
11496     BOX2D_LIBS="${filteredlibs}"
11497 else
11498     AC_MSG_RESULT([internal])
11499     SYSTEM_BOX2D=
11500     BUILD_TYPE="$BUILD_TYPE BOX2D"
11502 AC_SUBST(SYSTEM_BOX2D)
11503 AC_SUBST(BOX2D_CFLAGS)
11504 AC_SUBST(BOX2D_LIBS)
11506 dnl ===================================================================
11507 dnl Checking for altlinuxhyph
11508 dnl ===================================================================
11509 AC_MSG_CHECKING([which altlinuxhyph to use])
11510 if test "$with_system_altlinuxhyph" = "yes"; then
11511     AC_MSG_RESULT([external])
11512     SYSTEM_HYPH=TRUE
11513     AC_CHECK_HEADER(hyphen.h, [],
11514        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11515     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11516        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11517        [#include <hyphen.h>])
11518     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11519         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11520     if test -z "$HYPHEN_LIB"; then
11521         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11522            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11523     fi
11524     if test -z "$HYPHEN_LIB"; then
11525         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11526            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11527     fi
11528 else
11529     AC_MSG_RESULT([internal])
11530     SYSTEM_HYPH=
11531     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11532     if test "$COM" = "MSC"; then
11533         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11534     else
11535         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11536     fi
11538 AC_SUBST(SYSTEM_HYPH)
11539 AC_SUBST(HYPHEN_LIB)
11541 dnl ===================================================================
11542 dnl Checking for mythes
11543 dnl ===================================================================
11544 AC_MSG_CHECKING([which mythes to use])
11545 if test "$with_system_mythes" = "yes"; then
11546     AC_MSG_RESULT([external])
11547     SYSTEM_MYTHES=TRUE
11548     AC_LANG_PUSH([C++])
11549     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11550     if test "$MYTHES_PKGCONFIG" = "no"; then
11551         AC_CHECK_HEADER(mythes.hxx, [],
11552             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11553         AC_CHECK_LIB([mythes-1.2], [main], [:],
11554             [ MYTHES_FOUND=no], [])
11555     if test "$MYTHES_FOUND" = "no"; then
11556         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11557                 [ MYTHES_FOUND=no], [])
11558     fi
11559     if test "$MYTHES_FOUND" = "no"; then
11560         AC_MSG_ERROR([mythes library not found!.])
11561     fi
11562     fi
11563     AC_LANG_POP([C++])
11564     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11565     FilterLibs "${MYTHES_LIBS}"
11566     MYTHES_LIBS="${filteredlibs}"
11567 else
11568     AC_MSG_RESULT([internal])
11569     SYSTEM_MYTHES=
11570     BUILD_TYPE="$BUILD_TYPE MYTHES"
11571     if test "$COM" = "MSC"; then
11572         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11573     else
11574         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11575     fi
11577 AC_SUBST(SYSTEM_MYTHES)
11578 AC_SUBST(MYTHES_CFLAGS)
11579 AC_SUBST(MYTHES_LIBS)
11581 dnl ===================================================================
11582 dnl How should we build the linear programming solver ?
11583 dnl ===================================================================
11585 ENABLE_COINMP=
11586 AC_MSG_CHECKING([whether to build with CoinMP])
11587 if test "$enable_coinmp" != "no"; then
11588     ENABLE_COINMP=TRUE
11589     AC_MSG_RESULT([yes])
11590     if test "$with_system_coinmp" = "yes"; then
11591         SYSTEM_COINMP=TRUE
11592         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11593         FilterLibs "${COINMP_LIBS}"
11594         COINMP_LIBS="${filteredlibs}"
11595     else
11596         BUILD_TYPE="$BUILD_TYPE COINMP"
11597     fi
11598 else
11599     AC_MSG_RESULT([no])
11601 AC_SUBST(ENABLE_COINMP)
11602 AC_SUBST(SYSTEM_COINMP)
11603 AC_SUBST(COINMP_CFLAGS)
11604 AC_SUBST(COINMP_LIBS)
11606 ENABLE_LPSOLVE=
11607 AC_MSG_CHECKING([whether to build with lpsolve])
11608 if test "$enable_lpsolve" != "no"; then
11609     ENABLE_LPSOLVE=TRUE
11610     AC_MSG_RESULT([yes])
11611 else
11612     AC_MSG_RESULT([no])
11614 AC_SUBST(ENABLE_LPSOLVE)
11616 if test "$ENABLE_LPSOLVE" = TRUE; then
11617     AC_MSG_CHECKING([which lpsolve to use])
11618     if test "$with_system_lpsolve" = "yes"; then
11619         AC_MSG_RESULT([external])
11620         SYSTEM_LPSOLVE=TRUE
11621         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11622            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11623         save_LIBS=$LIBS
11624         # some systems need this. Like Ubuntu...
11625         AC_CHECK_LIB(m, floor)
11626         AC_CHECK_LIB(dl, dlopen)
11627         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11628             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11629         LIBS=$save_LIBS
11630     else
11631         AC_MSG_RESULT([internal])
11632         SYSTEM_LPSOLVE=
11633         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11634     fi
11636 AC_SUBST(SYSTEM_LPSOLVE)
11638 dnl ===================================================================
11639 dnl Checking for libexttextcat
11640 dnl ===================================================================
11641 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11642 if test "$with_system_libexttextcat" = "yes"; then
11643     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11645 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11647 dnl ===================================================================
11648 dnl Checking for libnumbertext
11649 dnl ===================================================================
11650 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11651 if test "$with_system_libnumbertext" = "yes"; then
11652     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11653     SYSTEM_LIBNUMBERTEXT=YES
11654 else
11655     SYSTEM_LIBNUMBERTEXT=
11657 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11658 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11660 dnl ***************************************
11661 dnl testing libc version for Linux...
11662 dnl ***************************************
11663 if test "$_os" = "Linux"; then
11664     AC_MSG_CHECKING([whether the libc is recent enough])
11665     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11666     #include <features.h>
11667     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11668     #error glibc >= 2.1 is required
11669     #endif
11670     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11673 dnl =========================================
11674 dnl Check for uuidgen
11675 dnl =========================================
11676 if test "$_os" = "WINNT"; then
11677     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11678     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11679     UUIDGEN=uuidgen.exe
11680     AC_SUBST(UUIDGEN)
11681 else
11682     AC_PATH_PROG([UUIDGEN], [uuidgen])
11683     if test -z "$UUIDGEN"; then
11684         AC_MSG_WARN([uuid is needed for building installation sets])
11685     fi
11688 dnl ***************************************
11689 dnl Checking for bison and flex
11690 dnl ***************************************
11691 AC_PATH_PROG(BISON, bison)
11692 if test -z "$BISON"; then
11693     AC_MSG_ERROR([no bison found in \$PATH, install it])
11694 else
11695     AC_MSG_CHECKING([the bison version])
11696     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11697     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11698     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11699     dnl cause
11700     dnl
11701     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]
11702     dnl   typedef union YYSTYPE
11703     dnl           ~~~~~~^~~~~~~
11704     dnl
11705     dnl while at least 3.4.1 is know to be good:
11706     if test "$COMPILER_PLUGINS" = TRUE; then
11707         if test "$_bison_longver" -lt 2004; then
11708             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11709         fi
11710     else
11711         if test "$_bison_longver" -lt 2000; then
11712             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11713         fi
11714     fi
11716 AC_SUBST([BISON])
11718 AC_PATH_PROG(FLEX, flex)
11719 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11720     FLEX=`cygpath -m $FLEX`
11722 if test -z "$FLEX"; then
11723     AC_MSG_ERROR([no flex found in \$PATH, install it])
11724 else
11725     AC_MSG_CHECKING([the flex version])
11726     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11727     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11728         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11729     fi
11731 AC_SUBST([FLEX])
11733 AC_PATH_PROG(DIFF, diff)
11734 if test -z "$DIFF"; then
11735     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11737 AC_SUBST([DIFF])
11739 AC_PATH_PROG(UNIQ, uniq)
11740 if test -z "$UNIQ"; then
11741     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11743 AC_SUBST([UNIQ])
11745 dnl ***************************************
11746 dnl Checking for patch
11747 dnl ***************************************
11748 AC_PATH_PROG(PATCH, patch)
11749 if test -z "$PATCH"; then
11750     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11753 dnl On Solaris or macOS, check if --with-gnu-patch was used
11754 if test "$_os" = "SunOS" -o "$_os" = "Darwin" -o "$_os" = "FreeBSD"; then
11755     if test -z "$with_gnu_patch"; then
11756         GNUPATCH=$PATCH
11757     else
11758         if test -x "$with_gnu_patch"; then
11759             GNUPATCH=$with_gnu_patch
11760         else
11761             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11762         fi
11763     fi
11765     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11766     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11767         AC_MSG_RESULT([yes])
11768     else
11769         if $GNUPATCH --version | grep "2\.0-.*-Apple" >/dev/null 2>/dev/null; then
11770             AC_MSG_RESULT([no, but accepted (Apple patch)])
11771             add_warning "patch utility is not GNU patch. Apple's patch should work OK, but it might experience issues where GNU patch doesn't."
11772         else
11773             AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11774         fi
11775     fi
11776 else
11777     GNUPATCH=$PATCH
11780 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11781     GNUPATCH=`cygpath -m $GNUPATCH`
11784 dnl We also need to check for --with-gnu-cp
11786 if test -z "$with_gnu_cp"; then
11787     # check the place where the good stuff is hidden on Solaris...
11788     if test -x /usr/gnu/bin/cp; then
11789         GNUCP=/usr/gnu/bin/cp
11790     else
11791         AC_PATH_PROGS(GNUCP, gnucp cp)
11792     fi
11793     if test -z $GNUCP; then
11794         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11795     fi
11796 else
11797     if test -x "$with_gnu_cp"; then
11798         GNUCP=$with_gnu_cp
11799     else
11800         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11801     fi
11804 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11805     GNUCP=`cygpath -m $GNUCP`
11808 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11809 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11810     AC_MSG_RESULT([yes])
11811 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11812     AC_MSG_RESULT([yes])
11813 else
11814     case "$build_os" in
11815     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*)
11816         x_GNUCP=[\#]
11817         GNUCP=''
11818         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11819         ;;
11820     *)
11821         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11822         ;;
11823     esac
11826 AC_SUBST(GNUPATCH)
11827 AC_SUBST(GNUCP)
11828 AC_SUBST(x_GNUCP)
11830 dnl ***************************************
11831 dnl testing assembler path
11832 dnl ***************************************
11833 ML_EXE=""
11834 if test "$_os" = "WINNT"; then
11835     case "$WIN_HOST_ARCH" in
11836     x86) assembler=ml.exe ;;
11837     x64) assembler=ml64.exe ;;
11838     arm64) assembler=armasm64.exe ;;
11839     esac
11841     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11842     if test -f "$MSVC_HOST_PATH/$assembler"; then
11843         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11844         AC_MSG_RESULT([$ML_EXE])
11845     else
11846         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11847     fi
11850 AC_SUBST(ML_EXE)
11852 dnl ===================================================================
11853 dnl We need zip and unzip
11854 dnl ===================================================================
11855 AC_PATH_PROG(ZIP, zip)
11856 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11857 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11858     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],,)
11861 AC_PATH_PROG(UNZIP, unzip)
11862 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11864 dnl ===================================================================
11865 dnl Zip must be a specific type for different build types.
11866 dnl ===================================================================
11867 if test $build_os = cygwin; then
11868     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11869         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11870     fi
11873 dnl ===================================================================
11874 dnl We need touch with -h option support.
11875 dnl ===================================================================
11876 AC_PATH_PROG(TOUCH, touch)
11877 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11878 touch "$WARNINGS_FILE"
11879 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11880     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],,)
11883 dnl ===================================================================
11884 dnl Check for system epoxy
11885 dnl ===================================================================
11886 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11887 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11889 dnl ===================================================================
11890 dnl Show which vclplugs will be built.
11891 dnl ===================================================================
11892 R=""
11894 libo_ENABLE_VCLPLUG([gen])
11895 libo_ENABLE_VCLPLUG([gtk3])
11896 libo_ENABLE_VCLPLUG([gtk3_kde5])
11897 libo_ENABLE_VCLPLUG([gtk4])
11898 libo_ENABLE_VCLPLUG([kf5])
11899 libo_ENABLE_VCLPLUG([kf6])
11900 libo_ENABLE_VCLPLUG([qt5])
11901 libo_ENABLE_VCLPLUG([qt6])
11903 if test "$_os" = "WINNT"; then
11904     R="$R win"
11905 elif test "$_os" = "Darwin"; then
11906     R="$R osx"
11907 elif test "$_os" = "iOS"; then
11908     R="ios"
11909 elif test "$_os" = Android; then
11910     R="android"
11913 build_vcl_plugins="$R"
11914 if test -z "$build_vcl_plugins"; then
11915     build_vcl_plugins=" none"
11917 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11918 VCL_PLUGIN_INFO=$R
11919 AC_SUBST([VCL_PLUGIN_INFO])
11921 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11922     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11925 dnl ===================================================================
11926 dnl Check for GTK libraries
11927 dnl ===================================================================
11929 GTK3_CFLAGS=""
11930 GTK3_LIBS=""
11931 ENABLE_GTKTILEDVIEWER=""
11932 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11933     if test "$with_system_cairo" = no; then
11934         add_warning 'Non-system cairo combined with gtk3 is known to cause trouble (eg. broken image in the splashscreen). Use --with-system-cairo unless you know what you are doing.'
11935     fi
11936     : ${with_system_cairo:=yes}
11937     PKG_CHECK_MODULES(GTK3, gtk+-3.0 >= 3.20 gtk+-unix-print-3.0 gmodule-no-export-2.0 glib-2.0 >= 2.38 atk >= 2.28.1 cairo)
11938     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11939     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11940     FilterLibs "${GTK3_LIBS}"
11941     GTK3_LIBS="${filteredlibs}"
11943     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11944     if test "$with_system_epoxy" != "yes"; then
11945         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11946         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11947                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11948     fi
11949 elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
11950     PathFormat "${with_gtk3_build}/lib/pkgconfig"
11951     if test "$build_os" = "cygwin"; then
11952         dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only "/cygdrive/c/..."
11953         formatted_path_unix=`cygpath -au "$formatted_path_unix"`
11954     fi
11956     PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
11957     PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 gtk+-3.0)
11958     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11959     FilterLibs "${GTK3_LIBS}"
11960     GTK3_LIBS="${filteredlibs}"
11961     ENABLE_GTKTILEDVIEWER="yes"
11963 AC_SUBST(GTK3_LIBS)
11964 AC_SUBST(GTK3_CFLAGS)
11965 AC_SUBST(ENABLE_GTKTILEDVIEWER)
11967 GTK4_CFLAGS=""
11968 GTK4_LIBS=""
11969 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11970     if test "$with_system_cairo" = no; then
11971         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11972     fi
11973     : ${with_system_cairo:=yes}
11974     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11975     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11976     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11977     FilterLibs "${GTK4_LIBS}"
11978     GTK4_LIBS="${filteredlibs}"
11980     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11981     if test "$with_system_epoxy" != "yes"; then
11982         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11983         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11984                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11985     fi
11987 AC_SUBST(GTK4_LIBS)
11988 AC_SUBST(GTK4_CFLAGS)
11990 if test "$enable_introspection" = yes; then
11991     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11992         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11993     else
11994         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
11995     fi
11998 # AT-SPI2 tests require gtk3, xvfb-run, dbus-launch and atspi-2
11999 if ! test "$ENABLE_GTK3" = TRUE; then
12000     if test "$enable_atspi_tests" = yes; then
12001         AC_MSG_ERROR([--enable-atspi-tests requires --enable-gtk3])
12002     fi
12003     enable_atspi_tests=no
12005 if ! test "$enable_atspi_tests" = no; then
12006     AC_PATH_PROGS([XVFB_RUN], [xvfb-run], no)
12007     if ! test "$XVFB_RUN" = no; then
12008         dnl make sure the found xvfb-run actually works
12009         AC_MSG_CHECKING([whether $XVFB_RUN works...])
12010         if $XVFB_RUN --auto-servernum true >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
12011             AC_MSG_RESULT([yes])
12012         else
12013             AC_MSG_RESULT([no])
12014             XVFB_RUN=no
12015         fi
12016     fi
12017     if test "$XVFB_RUN" = no; then
12018         if test "$enable_atspi_tests" = yes; then
12019             AC_MSG_ERROR([xvfb-run required by --enable-atspi-tests not found])
12020         fi
12021         enable_atspi_tests=no
12022     fi
12024 if ! test "$enable_atspi_tests" = no; then
12025     AC_PATH_PROGS([DBUS_LAUNCH], [dbus-launch], no)
12026     if test "$DBUS_LAUNCH" = no; then
12027         if test "$enable_atspi_tests" = yes; then
12028             AC_MSG_ERROR([dbus-launch required by --enable-atspi-tests not found])
12029         fi
12030         enable_atspi_tests=no
12031     fi
12033 if ! test "$enable_atspi_tests" = no; then
12034     PKG_CHECK_MODULES([ATSPI2], [atspi-2 gobject-2.0],,
12035                       [if test "$enable_atspi_tests" = yes; then
12036                            AC_MSG_ERROR([$ATSPI2_PKG_ERRORS])
12037                        else
12038                            enable_atspi_tests=no
12039                        fi])
12041 if ! test "x$enable_atspi_tests" = xno; then
12042     PKG_CHECK_MODULES([ATSPI2_2_32], [atspi-2 >= 2.32],
12043                       [have_atspi_scroll_to=1],
12044                       [have_atspi_scroll_to=0])
12045     AC_DEFINE_UNQUOTED([HAVE_ATSPI2_SCROLL_TO], [$have_atspi_scroll_to],
12046                        [Whether AT-SPI2 has the scrollTo API])
12048 ENABLE_ATSPI_TESTS=
12049 test "$enable_atspi_tests" = no || ENABLE_ATSPI_TESTS=TRUE
12050 AC_SUBST([ENABLE_ATSPI_TESTS])
12052 dnl ===================================================================
12053 dnl check for dbus support
12054 dnl ===================================================================
12055 ENABLE_DBUS=""
12056 DBUS_CFLAGS=""
12057 DBUS_LIBS=""
12058 DBUS_GLIB_CFLAGS=""
12059 DBUS_GLIB_LIBS=""
12060 DBUS_HAVE_GLIB=""
12062 if test "$enable_dbus" = "no"; then
12063     test_dbus=no
12066 AC_MSG_CHECKING([whether to enable DBUS support])
12067 if test "$test_dbus" = "yes"; then
12068     ENABLE_DBUS="TRUE"
12069     AC_MSG_RESULT([yes])
12070     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
12071     AC_DEFINE(ENABLE_DBUS)
12072     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12073     FilterLibs "${DBUS_LIBS}"
12074     DBUS_LIBS="${filteredlibs}"
12076     # Glib is needed for BluetoothServer
12077     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
12078     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
12079         [
12080             DBUS_HAVE_GLIB="TRUE"
12081             AC_DEFINE(DBUS_HAVE_GLIB,1)
12082         ],
12083         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
12084     )
12085 else
12086     AC_MSG_RESULT([no])
12089 AC_SUBST(ENABLE_DBUS)
12090 AC_SUBST(DBUS_CFLAGS)
12091 AC_SUBST(DBUS_LIBS)
12092 AC_SUBST(DBUS_GLIB_CFLAGS)
12093 AC_SUBST(DBUS_GLIB_LIBS)
12094 AC_SUBST(DBUS_HAVE_GLIB)
12096 AC_MSG_CHECKING([whether to enable Impress remote control])
12097 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
12098     AC_MSG_RESULT([yes])
12099     ENABLE_SDREMOTE=TRUE
12100     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
12101         <true/>"
12102     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
12104     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
12105         # The Bluetooth code doesn't compile with macOS SDK 10.15
12106         if test "$enable_sdremote_bluetooth" = yes; then
12107             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
12108         fi
12109         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
12110         enable_sdremote_bluetooth=no
12111     fi
12112     # If not explicitly enabled or disabled, default
12113     if test -z "$enable_sdremote_bluetooth"; then
12114         case "$OS" in
12115         LINUX|MACOSX|WNT)
12116             # Default to yes for these
12117             enable_sdremote_bluetooth=yes
12118             ;;
12119         *)
12120             # otherwise no
12121             enable_sdremote_bluetooth=no
12122             ;;
12123         esac
12124     fi
12125     # $enable_sdremote_bluetooth is guaranteed non-empty now
12127     if test "$enable_sdremote_bluetooth" != "no"; then
12128         if test "$OS" = "LINUX"; then
12129             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
12130                 AC_MSG_RESULT([yes])
12131                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
12132                 dnl ===================================================================
12133                 dnl Check for system bluez
12134                 dnl ===================================================================
12135                 AC_MSG_CHECKING([which Bluetooth header to use])
12136                 if test "$with_system_bluez" = "yes"; then
12137                     AC_MSG_RESULT([external])
12138                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
12139                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
12140                     SYSTEM_BLUEZ=TRUE
12141                 else
12142                     AC_MSG_RESULT([internal])
12143                     SYSTEM_BLUEZ=
12144                 fi
12145             else
12146                 AC_MSG_RESULT([no, dbus disabled])
12147                 ENABLE_SDREMOTE_BLUETOOTH=
12148                 SYSTEM_BLUEZ=
12149             fi
12150         else
12151             AC_MSG_RESULT([yes])
12152             ENABLE_SDREMOTE_BLUETOOTH=TRUE
12153             SYSTEM_BLUEZ=
12154             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
12155         <key>com.apple.security.device.bluetooth</key>
12156         <true/>"
12157         fi
12158     else
12159         AC_MSG_RESULT([no])
12160         ENABLE_SDREMOTE_BLUETOOTH=
12161         SYSTEM_BLUEZ=
12162     fi
12163 else
12164     ENABLE_SDREMOTE=
12165     SYSTEM_BLUEZ=
12166     AC_MSG_RESULT([no])
12168 AC_SUBST(ENABLE_SDREMOTE)
12169 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
12170 AC_SUBST(SDREMOTE_ENTITLEMENT)
12171 AC_SUBST(SYSTEM_BLUEZ)
12173 dnl ===================================================================
12174 dnl Check whether to enable GIO support
12175 dnl ===================================================================
12176 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
12177     AC_MSG_CHECKING([whether to enable GIO support])
12178     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
12179         dnl Need at least 2.26 for the dbus support.
12180         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
12181                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
12182         if test "$ENABLE_GIO" = "TRUE"; then
12183             AC_DEFINE(ENABLE_GIO)
12184             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12185             FilterLibs "${GIO_LIBS}"
12186             GIO_LIBS="${filteredlibs}"
12187         fi
12188     else
12189         AC_MSG_RESULT([no])
12190     fi
12192 AC_SUBST(ENABLE_GIO)
12193 AC_SUBST(GIO_CFLAGS)
12194 AC_SUBST(GIO_LIBS)
12197 dnl ===================================================================
12199 SPLIT_APP_MODULES=""
12200 if test "$enable_split_app_modules" = "yes"; then
12201     SPLIT_APP_MODULES="TRUE"
12203 AC_SUBST(SPLIT_APP_MODULES)
12205 SPLIT_OPT_FEATURES=""
12206 if test "$enable_split_opt_features" = "yes"; then
12207     SPLIT_OPT_FEATURES="TRUE"
12209 AC_SUBST(SPLIT_OPT_FEATURES)
12211 dnl ===================================================================
12212 dnl Check whether the GStreamer libraries are available.
12213 dnl ===================================================================
12215 ENABLE_GSTREAMER_1_0=""
12217 if test "$test_gstreamer_1_0" = yes; then
12219     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
12220     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
12221         ENABLE_GSTREAMER_1_0="TRUE"
12222         AC_MSG_RESULT([yes])
12223         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
12224         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12225         FilterLibs "${GSTREAMER_1_0_LIBS}"
12226         GSTREAMER_1_0_LIBS="${filteredlibs}"
12227         AC_DEFINE(ENABLE_GSTREAMER_1_0)
12228     else
12229         AC_MSG_RESULT([no])
12230     fi
12232 AC_SUBST(GSTREAMER_1_0_CFLAGS)
12233 AC_SUBST(GSTREAMER_1_0_LIBS)
12234 AC_SUBST(ENABLE_GSTREAMER_1_0)
12236 ENABLE_OPENGL_TRANSITIONS=
12237 ENABLE_OPENGL_CANVAS=
12238 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
12239    : # disable
12240 elif test "$_os" = "Darwin"; then
12241     # We use frameworks on macOS, no need for detail checks
12242     ENABLE_OPENGL_TRANSITIONS=TRUE
12243     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12244     ENABLE_OPENGL_CANVAS=TRUE
12245 elif test $_os = WINNT; then
12246     ENABLE_OPENGL_TRANSITIONS=TRUE
12247     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12248     ENABLE_OPENGL_CANVAS=TRUE
12249 else
12250     if test "$USING_X11" = TRUE; then
12251         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
12252         ENABLE_OPENGL_TRANSITIONS=TRUE
12253         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12254         ENABLE_OPENGL_CANVAS=TRUE
12255     fi
12258 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
12259 AC_SUBST(ENABLE_OPENGL_CANVAS)
12261 dnl =================================================
12262 dnl Check whether to build with OpenCL support.
12263 dnl =================================================
12265 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
12266     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
12267     # platform (optional at run-time, used through clew).
12268     BUILD_TYPE="$BUILD_TYPE OPENCL"
12269     AC_DEFINE(HAVE_FEATURE_OPENCL)
12272 dnl =================================================
12273 dnl Check whether to build with dconf support.
12274 dnl =================================================
12276 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
12277     PKG_CHECK_MODULES([DCONF], [dconf >= 0.40.0], [], [
12278         if test "$enable_dconf" = yes; then
12279             AC_MSG_ERROR([dconf not found])
12280         else
12281             enable_dconf=no
12282         fi])
12284 AC_MSG_CHECKING([whether to enable dconf])
12285 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
12286     DCONF_CFLAGS=
12287     DCONF_LIBS=
12288     ENABLE_DCONF=
12289     AC_MSG_RESULT([no])
12290 else
12291     ENABLE_DCONF=TRUE
12292     AC_DEFINE(ENABLE_DCONF)
12293     AC_MSG_RESULT([yes])
12295 AC_SUBST([DCONF_CFLAGS])
12296 AC_SUBST([DCONF_LIBS])
12297 AC_SUBST([ENABLE_DCONF])
12299 # pdf import?
12300 AC_MSG_CHECKING([whether to build the PDF import feature])
12301 ENABLE_PDFIMPORT=
12302 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12303     AC_MSG_RESULT([yes])
12304     ENABLE_PDFIMPORT=TRUE
12305     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12306 else
12307     AC_MSG_RESULT([no])
12310 # Pdfium?
12311 AC_MSG_CHECKING([whether to build PDFium])
12312 ENABLE_PDFIUM=
12313 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12314     AC_MSG_RESULT([yes])
12315     ENABLE_PDFIUM=TRUE
12316     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12317 else
12318     AC_MSG_RESULT([no])
12320 AC_SUBST(ENABLE_PDFIUM)
12322 if test "$ENABLE_PDFIUM" = "TRUE"; then
12323     AC_MSG_CHECKING([which OpenJPEG library to use])
12324     if test "$with_system_openjpeg" = "yes"; then
12325         SYSTEM_OPENJPEG2=TRUE
12326         AC_MSG_RESULT([external])
12327         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12328         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12329         FilterLibs "${OPENJPEG2_LIBS}"
12330         OPENJPEG2_LIBS="${filteredlibs}"
12331     else
12332         SYSTEM_OPENJPEG2=FALSE
12333         AC_MSG_RESULT([internal])
12334     fi
12336     AC_MSG_CHECKING([which Abseil library to use])
12337     if test "$with_system_abseil" = "yes"; then
12338         AC_MSG_RESULT([external])
12339         SYSTEM_ABSEIL=TRUE
12340         AC_LANG_PUSH([C++])
12341         PKG_CHECK_MODULES(ABSEIL, absl_bad_optional_access absl_bad_variant_access absl_inlined_vector )
12342         AC_LANG_POP([C++])
12343         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12344         FilterLibs "${ABSEIL_LIBS}"
12345         ABSEIL_LIBS="${filteredlibs}"
12346     else
12347         AC_MSG_RESULT([internal])
12348     fi
12350 AC_SUBST(SYSTEM_OPENJPEG2)
12351 AC_SUBST(SYSTEM_ABSEIL)
12352 AC_SUBST(ABSEIL_CFLAGS)
12353 AC_SUBST(ABSEIL_LIBS)
12355 dnl ===================================================================
12356 dnl Check for poppler
12357 dnl ===================================================================
12358 ENABLE_POPPLER=
12359 AC_MSG_CHECKING([whether to build Poppler])
12360 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12361     AC_MSG_RESULT([yes])
12362     ENABLE_POPPLER=TRUE
12363     AC_DEFINE(HAVE_FEATURE_POPPLER)
12364 else
12365     AC_MSG_RESULT([no])
12367 AC_SUBST(ENABLE_POPPLER)
12369 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12370     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12373 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12374     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12377 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12378     dnl ===================================================================
12379     dnl Check for system poppler
12380     dnl ===================================================================
12381     AC_MSG_CHECKING([which PDF import poppler to use])
12382     if test "$with_system_poppler" = "yes"; then
12383         AC_MSG_RESULT([external])
12384         SYSTEM_POPPLER=TRUE
12385         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12386         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12387         FilterLibs "${POPPLER_LIBS}"
12388         POPPLER_LIBS="${filteredlibs}"
12389     else
12390         AC_MSG_RESULT([internal])
12391         SYSTEM_POPPLER=
12392         BUILD_TYPE="$BUILD_TYPE POPPLER"
12393     fi
12394     AC_DEFINE([ENABLE_PDFIMPORT],1)
12396 AC_SUBST(ENABLE_PDFIMPORT)
12397 AC_SUBST(SYSTEM_POPPLER)
12398 AC_SUBST(POPPLER_CFLAGS)
12399 AC_SUBST(POPPLER_LIBS)
12401 # Skia?
12402 ENABLE_SKIA=
12403 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12404     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12405     if test "$SYSTEM_FREETYPE" = TRUE; then
12406         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12407             [skia_freetype_ok=yes],
12408             [skia_freetype_ok=no])
12409     else # internal is ok
12410         skia_freetype_ok=yes
12411     fi
12412     AC_MSG_CHECKING([whether to build Skia])
12413     if test "$skia_freetype_ok" = "yes"; then
12414         if test "$enable_skia" = "debug"; then
12415             AC_MSG_RESULT([yes (debug)])
12416             ENABLE_SKIA_DEBUG=TRUE
12417         else
12418             AC_MSG_RESULT([yes])
12419             ENABLE_SKIA_DEBUG=
12420         fi
12421         ENABLE_SKIA=TRUE
12422         if test "$ENDIANNESS" = "big" && test "$ENABLE_SKIA" = "TRUE"; then
12423             AC_MSG_ERROR([skia doesn't work/isn't supported upstream on big-endian. Use --disable-skia])
12424         fi
12426         AC_DEFINE(HAVE_FEATURE_SKIA)
12427         BUILD_TYPE="$BUILD_TYPE SKIA"
12429         if test "$OS" = "MACOSX"; then
12430             AC_DEFINE(SK_GANESH,1)
12431             AC_DEFINE(SK_METAL,1)
12432             SKIA_GPU=METAL
12433             AC_SUBST(SKIA_GPU)
12434         else
12435             AC_DEFINE(SK_GANESH,1)
12436             AC_DEFINE(SK_VULKAN,1)
12437             SKIA_GPU=VULKAN
12438             AC_SUBST(SKIA_GPU)
12439         fi
12440     else
12441         AC_MSG_RESULT([no (freetype too old)])
12442         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12443     fi
12445 else
12446     AC_MSG_CHECKING([whether to build Skia])
12447     AC_MSG_RESULT([no])
12449 AC_SUBST(ENABLE_SKIA)
12450 AC_SUBST(ENABLE_SKIA_DEBUG)
12452 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12453 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12454 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12455 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12456 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12457 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12458 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12459 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12460 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12461 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12462 LO_CLANG_VERSION=
12463 HAVE_LO_CLANG_DLLEXPORTINLINES=
12465 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12466     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12467         AC_MSG_CHECKING([for Clang])
12468         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12469     else
12470         if test "$_os" = "WINNT"; then
12471             AC_MSG_CHECKING([for clang-cl])
12472             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12473                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12474             elif test -n "$PROGRAMFILES" -a -x "$(cygpath -u "$PROGRAMFILES/LLVM/bin/clang-cl.exe")"; then
12475                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12476             elif test -x "$(cygpath -u "c:/Program Files/LLVM/bin/clang-cl.exe")"; then
12477                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12478             fi
12479             if test -n "$LO_CLANG_CC"; then
12480                 dnl explicitly set -m32/-m64
12481                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12482                 LO_CLANG_CXX="$LO_CLANG_CC"
12483                 AC_MSG_RESULT([$LO_CLANG_CC])
12484             else
12485                 AC_MSG_RESULT([no])
12486             fi
12488             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12489             echo "#include <stdlib.h>" > conftest.c
12490             LO_CLANG_SHOWINCLUDES_PREFIX=`VSLANG=1033 $LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12491                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12492             rm -f conftest.c conftest.obj
12493             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12494                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12495             else
12496                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12497             fi
12498         else
12499             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12500             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12501         fi
12502     fi
12503     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12504         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12505         LO_CLANG_VERSION=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12506         if test "$LO_CLANG_VERSION" -lt 50002; then
12507             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12508             LO_CLANG_CC=
12509             LO_CLANG_CXX=
12510         fi
12511     fi
12512     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12513         save_CXX="$CXX"
12514         CXX="$LO_CLANG_CXX"
12515         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12516         AC_LANG_PUSH([C++])
12517         save_CXXFLAGS=$CXXFLAGS
12518         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12519         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12520                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12521                 AC_MSG_RESULT([yes])
12522             ], [AC_MSG_RESULT([no])])
12523         CXXFLAGS=$save_CXXFLAGS
12524         AC_LANG_POP([C++])
12525         CXX="$save_CXX"
12526         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12527             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.])
12528         fi
12529     fi
12530     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12531         # Skia is the default on Windows and Mac, so hard-require Clang.
12532         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12533         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12534             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12535         else
12536             AC_MSG_WARN([Clang compiler not found.])
12537         fi
12538     else
12540         save_CXX="$CXX"
12541         CXX="$LO_CLANG_CXX"
12542         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12543         flag_sse2=-msse2
12544         flag_ssse3=-mssse3
12545         flag_sse41=-msse4.1
12546         flag_sse42=-msse4.2
12547         flag_avx=-mavx
12548         flag_avx2=-mavx2
12549         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12550         flag_avx512f=-mavx512f
12551         flag_f16c=-mf16c
12552         flag_fma=-mfma
12554         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12555         AC_LANG_PUSH([C++])
12556         save_CXXFLAGS=$CXXFLAGS
12557         CXXFLAGS="$CXXFLAGS $flag_sse2"
12558         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12559             #include <emmintrin.h>
12560             int main () {
12561                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12562                 c = _mm_xor_si128 (a, b);
12563                 return 0;
12564             }
12565             ])],
12566             [can_compile_sse2=yes],
12567             [can_compile_sse2=no])
12568         AC_LANG_POP([C++])
12569         CXXFLAGS=$save_CXXFLAGS
12570         AC_MSG_RESULT([${can_compile_sse2}])
12571         if test "${can_compile_sse2}" = "yes" ; then
12572             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12573         fi
12575         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12576         AC_LANG_PUSH([C++])
12577         save_CXXFLAGS=$CXXFLAGS
12578         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12579         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12580             #include <tmmintrin.h>
12581             int main () {
12582                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12583                 c = _mm_maddubs_epi16 (a, b);
12584                 return 0;
12585             }
12586             ])],
12587             [can_compile_ssse3=yes],
12588             [can_compile_ssse3=no])
12589         AC_LANG_POP([C++])
12590         CXXFLAGS=$save_CXXFLAGS
12591         AC_MSG_RESULT([${can_compile_ssse3}])
12592         if test "${can_compile_ssse3}" = "yes" ; then
12593             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12594         fi
12596         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12597         AC_LANG_PUSH([C++])
12598         save_CXXFLAGS=$CXXFLAGS
12599         CXXFLAGS="$CXXFLAGS $flag_sse41"
12600         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12601             #include <smmintrin.h>
12602             int main () {
12603                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12604                 c = _mm_cmpeq_epi64 (a, b);
12605                 return 0;
12606             }
12607             ])],
12608             [can_compile_sse41=yes],
12609             [can_compile_sse41=no])
12610         AC_LANG_POP([C++])
12611         CXXFLAGS=$save_CXXFLAGS
12612         AC_MSG_RESULT([${can_compile_sse41}])
12613         if test "${can_compile_sse41}" = "yes" ; then
12614             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12615         fi
12617         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12618         AC_LANG_PUSH([C++])
12619         save_CXXFLAGS=$CXXFLAGS
12620         CXXFLAGS="$CXXFLAGS $flag_sse42"
12621         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12622             #include <nmmintrin.h>
12623             int main () {
12624                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12625                 c = _mm_cmpgt_epi64 (a, b);
12626                 return 0;
12627             }
12628             ])],
12629             [can_compile_sse42=yes],
12630             [can_compile_sse42=no])
12631         AC_LANG_POP([C++])
12632         CXXFLAGS=$save_CXXFLAGS
12633         AC_MSG_RESULT([${can_compile_sse42}])
12634         if test "${can_compile_sse42}" = "yes" ; then
12635             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12636         fi
12638         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12639         AC_LANG_PUSH([C++])
12640         save_CXXFLAGS=$CXXFLAGS
12641         CXXFLAGS="$CXXFLAGS $flag_avx"
12642         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12643             #include <immintrin.h>
12644             int main () {
12645                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12646                 c = _mm256_xor_ps(a, b);
12647                 return 0;
12648             }
12649             ])],
12650             [can_compile_avx=yes],
12651             [can_compile_avx=no])
12652         AC_LANG_POP([C++])
12653         CXXFLAGS=$save_CXXFLAGS
12654         AC_MSG_RESULT([${can_compile_avx}])
12655         if test "${can_compile_avx}" = "yes" ; then
12656             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12657         fi
12659         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12660         AC_LANG_PUSH([C++])
12661         save_CXXFLAGS=$CXXFLAGS
12662         CXXFLAGS="$CXXFLAGS $flag_avx2"
12663         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12664             #include <immintrin.h>
12665             int main () {
12666                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12667                 c = _mm256_maddubs_epi16(a, b);
12668                 return 0;
12669             }
12670             ])],
12671             [can_compile_avx2=yes],
12672             [can_compile_avx2=no])
12673         AC_LANG_POP([C++])
12674         CXXFLAGS=$save_CXXFLAGS
12675         AC_MSG_RESULT([${can_compile_avx2}])
12676         if test "${can_compile_avx2}" = "yes" ; then
12677             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12678         fi
12680         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12681         AC_LANG_PUSH([C++])
12682         save_CXXFLAGS=$CXXFLAGS
12683         CXXFLAGS="$CXXFLAGS $flag_avx512"
12684         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12685             #include <immintrin.h>
12686             int main () {
12687                 __m512i a = _mm512_loadu_si512(0);
12688                 __m512d v1 = _mm512_load_pd(0);
12689                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12690                 __m512d v2 = _mm512_abs_pd(v1);
12691                 return 0;
12692             }
12693             ])],
12694             [can_compile_avx512=yes],
12695             [can_compile_avx512=no])
12696         AC_LANG_POP([C++])
12697         CXXFLAGS=$save_CXXFLAGS
12698         AC_MSG_RESULT([${can_compile_avx512}])
12699         if test "${can_compile_avx512}" = "yes" ; then
12700             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12701             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12702         fi
12704         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12705         AC_LANG_PUSH([C++])
12706         save_CXXFLAGS=$CXXFLAGS
12707         CXXFLAGS="$CXXFLAGS $flag_f16c"
12708         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12709             #include <immintrin.h>
12710             int main () {
12711                 __m128i a = _mm_set1_epi32 (0);
12712                 __m128 c;
12713                 c = _mm_cvtph_ps(a);
12714                 return 0;
12715             }
12716             ])],
12717             [can_compile_f16c=yes],
12718             [can_compile_f16c=no])
12719         AC_LANG_POP([C++])
12720         CXXFLAGS=$save_CXXFLAGS
12721         AC_MSG_RESULT([${can_compile_f16c}])
12722         if test "${can_compile_f16c}" = "yes" ; then
12723             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12724         fi
12726         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12727         AC_LANG_PUSH([C++])
12728         save_CXXFLAGS=$CXXFLAGS
12729         CXXFLAGS="$CXXFLAGS $flag_fma"
12730         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12731             #include <immintrin.h>
12732             int main () {
12733                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12734                 d = _mm256_fmadd_ps(a, b, c);
12735                 return 0;
12736             }
12737             ])],
12738             [can_compile_fma=yes],
12739             [can_compile_fma=no])
12740         AC_LANG_POP([C++])
12741         CXXFLAGS=$save_CXXFLAGS
12742         AC_MSG_RESULT([${can_compile_fma}])
12743         if test "${can_compile_fma}" = "yes" ; then
12744             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12745         fi
12747         CXX="$save_CXX"
12748     fi
12751 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12753 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12754     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12755     AC_LANG_PUSH([C])
12756     save_CC="$CC"
12757     CC="$LO_CLANG_CC"
12758     save_CFLAGS=$CFLAGS
12759     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12760     dnl an empty program will do, we're checking the compiler flags
12761     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12762                       [use_ccache=yes], [use_ccache=no])
12763     CFLAGS=$save_CFLAGS
12764     CC=$save_CC
12765     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12766         AC_MSG_RESULT([yes])
12767     else
12768         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12769         AC_MSG_RESULT([no])
12770     fi
12771     AC_LANG_POP([C])
12773     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12774     AC_LANG_PUSH([C++])
12775     save_CXX="$CXX"
12776     CXX="$LO_CLANG_CXX"
12777     save_CXXFLAGS=$CXXFLAGS
12778     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12779     dnl an empty program will do, we're checking the compiler flags
12780     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12781                       [use_ccache=yes], [use_ccache=no])
12782     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12783         AC_MSG_RESULT([yes])
12784     else
12785         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12786         AC_MSG_RESULT([no])
12787     fi
12788     CXXFLAGS=$save_CXXFLAGS
12789     CXX=$save_CXX
12790     AC_LANG_POP([C++])
12793 AC_SUBST(LO_CLANG_CC)
12794 AC_SUBST(LO_CLANG_CXX)
12795 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12796 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12797 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12798 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12799 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12800 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12801 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12802 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12803 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12804 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12805 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12806 AC_SUBST(LO_CLANG_VERSION)
12807 AC_SUBST(CLANG_USE_LD)
12808 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12810 SYSTEM_GPGMEPP=
12812 AC_MSG_CHECKING([whether to enable gpgmepp])
12813 if test "$enable_gpgmepp" = no; then
12814     AC_MSG_RESULT([no])
12815 elif test "$enable_mpl_subset" = "yes"; then
12816     AC_MSG_RESULT([no (MPL only)])
12817 elif test "$enable_fuzzers" = "yes"; then
12818     AC_MSG_RESULT([no (oss-fuzz)])
12819 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12820     AC_MSG_RESULT([yes])
12821     dnl ===================================================================
12822     dnl Check for system gpgme
12823     dnl ===================================================================
12824     AC_MSG_CHECKING([which gpgmepp to use])
12825     if test "$with_system_gpgmepp" = "yes"; then
12826         AC_MSG_RESULT([external])
12827         SYSTEM_GPGMEPP=TRUE
12829         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12830         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12831             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12832         AC_CHECK_HEADER(gpgme.h, [],
12833             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12834         AC_CHECK_LIB(gpgmepp, main, [],
12835             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12836         GPGMEPP_LIBS=-lgpgmepp
12837     else
12838         AC_MSG_RESULT([internal])
12839         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12841         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12842         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12843         if test "$_os" != "WINNT"; then
12844             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12845             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12846         fi
12847     fi
12848     ENABLE_GPGMEPP=TRUE
12849     AC_DEFINE([HAVE_FEATURE_GPGME])
12850     AC_PATH_PROG(GPG, gpg)
12851     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12852     # so let's exclude that manually for the moment
12853     if test -n "$GPG" -a "$_os" != "WINNT"; then
12854         # make sure we not only have a working gpgme, but a full working
12855         # gpg installation to run OpenPGP signature verification
12856         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12857     fi
12858     if test "$_os" = "Linux"; then
12859       uid=`id -u`
12860       AC_MSG_CHECKING([for /run/user/$uid])
12861       if test -d /run/user/$uid; then
12862         AC_MSG_RESULT([yes])
12863         AC_PATH_PROG(GPGCONF, gpgconf)
12865         # Older versions of gpgconf are not working as expected, since
12866         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12867         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12868         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12869         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12870         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12871         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12872         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12873           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12874           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12875           if $GPGCONF --dump-options > /dev/null ; then
12876             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12877               AC_MSG_RESULT([yes])
12878               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12879               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12880             else
12881               AC_MSG_RESULT([no])
12882             fi
12883           else
12884             AC_MSG_RESULT([no. missing or broken gpgconf?])
12885           fi
12886         else
12887           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12888         fi
12889       else
12890         AC_MSG_RESULT([no])
12891      fi
12892    fi
12893 else
12894     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12896 AC_SUBST(ENABLE_GPGMEPP)
12897 AC_SUBST(SYSTEM_GPGMEPP)
12898 AC_SUBST(GPG_ERROR_CFLAGS)
12899 AC_SUBST(GPG_ERROR_LIBS)
12900 AC_SUBST(LIBASSUAN_CFLAGS)
12901 AC_SUBST(LIBASSUAN_LIBS)
12902 AC_SUBST(GPGMEPP_CFLAGS)
12903 AC_SUBST(GPGMEPP_LIBS)
12905 AC_MSG_CHECKING([whether to build Java Websocket for the UNO remote websocket client])
12906 if test "$with_java" != "no"; then
12907     AC_MSG_RESULT([yes])
12908     ENABLE_JAVA_WEBSOCKET=TRUE
12909     BUILD_TYPE="$BUILD_TYPE JAVA_WEBSOCKET"
12910     NEED_ANT=TRUE
12911 else
12912     AC_MSG_RESULT([no])
12913     ENABLE_JAVA_WEBSOCKET=
12915 AC_SUBST(ENABLE_JAVA_WEBSOCKET)
12917 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12918 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12919     AC_MSG_RESULT([yes])
12920     ENABLE_MEDIAWIKI=TRUE
12921     BUILD_TYPE="$BUILD_TYPE XSLTML"
12922     if test  "x$with_java" = "xno"; then
12923         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12924     fi
12925 else
12926     AC_MSG_RESULT([no])
12927     ENABLE_MEDIAWIKI=
12928     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12930 AC_SUBST(ENABLE_MEDIAWIKI)
12932 AC_MSG_CHECKING([whether to build the Report Builder])
12933 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12934     AC_MSG_RESULT([yes])
12935     ENABLE_REPORTBUILDER=TRUE
12936     AC_MSG_CHECKING([which jfreereport libs to use])
12937     if test "$with_system_jfreereport" = "yes"; then
12938         SYSTEM_JFREEREPORT=TRUE
12939         AC_MSG_RESULT([external])
12940         if test -z $SAC_JAR; then
12941             SAC_JAR=/usr/share/java/sac.jar
12942         fi
12943         if ! test -f $SAC_JAR; then
12944              AC_MSG_ERROR(sac.jar not found.)
12945         fi
12947         if test -z $LIBXML_JAR; then
12948             if test -f /usr/share/java/libxml-1.0.0.jar; then
12949                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12950             elif test -f /usr/share/java/libxml.jar; then
12951                 LIBXML_JAR=/usr/share/java/libxml.jar
12952             else
12953                 AC_MSG_ERROR(libxml.jar replacement not found.)
12954             fi
12955         elif ! test -f $LIBXML_JAR; then
12956             AC_MSG_ERROR(libxml.jar not found.)
12957         fi
12959         if test -z $FLUTE_JAR; then
12960             if test -f /usr/share/java/flute-1.3.0.jar; then
12961                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12962             elif test -f /usr/share/java/flute.jar; then
12963                 FLUTE_JAR=/usr/share/java/flute.jar
12964             else
12965                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12966             fi
12967         elif ! test -f $FLUTE_JAR; then
12968             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12969         fi
12971         if test -z $JFREEREPORT_JAR; then
12972             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12973                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12974             elif test -f /usr/share/java/flow-engine.jar; then
12975                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12976             else
12977                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12978             fi
12979         elif ! test -f  $JFREEREPORT_JAR; then
12980                 AC_MSG_ERROR(jfreereport.jar not found.)
12981         fi
12983         if test -z $LIBLAYOUT_JAR; then
12984             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12985                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12986             elif test -f /usr/share/java/liblayout.jar; then
12987                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12988             else
12989                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12990             fi
12991         elif ! test -f $LIBLAYOUT_JAR; then
12992                 AC_MSG_ERROR(liblayout.jar not found.)
12993         fi
12995         if test -z $LIBLOADER_JAR; then
12996             if test -f /usr/share/java/libloader-1.0.0.jar; then
12997                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
12998             elif test -f /usr/share/java/libloader.jar; then
12999                 LIBLOADER_JAR=/usr/share/java/libloader.jar
13000             else
13001                 AC_MSG_ERROR(libloader.jar replacement not found.)
13002             fi
13003         elif ! test -f  $LIBLOADER_JAR; then
13004             AC_MSG_ERROR(libloader.jar not found.)
13005         fi
13007         if test -z $LIBFORMULA_JAR; then
13008             if test -f /usr/share/java/libformula-0.2.0.jar; then
13009                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
13010             elif test -f /usr/share/java/libformula.jar; then
13011                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
13012             else
13013                 AC_MSG_ERROR(libformula.jar replacement not found.)
13014             fi
13015         elif ! test -f $LIBFORMULA_JAR; then
13016                 AC_MSG_ERROR(libformula.jar not found.)
13017         fi
13019         if test -z $LIBREPOSITORY_JAR; then
13020             if test -f /usr/share/java/librepository-1.0.0.jar; then
13021                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
13022             elif test -f /usr/share/java/librepository.jar; then
13023                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
13024             else
13025                 AC_MSG_ERROR(librepository.jar replacement not found.)
13026             fi
13027         elif ! test -f $LIBREPOSITORY_JAR; then
13028             AC_MSG_ERROR(librepository.jar not found.)
13029         fi
13031         if test -z $LIBFONTS_JAR; then
13032             if test -f /usr/share/java/libfonts-1.0.0.jar; then
13033                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
13034             elif test -f /usr/share/java/libfonts.jar; then
13035                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
13036             else
13037                 AC_MSG_ERROR(libfonts.jar replacement not found.)
13038             fi
13039         elif ! test -f $LIBFONTS_JAR; then
13040                 AC_MSG_ERROR(libfonts.jar not found.)
13041         fi
13043         if test -z $LIBSERIALIZER_JAR; then
13044             if test -f /usr/share/java/libserializer-1.0.0.jar; then
13045                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
13046             elif test -f /usr/share/java/libserializer.jar; then
13047                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
13048             else
13049                 AC_MSG_ERROR(libserializer.jar replacement not found.)
13050             fi
13051         elif ! test -f $LIBSERIALIZER_JAR; then
13052                 AC_MSG_ERROR(libserializer.jar not found.)
13053         fi
13055         if test -z $LIBBASE_JAR; then
13056             if test -f /usr/share/java/libbase-1.0.0.jar; then
13057                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
13058             elif test -f /usr/share/java/libbase.jar; then
13059                 LIBBASE_JAR=/usr/share/java/libbase.jar
13060             else
13061                 AC_MSG_ERROR(libbase.jar replacement not found.)
13062             fi
13063         elif ! test -f $LIBBASE_JAR; then
13064             AC_MSG_ERROR(libbase.jar not found.)
13065         fi
13067     else
13068         AC_MSG_RESULT([internal])
13069         SYSTEM_JFREEREPORT=
13070         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
13071         NEED_ANT=TRUE
13072     fi
13073     BUILD_TYPE="$BUILD_TYPE REPORTBUILDER"
13074 else
13075     AC_MSG_RESULT([no])
13076     ENABLE_REPORTBUILDER=
13077     SYSTEM_JFREEREPORT=
13079 AC_SUBST(ENABLE_REPORTBUILDER)
13080 AC_SUBST(SYSTEM_JFREEREPORT)
13081 AC_SUBST(SAC_JAR)
13082 AC_SUBST(LIBXML_JAR)
13083 AC_SUBST(FLUTE_JAR)
13084 AC_SUBST(JFREEREPORT_JAR)
13085 AC_SUBST(LIBBASE_JAR)
13086 AC_SUBST(LIBLAYOUT_JAR)
13087 AC_SUBST(LIBLOADER_JAR)
13088 AC_SUBST(LIBFORMULA_JAR)
13089 AC_SUBST(LIBREPOSITORY_JAR)
13090 AC_SUBST(LIBFONTS_JAR)
13091 AC_SUBST(LIBSERIALIZER_JAR)
13093 # scripting provider for BeanShell?
13094 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
13095 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
13096     AC_MSG_RESULT([yes])
13097     ENABLE_SCRIPTING_BEANSHELL=TRUE
13099     dnl ===================================================================
13100     dnl Check for system beanshell
13101     dnl ===================================================================
13102     AC_MSG_CHECKING([which beanshell to use])
13103     if test "$with_system_beanshell" = "yes"; then
13104         AC_MSG_RESULT([external])
13105         SYSTEM_BSH=TRUE
13106         if test -z $BSH_JAR; then
13107             BSH_JAR=/usr/share/java/bsh.jar
13108         fi
13109         if ! test -f $BSH_JAR; then
13110             AC_MSG_ERROR(bsh.jar not found.)
13111         fi
13112     else
13113         AC_MSG_RESULT([internal])
13114         SYSTEM_BSH=
13115         BUILD_TYPE="$BUILD_TYPE BSH"
13116     fi
13117 else
13118     AC_MSG_RESULT([no])
13119     ENABLE_SCRIPTING_BEANSHELL=
13120     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
13122 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
13123 AC_SUBST(SYSTEM_BSH)
13124 AC_SUBST(BSH_JAR)
13126 # scripting provider for JavaScript?
13127 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
13128 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
13129     AC_MSG_RESULT([yes])
13130     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
13132     dnl ===================================================================
13133     dnl Check for system rhino
13134     dnl ===================================================================
13135     AC_MSG_CHECKING([which rhino to use])
13136     if test "$with_system_rhino" = "yes"; then
13137         AC_MSG_RESULT([external])
13138         SYSTEM_RHINO=TRUE
13139         if test -z $RHINO_JAR; then
13140             RHINO_JAR=/usr/share/java/js.jar
13141         fi
13142         if ! test -f $RHINO_JAR; then
13143             AC_MSG_ERROR(js.jar not found.)
13144         fi
13145     else
13146         AC_MSG_RESULT([internal])
13147         SYSTEM_RHINO=
13148         BUILD_TYPE="$BUILD_TYPE RHINO"
13149         NEED_ANT=TRUE
13150     fi
13151 else
13152     AC_MSG_RESULT([no])
13153     ENABLE_SCRIPTING_JAVASCRIPT=
13154     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
13156 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
13157 AC_SUBST(SYSTEM_RHINO)
13158 AC_SUBST(RHINO_JAR)
13160 # This is only used in Qt5/Qt6/KF5/KF6 checks to determine if /usr/lib64
13161 # paths should be added to library search path. So lets put all 64-bit
13162 # platforms there.
13163 supports_multilib=
13164 case "$host_cpu" in
13165 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64 | riscv64)
13166     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
13167         supports_multilib="yes"
13168     fi
13169     ;;
13171     ;;
13172 esac
13174 dnl ===================================================================
13175 dnl QT5 Integration
13176 dnl ===================================================================
13178 QT5_CFLAGS=""
13179 QT5_LIBS=""
13180 QT5_GOBJECT_CFLAGS=""
13181 QT5_GOBJECT_LIBS=""
13182 QT5_HAVE_GOBJECT=""
13183 QT5_PLATFORMS_SRCDIR=""
13184 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13185         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
13186         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13187 then
13188     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
13189     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
13191     if test -n "$supports_multilib"; then
13192         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
13193     fi
13195     qt5_test_include="QtWidgets/qapplication.h"
13196     if test "$_os" = "Emscripten"; then
13197         qt5_test_library="libQt5Widgets.a"
13198     else
13199         qt5_test_library="libQt5Widgets.so"
13200     fi
13202     dnl Check for qmake5
13203     if test -n "$QT5DIR"; then
13204         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
13205     else
13206         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
13207     fi
13208     if test "$QMAKE5" = "no"; then
13209         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13210     else
13211         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
13212         if test -z "$qmake5_test_ver"; then
13213             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13214         fi
13215         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
13216         qt5_minimal_minor="15"
13217         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
13218             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
13219         else
13220             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
13221         fi
13222     fi
13224     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
13225     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
13226     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
13227     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
13229     AC_MSG_CHECKING([for Qt5 headers])
13230     qt5_incdir="no"
13231     for inc_dir in $qt5_incdirs; do
13232         if test -r "$inc_dir/$qt5_test_include"; then
13233             qt5_incdir="$inc_dir"
13234             break
13235         fi
13236     done
13237     AC_MSG_RESULT([$qt5_incdir])
13238     if test "x$qt5_incdir" = "xno"; then
13239         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13240     fi
13241     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
13242     AC_LANG_PUSH([C++])
13243     save_CPPFLAGS=$CPPFLAGS
13244     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
13245     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13246         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13247     CPPFLAGS=$save_CPPFLAGS
13248     AC_LANG_POP([C++])
13250     AC_MSG_CHECKING([for Qt5 libraries])
13251     qt5_libdir="no"
13252     for lib_dir in $qt5_libdirs; do
13253         if test -r "$lib_dir/$qt5_test_library"; then
13254             qt5_libdir="$lib_dir"
13255             break
13256         fi
13257     done
13258     AC_MSG_RESULT([$qt5_libdir])
13259     if test "x$qt5_libdir" = "xno"; then
13260         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13261     fi
13263     if test "$_os" = "Emscripten"; then
13264         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13265             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13266         fi
13267         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
13268             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
13269         fi
13271         EMSDK_LLVM_NM="$(em-config LLVM_ROOT)"/llvm-nm
13272         if ! test -x "$EMSDK_LLVM_NM"; then
13273             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
13274         fi
13275         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
13276             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
13277         fi
13278         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
13279         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
13280             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
13281         fi
13282         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
13283             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
13284         fi
13285     fi
13287     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13288     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13289     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13290     if test "$_os" = "Emscripten"; then
13291         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
13292     fi
13294     if test "$USING_X11" = TRUE; then
13295         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
13296         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
13297         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
13298         QT5_USING_X11=1
13299         AC_DEFINE(QT5_USING_X11)
13300     fi
13302     dnl Check for Meta Object Compiler
13304     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
13305     if test "$MOC5" = "no"; then
13306         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13307 the root of your Qt installation by exporting QT5DIR before running "configure".])
13308     fi
13310     if test "$test_gstreamer_1_0" = yes; then
13311         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
13312                 QT5_HAVE_GOBJECT=1
13313                 AC_DEFINE(QT5_HAVE_GOBJECT)
13314             ],
13315             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
13316         )
13317     fi
13319 AC_SUBST(QT5_CFLAGS)
13320 AC_SUBST(QT5_LIBS)
13321 AC_SUBST(MOC5)
13322 AC_SUBST(QT5_GOBJECT_CFLAGS)
13323 AC_SUBST(QT5_GOBJECT_LIBS)
13324 AC_SUBST(QT5_HAVE_GOBJECT)
13325 AC_SUBST(QT5_PLATFORMS_SRCDIR)
13327 dnl ===================================================================
13328 dnl QT6 Integration
13329 dnl ===================================================================
13331 QT6_CFLAGS=""
13332 QT6_LIBS=""
13333 QT6_PLATFORMS_SRCDIR=""
13334 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \) -o \
13335         \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13336 then
13337     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13338     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13340     if test -n "$supports_multilib"; then
13341         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13342     fi
13344     qt6_test_include="QtWidgets/qapplication.h"
13345     if test "$_os" = "Emscripten"; then
13346         qt6_test_library="libQt6Widgets.a"
13347     else
13348         qt6_test_library="libQt6Widgets.so"
13349     fi
13351     dnl Check for qmake6
13352     if test -n "$QT6DIR"; then
13353         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13354     else
13355         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake6 qmake], no)
13356     fi
13357     if test "$QMAKE6" = "no"; then
13358         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13359     else
13360         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13361         if test -z "$qmake6_test_ver"; then
13362             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13363         fi
13364         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13365     fi
13367     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13368     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13369     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13370     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13372     AC_MSG_CHECKING([for Qt6 headers])
13373     qt6_incdir="no"
13374     for inc_dir in $qt6_incdirs; do
13375         if test -r "$inc_dir/$qt6_test_include"; then
13376             qt6_incdir="$inc_dir"
13377             break
13378         fi
13379     done
13380     AC_MSG_RESULT([$qt6_incdir])
13381     if test "x$qt6_incdir" = "xno"; then
13382         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13383     fi
13384     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13385     AC_LANG_PUSH([C++])
13386     save_CPPFLAGS=$CPPFLAGS
13387     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13388     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13389         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13390     CPPFLAGS=$save_CPPFLAGS
13391     AC_LANG_POP([C++])
13393     AC_MSG_CHECKING([for Qt6 libraries])
13394     qt6_libdir="no"
13395     for lib_dir in $qt6_libdirs; do
13396         if test -r "$lib_dir/$qt6_test_library"; then
13397             qt6_libdir="$lib_dir"
13398             break
13399         fi
13400     done
13401     AC_MSG_RESULT([$qt6_libdir])
13402     if test "x$qt6_libdir" = "xno"; then
13403         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13404     fi
13406     if test "$_os" = "Emscripten"; then
13407         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13408             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13409         fi
13410         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13411             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13412         fi
13413     fi
13415     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13416     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13417     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13418     if test "$_os" = "Emscripten"; then
13419         QT6_LIBS="$QT6_LIBS -lQt6BundledPcre2 -lQt6BundledZLIB -L${qt6_platformsdir} -lqwasm -sGL_ENABLE_GET_PROC_ADDRESS"
13420     fi
13422     if test "$USING_X11" = TRUE; then
13423         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13424         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13425         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13426         QT6_USING_X11=1
13427         AC_DEFINE(QT6_USING_X11)
13428     fi
13430     dnl Check for Meta Object Compiler
13432     for lib_dir in $qt6_libdirs; do
13433         if test -z "$qt6_libexec_dirs"; then
13434             qt6_libexec_dirs="$lib_dir/libexec"
13435         else
13436             qt6_libexec_dirs="$qt6_libexec_dirs:$lib_dir/libexec"
13437         fi
13438     done
13439     AC_PATH_PROGS( MOC6, [moc-qt6 moc], no, [`dirname $qt6_libdir`/libexec:$QT6DIR/libexec:$qt6_libexec_dirs:`echo $qt6_libdirs | $SED -e 's/ /:/g'`:$PATH])
13440     if test "$MOC6" = "no"; then
13441         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13442 the root of your Qt installation by exporting QT6DIR before running "configure".])
13443     else
13444         moc6_test_ver="`$MOC6 -v 2>&1 | $SED -n -e 's/^moc \(6.*\)/\1/p'`"
13445         if test -z "$moc6_test_ver"; then
13446             AC_MSG_ERROR([Wrong moc for Qt6 found.])
13447         fi
13448         AC_MSG_NOTICE([Detected moc version: $moc_test_ver])
13449     fi
13451 AC_SUBST(QT6_CFLAGS)
13452 AC_SUBST(QT6_LIBS)
13453 AC_SUBST(MOC6)
13454 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13456 dnl ===================================================================
13457 dnl KF5 Integration
13458 dnl ===================================================================
13460 KF5_CFLAGS=""
13461 KF5_LIBS=""
13462 KF5_CONFIG="kf5-config"
13463 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13464         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13465 then
13466     if test "$OS" = "HAIKU"; then
13467         haiku_arch="`echo $RTL_ARCH | tr X x`"
13468         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13469         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13470     fi
13472     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13473     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13474     if test -n "$supports_multilib"; then
13475         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13476     fi
13478     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13479     kf5_test_library="libKF5KIOFileWidgets.so"
13480     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13482     dnl kf5 KDE4 support compatibility installed
13483     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13484     if test "$KF5_CONFIG" != "no"; then
13485         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13486         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13487     fi
13489     dnl Check for KF5 headers
13490     AC_MSG_CHECKING([for KF5 headers])
13491     kf5_incdir="no"
13492     for kf5_check in $kf5_incdirs; do
13493         if test -r "$kf5_check/$kf5_test_include"; then
13494             kf5_incdir="$kf5_check/KF5"
13495             break
13496         fi
13497     done
13498     AC_MSG_RESULT([$kf5_incdir])
13499     if test "x$kf5_incdir" = "xno"; then
13500         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13501     fi
13503     dnl Check for KF5 libraries
13504     AC_MSG_CHECKING([for KF5 libraries])
13505     kf5_libdir="no"
13506     for kf5_check in $kf5_libdirs; do
13507         if test -r "$kf5_check/$kf5_test_library"; then
13508             kf5_libdir="$kf5_check"
13509             break
13510         fi
13511     done
13513     AC_MSG_RESULT([$kf5_libdir])
13514     if test "x$kf5_libdir" = "xno"; then
13515         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13516     fi
13518     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"
13519     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13520     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13522     if test "$USING_X11" = TRUE; then
13523         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13524     fi
13526     AC_LANG_PUSH([C++])
13527     save_CXXFLAGS=$CXXFLAGS
13528     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13529     AC_MSG_CHECKING([whether KDE is >= 5.0])
13530        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13531 #include <kcoreaddons_version.h>
13533 int main(int argc, char **argv) {
13534        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13535        else return 1;
13537        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13538     CXXFLAGS=$save_CXXFLAGS
13539     AC_LANG_POP([C++])
13541 AC_SUBST(KF5_CFLAGS)
13542 AC_SUBST(KF5_LIBS)
13544 dnl ===================================================================
13545 dnl KF6 Integration
13546 dnl ===================================================================
13548 KF6_CFLAGS=""
13549 KF6_LIBS=""
13550 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \)
13551 then
13552     if test "$OS" = "HAIKU"; then
13553         haiku_arch="`echo $RTL_ARCH | tr X x`"
13554         kf6_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13555         kf6_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13556     fi
13558     kf6_incdirs="$KF6INC /usr/include $kf6_haiku_incdirs $x_includes"
13559     kf6_libdirs="$KF6LIB /usr/lib /usr/lib/kf6 /usr/lib/kf6/devel $kf6_haiku_libdirs $x_libraries"
13560     if test -n "$supports_multilib"; then
13561         kf6_libdirs="$kf6_libdirs /usr/lib64 /usr/lib64/kf6 /usr/lib64/kf6/devel"
13562     fi
13564     kf6_test_include="KF6/KIOFileWidgets/KFileWidget"
13565     kf6_test_library="libKF6KIOFileWidgets.so"
13566     kf6_libdirs="$qt6_libdir $kf6_libdirs"
13568     dnl Check for KF6 headers
13569     AC_MSG_CHECKING([for KF6 headers])
13570     kf6_incdir="no"
13571     for kf6_check in $kf6_incdirs; do
13572         if test -r "$kf6_check/$kf6_test_include"; then
13573             kf6_incdir="$kf6_check/KF6"
13574             break
13575         fi
13576     done
13577     AC_MSG_RESULT([$kf6_incdir])
13578     if test "x$kf6_incdir" = "xno"; then
13579         AC_MSG_ERROR([KF6 headers not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13580     fi
13582     dnl Check for KF6 libraries
13583     AC_MSG_CHECKING([for KF6 libraries])
13584     kf6_libdir="no"
13585     for kf6_check in $kf6_libdirs; do
13586         if test -r "$kf6_check/$kf6_test_library"; then
13587             kf6_libdir="$kf6_check"
13588             break
13589         fi
13590     done
13592     AC_MSG_RESULT([$kf6_libdir])
13593     if test "x$kf6_libdir" = "xno"; then
13594         AC_MSG_ERROR([KF6 libraries not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13595     fi
13597     KF6_CFLAGS="-I$kf6_incdir -I$kf6_incdir/KCoreAddons -I$kf6_incdir/KI18n -I$kf6_incdir/KConfig -I$kf6_incdir/KConfigCore -I$kf6_incdir/KWindowSystem -I$kf6_incdir/KIO -I$kf6_incdir/KIOCore -I$kf6_incdir/KIOWidgets -I$kf6_incdir/KIOFileWidgets -I$qt6_incdir -I$qt6_incdir/QtCore -I$qt6_incdir/QtGui -I$qt6_incdir/QtWidgets -I$qt6_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13598     KF6_LIBS="-L$kf6_libdir -lKF6CoreAddons -lKF6I18n -lKF6ConfigCore -lKF6WindowSystem -lKF6KIOCore -lKF6KIOWidgets -lKF6KIOFileWidgets -L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13599     KF6_CFLAGS=$(printf '%s' "$KF6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13601     AC_LANG_PUSH([C++])
13602     save_CXXFLAGS=$CXXFLAGS
13603     CXXFLAGS="$CXXFLAGS $KF6_CFLAGS"
13604     dnl KF6 development version as of 2023-06 uses version number 5.240
13605     AC_MSG_CHECKING([whether KDE is >= 5.240])
13606        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13607 #include <kcoreaddons_version.h>
13609 int main(int argc, char **argv) {
13610        if (KCOREADDONS_VERSION_MAJOR == 6 || (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 240)) return 0;
13611        else return 1;
13613        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13614     CXXFLAGS=$save_CXXFLAGS
13615     AC_LANG_POP([C++])
13617 AC_SUBST(KF6_CFLAGS)
13618 AC_SUBST(KF6_LIBS)
13620 dnl ===================================================================
13621 dnl Test whether to include Evolution 2 support
13622 dnl ===================================================================
13623 AC_MSG_CHECKING([whether to enable evolution 2 support])
13624 if test "$enable_evolution2" = yes; then
13625     AC_MSG_RESULT([yes])
13626     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13627     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13628     FilterLibs "${GOBJECT_LIBS}"
13629     GOBJECT_LIBS="${filteredlibs}"
13630     ENABLE_EVOAB2="TRUE"
13631 else
13632     AC_MSG_RESULT([no])
13634 AC_SUBST(ENABLE_EVOAB2)
13635 AC_SUBST(GOBJECT_CFLAGS)
13636 AC_SUBST(GOBJECT_LIBS)
13638 dnl ===================================================================
13639 dnl Test which themes to include
13640 dnl ===================================================================
13641 AC_MSG_CHECKING([which themes to include])
13642 # if none given use default subset of available themes
13643 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13644     with_theme="breeze breeze_dark breeze_dark_svg breeze_svg colibre colibre_svg colibre_dark colibre_dark_svg elementary elementary_svg karasa_jaga karasa_jaga_svg sifr sifr_svg sifr_dark sifr_dark_svg sukapura sukapura_dark sukapura_dark_svg sukapura_svg"
13647 WITH_THEMES=""
13648 if test "x$with_theme" != "xno"; then
13649     for theme in $with_theme; do
13650         case $theme in
13651         breeze|breeze_dark|breeze_dark_svg|breeze_svg|colibre|colibre_svg|colibre_dark|colibre_dark_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg|sifr|sifr_svg|sifr_dark|sifr_dark_svg|sukapura|sukapura_dark|sukapura_dark_svg|sukapura_svg) WITH_THEMES="${WITH_THEMES:+$WITH_THEMES }$theme" ;;
13652         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13653         esac
13654     done
13656 AC_MSG_RESULT([$WITH_THEMES])
13657 AC_SUBST([WITH_THEMES])
13659 ###############################################################################
13660 # Extensions checking
13661 ###############################################################################
13662 AC_MSG_CHECKING([for extensions integration])
13663 if test "x$enable_extension_integration" != "xno"; then
13664     WITH_EXTENSION_INTEGRATION=TRUE
13665     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13666     AC_MSG_RESULT([yes, use integration])
13667 else
13668     WITH_EXTENSION_INTEGRATION=
13669     AC_MSG_RESULT([no, do not integrate])
13671 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13673 dnl Should any extra extensions be included?
13674 dnl There are standalone tests for each of these below.
13675 WITH_EXTRA_EXTENSIONS=
13676 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13678 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13679 if test "x$with_java" != "xno"; then
13680     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13683 AC_MSG_CHECKING([whether to build opens___.ttf])
13684 if test "$enable_build_opensymbol" = "yes"; then
13685     AC_MSG_RESULT([yes])
13686     AC_PATH_PROG(FONTFORGE, fontforge)
13687     if test -z "$FONTFORGE"; then
13688         AC_MSG_ERROR([fontforge not installed])
13689     fi
13690 else
13691     AC_MSG_RESULT([no])
13692     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13694 AC_SUBST(FONTFORGE)
13696 dnl ===================================================================
13697 dnl Test whether to include fonts
13698 dnl ===================================================================
13699 AC_MSG_CHECKING([whether to include third-party fonts])
13700 if test "$with_fonts" != "no"; then
13701     AC_MSG_RESULT([yes])
13702     WITH_FONTS=TRUE
13703     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13704     AC_DEFINE(HAVE_MORE_FONTS)
13705 else
13706     AC_MSG_RESULT([no])
13707     WITH_FONTS=
13708     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13710 AC_SUBST(WITH_FONTS)
13713 dnl ===================================================================
13714 dnl Test whether to enable online update service
13715 dnl ===================================================================
13716 AC_MSG_CHECKING([whether to enable online update])
13717 ENABLE_ONLINE_UPDATE=
13718 if test "$enable_online_update" = ""; then
13719     AC_MSG_RESULT([no])
13720 else
13721     if test "$enable_online_update" = "mar"; then
13722         AC_MSG_ERROR([--enable-online-update=mar is deprecated, use --enable-online-update-mar instead])
13723     elif test "$enable_online_update" = "yes"; then
13724         if test "$enable_curl" != "yes"; then
13725             AC_MSG_ERROR([--disable-online-update must be used when --disable-curl is used])
13726         fi
13727         AC_MSG_RESULT([yes])
13728         ENABLE_ONLINE_UPDATE="TRUE"
13729     else
13730         AC_MSG_RESULT([no])
13731     fi
13733 AC_SUBST(ENABLE_ONLINE_UPDATE)
13736 dnl ===================================================================
13737 dnl Test whether to enable mar online update service
13738 dnl ===================================================================
13739 AC_MSG_CHECKING([whether to enable mar online update])
13740 ENABLE_ONLINE_UPDATE_MAR=
13741 if test "$enable_online_update_mar" = yes; then
13742     AC_MSG_RESULT([yes])
13743     BUILD_TYPE="$BUILD_TYPE ONLINEUPDATE"
13744     ENABLE_ONLINE_UPDATE_MAR="TRUE"
13745     AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13746 else
13747     AC_MSG_RESULT([no])
13749 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13751 AC_MSG_CHECKING([for mar online update baseurl])
13752 ONLINEUPDATE_MAR_BASEURL=$with_online_update_mar_baseurl
13753 if test -n "$ONLINEUPDATE_MAR_BASEURL"; then
13754     AC_MSG_RESULT([yes])
13755 else
13756     AC_MSG_RESULT([no])
13758 AC_SUBST(ONLINEUPDATE_MAR_BASEURL)
13760 AC_MSG_CHECKING([for mar online update certificateder])
13761 ONLINEUPDATE_MAR_CERTIFICATEDER=$with_online_update_mar_certificateder
13762 if test -n "$ONLINEUPDATE_MAR_CERTIFICATEDER"; then
13763     AC_MSG_RESULT([yes])
13764 else
13765     AC_MSG_RESULT([no])
13767 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATEDER)
13769 AC_MSG_CHECKING([for mar online update certificatename])
13770 ONLINEUPDATE_MAR_CERTIFICATENAME=$with_online_update_mar_certificatename
13771 if test -n "$ONLINEUPDATE_MAR_CERTIFICATENAME"; then
13772     AC_MSG_RESULT([yes])
13773 else
13774     AC_MSG_RESULT([no])
13776 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATENAME)
13778 AC_MSG_CHECKING([for mar online update certificatepath])
13779 ONLINEUPDATE_MAR_CERTIFICATEPATH=$with_online_update_mar_certificatepath
13780 if test -n "$ONLINEUPDATE_MAR_CERTIFICATEPATH"; then
13781     AC_MSG_RESULT([yes])
13782 else
13783     AC_MSG_RESULT([no])
13785 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATEPATH)
13788 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13789 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13790     if test "x$with_privacy_policy_url" = "xundefined"; then
13791         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13792     fi
13794 AC_SUBST(PRIVACY_POLICY_URL)
13795 dnl ===================================================================
13796 dnl Test whether we need bzip2
13797 dnl ===================================================================
13798 SYSTEM_BZIP2=
13799 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE" -o "$enable_python" = internal; then
13800     AC_MSG_CHECKING([whether to use system bzip2])
13801     if test "$with_system_bzip2" = yes; then
13802         SYSTEM_BZIP2=TRUE
13803         AC_MSG_RESULT([yes])
13804         PKG_CHECK_MODULES(BZIP2, bzip2)
13805         FilterLibs "${BZIP2_LIBS}"
13806         BZIP2_LIBS="${filteredlibs}"
13807     else
13808         AC_MSG_RESULT([no])
13809         BUILD_TYPE="$BUILD_TYPE BZIP2"
13810     fi
13812 AC_SUBST(SYSTEM_BZIP2)
13813 AC_SUBST(BZIP2_CFLAGS)
13814 AC_SUBST(BZIP2_LIBS)
13816 dnl ===================================================================
13817 dnl Test whether to enable extension update
13818 dnl ===================================================================
13819 AC_MSG_CHECKING([whether to enable extension update])
13820 ENABLE_EXTENSION_UPDATE=
13821 if test "x$enable_extension_update" = "xno"; then
13822     AC_MSG_RESULT([no])
13823 else
13824     AC_MSG_RESULT([yes])
13825     ENABLE_EXTENSION_UPDATE="TRUE"
13826     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13827     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13829 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13832 dnl ===================================================================
13833 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13834 dnl ===================================================================
13835 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13836 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13837     AC_MSG_RESULT([no])
13838     ENABLE_SILENT_MSI=
13839 else
13840     AC_MSG_RESULT([yes])
13841     ENABLE_SILENT_MSI=TRUE
13842     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13844 AC_SUBST(ENABLE_SILENT_MSI)
13846 dnl ===================================================================
13847 dnl Check for WiX tools.
13848 dnl ===================================================================
13849 if test "$enable_wix" = "" -o "enable_wix" = "no"; then
13850     AC_MSG_RESULT([no])
13851     ENABLE_WIX=
13852 else
13853     AC_MSG_RESULT([yes])
13854     # FIXME: this should do proper detection, but the path is currently
13855     # hardcoded in msicreator/createmsi.py
13856     if ! test -x "/cygdrive/c/Program Files (x86)/WiX Toolset v3.11/bin/candle"; then
13857       AC_MSG_ERROR([WiX requested but WiX toolset v3.11 not found at the expected location])
13858     fi
13859     ENABLE_WIX=TRUE
13861 AC_SUBST(ENABLE_WIX)
13863 AC_MSG_CHECKING([whether and how to use Xinerama])
13864 if test "$USING_X11" = TRUE; then
13865     if test "$x_libraries" = "default_x_libraries"; then
13866         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13867         if test "x$XINERAMALIB" = x; then
13868            XINERAMALIB="/usr/lib"
13869         fi
13870     else
13871         XINERAMALIB="$x_libraries"
13872     fi
13873     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13874         # we have both versions, let the user decide but use the dynamic one
13875         # per default
13876         USE_XINERAMA=TRUE
13877         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13878             XINERAMA_LINK=dynamic
13879         else
13880             XINERAMA_LINK=static
13881         fi
13882     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13883         # we have only the dynamic version
13884         USE_XINERAMA=TRUE
13885         XINERAMA_LINK=dynamic
13886     elif test -e "$XINERAMALIB/libXinerama.a"; then
13887         # static version
13888         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13889             USE_XINERAMA=TRUE
13890             XINERAMA_LINK=static
13891         else
13892             USE_XINERAMA=
13893             XINERAMA_LINK=none
13894         fi
13895     else
13896         # no Xinerama
13897         USE_XINERAMA=
13898         XINERAMA_LINK=none
13899     fi
13900     if test "$USE_XINERAMA" = "TRUE"; then
13901         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13902         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13903             [AC_MSG_ERROR(Xinerama header not found.)], [])
13904         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13905         if test "x$XEXTLIB" = x; then
13906            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13907         fi
13908         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13909         if test "$_os" = "FreeBSD"; then
13910             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13911         fi
13912         if test "$_os" = "Linux"; then
13913             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13914         fi
13915         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13916             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13917     else
13918         AC_MSG_ERROR([libXinerama not found or wrong architecture.])
13919     fi
13920 else
13921     USE_XINERAMA=
13922     XINERAMA_LINK=none
13923     AC_MSG_RESULT([no])
13925 AC_SUBST(XINERAMA_LINK)
13927 AC_MSG_CHECKING([whether to use non-standard RGBA32 cairo pixel order])
13928 if test -z "$enable_cairo_rgba" -a "$_os" = "Android"; then
13929     enable_cairo_rgba=yes
13931 if test "$enable_cairo_rgba" = yes; then
13932     AC_DEFINE(ENABLE_CAIRO_RGBA)
13933     ENABLE_CAIRO_RGBA=TRUE
13934     AC_MSG_RESULT([yes])
13935 else
13936     ENABLE_CAIRO_RGBA=
13937     AC_MSG_RESULT([no])
13939 AC_SUBST(ENABLE_CAIRO_RGBA)
13941 dnl ===================================================================
13942 dnl Test whether to build cairo or rely on the system version
13943 dnl ===================================================================
13945 if test "$test_cairo" = "yes"; then
13946     AC_MSG_CHECKING([whether to use the system cairo])
13948     : ${with_system_cairo:=$with_system_libs}
13949     if test "$with_system_cairo" = "yes" -a "$enable_cairo_rgba" != "yes"; then
13950         SYSTEM_CAIRO=TRUE
13951         AC_MSG_RESULT([yes])
13953         PKG_CHECK_MODULES( CAIRO, cairo >= 1.12.0 )
13954         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13955         FilterLibs "${CAIRO_LIBS}"
13956         CAIRO_LIBS="${filteredlibs}"
13958         if test "$test_xrender" = "yes"; then
13959             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13960             AC_LANG_PUSH([C])
13961             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13962 #ifdef PictStandardA8
13963 #else
13964       return fail;
13965 #endif
13966 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13968             AC_LANG_POP([C])
13969         fi
13970     else
13971         AC_MSG_RESULT([no])
13972         BUILD_TYPE="$BUILD_TYPE CAIRO"
13973     fi
13975     if test "$enable_cairo_canvas" != no; then
13976         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13977         ENABLE_CAIRO_CANVAS=TRUE
13978     fi
13981 AC_SUBST(CAIRO_CFLAGS)
13982 AC_SUBST(CAIRO_LIBS)
13983 AC_SUBST(ENABLE_CAIRO_CANVAS)
13984 AC_SUBST(SYSTEM_CAIRO)
13986 dnl ===================================================================
13987 dnl Test whether to use avahi
13988 dnl ===================================================================
13989 if test "$_os" = "WINNT"; then
13990     # Windows uses bundled mDNSResponder
13991     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13992 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13993     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13994                       [ENABLE_AVAHI="TRUE"])
13995     AC_DEFINE(HAVE_FEATURE_AVAHI)
13996     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13997     FilterLibs "${AVAHI_LIBS}"
13998     AVAHI_LIBS="${filteredlibs}"
14001 AC_SUBST(ENABLE_AVAHI)
14002 AC_SUBST(AVAHI_CFLAGS)
14003 AC_SUBST(AVAHI_LIBS)
14005 dnl ===================================================================
14006 dnl Test whether to use liblangtag
14007 dnl ===================================================================
14008 SYSTEM_LIBLANGTAG=
14009 AC_MSG_CHECKING([whether to use system liblangtag])
14010 if test "$with_system_liblangtag" = yes; then
14011     SYSTEM_LIBLANGTAG=TRUE
14012     AC_MSG_RESULT([yes])
14013     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
14014     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
14015     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
14016     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
14017     FilterLibs "${LIBLANGTAG_LIBS}"
14018     LIBLANGTAG_LIBS="${filteredlibs}"
14019 else
14020     SYSTEM_LIBLANGTAG=
14021     AC_MSG_RESULT([no])
14022     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
14023     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
14024     if test "$COM" = "MSC"; then
14025         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
14026     else
14027         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
14028     fi
14030 AC_SUBST(SYSTEM_LIBLANGTAG)
14031 AC_SUBST(LIBLANGTAG_CFLAGS)
14032 AC_SUBST(LIBLANGTAG_LIBS)
14034 dnl ===================================================================
14035 dnl Test whether to build libpng or rely on the system version
14036 dnl ===================================================================
14038 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
14039 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
14040 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
14042 dnl ===================================================================
14043 dnl Test whether to build libtiff or rely on the system version
14044 dnl ===================================================================
14046 libo_CHECK_SYSTEM_MODULE([libtiff],[LIBTIFF],[libtiff-4])
14048 dnl ===================================================================
14049 dnl Test whether to build libwebp or rely on the system version
14050 dnl ===================================================================
14052 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
14054 dnl ===================================================================
14055 dnl Check for runtime JVM search path
14056 dnl ===================================================================
14057 if test "$ENABLE_JAVA" != ""; then
14058     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
14059     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
14060         AC_MSG_RESULT([yes])
14061         if ! test -d "$with_jvm_path"; then
14062             AC_MSG_ERROR(["$with_jvm_path" not a directory])
14063         fi
14064         if ! test -d "$with_jvm_path"jvm; then
14065             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
14066         fi
14067         JVM_ONE_PATH_CHECK="$with_jvm_path"
14068         AC_SUBST(JVM_ONE_PATH_CHECK)
14069     else
14070         AC_MSG_RESULT([no])
14071     fi
14074 dnl ===================================================================
14075 dnl Test for the presence of Ant and that it works
14076 dnl ===================================================================
14078 # java takes the encoding from LC_ALL, and since autoconf forces it to C it
14079 # breaks filename decoding, so for the ant section, set it to LANG
14080 LC_ALL=$LANG
14081 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
14082     ANT_HOME=; export ANT_HOME
14083     WITH_ANT_HOME=; export WITH_ANT_HOME
14084     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
14085         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
14086             if test "$_os" = "WINNT"; then
14087                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
14088             else
14089                 with_ant_home="$LODE_HOME/opt/ant"
14090             fi
14091         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
14092             with_ant_home="$LODE_HOME/opt/ant"
14093         fi
14094     fi
14095     if test -z "$with_ant_home"; then
14096         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
14097     else
14098         if test "$_os" = "WINNT"; then
14099             # AC_PATH_PROGS needs unix path
14100             PathFormat "$with_ant_home"
14101             with_ant_home="$formatted_path_unix"
14102         fi
14103         AbsolutePath "$with_ant_home"
14104         with_ant_home=$absolute_path
14105         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
14106         WITH_ANT_HOME=$with_ant_home
14107         ANT_HOME=$with_ant_home
14108     fi
14110     if test -z "$ANT"; then
14111         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
14112     else
14113         # resolve relative or absolute symlink
14114         while test -h "$ANT"; do
14115             a_cwd=`pwd`
14116             a_basename=`basename "$ANT"`
14117             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
14118             cd "`dirname "$ANT"`"
14119             cd "`dirname "$a_script"`"
14120             ANT="`pwd`"/"`basename "$a_script"`"
14121             cd "$a_cwd"
14122         done
14124         AC_MSG_CHECKING([if $ANT works])
14125         mkdir -p conftest.dir
14126         a_cwd=$(pwd)
14127         cd conftest.dir
14128         cat > conftest.java << EOF
14129         public class conftest {
14130             int testmethod(int a, int b) {
14131                     return a + b;
14132             }
14133         }
14136         cat > conftest.xml << EOF
14137         <project name="conftest" default="conftest">
14138         <target name="conftest">
14139             <javac srcdir="." includes="conftest.java">
14140             </javac>
14141         </target>
14142         </project>
14145         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
14146         if test $? = 0 -a -f ./conftest.class; then
14147             AC_MSG_RESULT([Ant works])
14148             if test -z "$WITH_ANT_HOME"; then
14149                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
14150                 if test -z "$ANT_HOME"; then
14151                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
14152                 fi
14153             else
14154                 ANT_HOME="$WITH_ANT_HOME"
14155             fi
14156         else
14157             echo "configure: Ant test failed" >&5
14158             cat conftest.java >&5
14159             cat conftest.xml >&5
14160             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
14161         fi
14162         cd "$a_cwd"
14163         rm -fr conftest.dir
14164     fi
14165     if test -z "$ANT_HOME"; then
14166         ANT_HOME="NO_ANT_HOME"
14167     else
14168         PathFormat "$ANT_HOME"
14169         ANT_HOME="$formatted_path"
14170         PathFormat "$ANT"
14171         ANT="$formatted_path"
14172     fi
14174     dnl Checking for ant.jar
14175     if test "$ANT_HOME" != "NO_ANT_HOME"; then
14176         AC_MSG_CHECKING([Ant lib directory])
14177         if test -f $ANT_HOME/lib/ant.jar; then
14178             ANT_LIB="$ANT_HOME/lib"
14179         else
14180             if test -f $ANT_HOME/ant.jar; then
14181                 ANT_LIB="$ANT_HOME"
14182             else
14183                 if test -f /usr/share/java/ant.jar; then
14184                     ANT_LIB=/usr/share/java
14185                 else
14186                     if test -f /usr/share/ant-core/lib/ant.jar; then
14187                         ANT_LIB=/usr/share/ant-core/lib
14188                     else
14189                         if test -f $ANT_HOME/lib/ant/ant.jar; then
14190                             ANT_LIB="$ANT_HOME/lib/ant"
14191                         else
14192                             if test -f /usr/share/lib/ant/ant.jar; then
14193                                 ANT_LIB=/usr/share/lib/ant
14194                             else
14195                                 AC_MSG_ERROR([Ant libraries not found!])
14196                             fi
14197                         fi
14198                     fi
14199                 fi
14200             fi
14201         fi
14202         PathFormat "$ANT_LIB"
14203         ANT_LIB="$formatted_path"
14204         AC_MSG_RESULT([Ant lib directory found.])
14205     fi
14207     ant_minver=1.6.0
14208     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
14210     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
14211     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
14212     ant_version_major=`echo $ant_version | cut -d. -f1`
14213     ant_version_minor=`echo $ant_version | cut -d. -f2`
14214     echo "configure: ant_version $ant_version " >&5
14215     echo "configure: ant_version_major $ant_version_major " >&5
14216     echo "configure: ant_version_minor $ant_version_minor " >&5
14217     if test "$ant_version_major" -ge "2"; then
14218         AC_MSG_RESULT([yes, $ant_version])
14219     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
14220         AC_MSG_RESULT([yes, $ant_version])
14221     else
14222         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
14223     fi
14225     rm -f conftest* core core.* *.core
14227 AC_SUBST(ANT)
14228 AC_SUBST(ANT_HOME)
14229 AC_SUBST(ANT_LIB)
14231 OOO_JUNIT_JAR=
14232 HAMCREST_JAR=
14233 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
14234     AC_MSG_CHECKING([for JUnit 4])
14235     if test "$with_junit" = "yes"; then
14236         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
14237             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
14238         elif test -e /usr/share/java/junit4.jar; then
14239             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
14240         else
14241            if test -e /usr/share/lib/java/junit.jar; then
14242               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
14243            else
14244               OOO_JUNIT_JAR=/usr/share/java/junit.jar
14245            fi
14246         fi
14247     else
14248         OOO_JUNIT_JAR=$with_junit
14249     fi
14250     if test "$_os" = "WINNT"; then
14251         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
14252     fi
14253     printf 'import org.junit.Before;' > conftest.java
14254     if $JAVACOMPILER -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14255         AC_MSG_RESULT([$OOO_JUNIT_JAR])
14256     else
14257         AC_MSG_ERROR(
14258 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
14259  specify its pathname via --with-junit=..., or disable it via --without-junit])
14260     fi
14261     rm -f conftest.class conftest.java
14262     if test $OOO_JUNIT_JAR != ""; then
14263         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
14264     fi
14266     AC_MSG_CHECKING([for included Hamcrest])
14267     printf 'import org.hamcrest.BaseDescription;' > conftest.java
14268     if $JAVACOMPILER -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14269         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
14270     else
14271         AC_MSG_RESULT([Not included])
14272         AC_MSG_CHECKING([for standalone hamcrest jar.])
14273         if test "$with_hamcrest" = "yes"; then
14274             if test -e /usr/share/lib/java/hamcrest.jar; then
14275                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
14276             elif test -e /usr/share/java/hamcrest/core.jar; then
14277                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
14278             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
14279                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
14280             else
14281                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
14282             fi
14283         else
14284             HAMCREST_JAR=$with_hamcrest
14285         fi
14286         if test "$_os" = "WINNT"; then
14287             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
14288         fi
14289         if $JAVACOMPILER -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
14290             AC_MSG_RESULT([$HAMCREST_JAR])
14291         else
14292             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),
14293                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
14294         fi
14295     fi
14296     rm -f conftest.class conftest.java
14298 AC_SUBST(OOO_JUNIT_JAR)
14299 AC_SUBST(HAMCREST_JAR)
14300 # set back LC_ALL to C after the java related tests...
14301 LC_ALL=C
14303 AC_SUBST(SCPDEFS)
14306 # check for wget and curl
14308 WGET=
14309 CURL=
14311 if test "$enable_fetch_external" != "no"; then
14313 CURL=`command -v curl`
14315 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
14316     # wget new enough?
14317     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
14318     if test $? -eq 0; then
14319         WGET=$i
14320         break
14321     fi
14322 done
14324 if test -z "$WGET" -a -z "$CURL"; then
14325     AC_MSG_ERROR([neither wget nor curl found!])
14330 AC_SUBST(WGET)
14331 AC_SUBST(CURL)
14334 # check for sha256sum
14336 SHA256SUM=
14338 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
14339     eval "$i -a 256 --version" > /dev/null 2>&1
14340     ret=$?
14341     if test $ret -eq 0; then
14342         SHA256SUM="$i -a 256"
14343         break
14344     fi
14345 done
14347 if test -z "$SHA256SUM"; then
14348     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
14349         eval "$i --version" > /dev/null 2>&1
14350         ret=$?
14351         if test $ret -eq 0; then
14352             SHA256SUM=$i
14353             break
14354         fi
14355     done
14358 if test -z "$SHA256SUM"; then
14359     AC_MSG_ERROR([no sha256sum found!])
14362 AC_SUBST(SHA256SUM)
14364 dnl ===================================================================
14365 dnl Dealing with l10n options
14366 dnl ===================================================================
14367 AC_MSG_CHECKING([which languages to be built])
14368 # get list of all languages
14369 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
14370 # the sed command does the following:
14371 #   + if a line ends with a backslash, append the next line to it
14372 #   + adds " on the beginning of the value (after =)
14373 #   + adds " at the end of the value
14374 #   + removes en-US; we want to put it on the beginning
14375 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
14376 [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)]
14377 ALL_LANGS="en-US $completelangiso"
14378 # check the configured localizations
14379 WITH_LANG="$with_lang"
14381 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
14382 # (Norwegian is "nb" and "nn".)
14383 if test "$WITH_LANG" = "no"; then
14384     WITH_LANG=
14387 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
14388     AC_MSG_RESULT([en-US])
14389 else
14390     AC_MSG_RESULT([$WITH_LANG])
14391     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
14392     if test -z "$MSGFMT"; then
14393         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
14394             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
14395         elif test -x "/opt/lo/bin/msgfmt"; then
14396             MSGFMT="/opt/lo/bin/msgfmt"
14397         else
14398             AC_CHECK_PROGS(MSGFMT, [msgfmt])
14399             if test -z "$MSGFMT"; then
14400                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
14401             fi
14402         fi
14403     fi
14404     if test -z "$MSGUNIQ"; then
14405         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
14406             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
14407         elif test -x "/opt/lo/bin/msguniq"; then
14408             MSGUNIQ="/opt/lo/bin/msguniq"
14409         else
14410             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
14411             if test -z "$MSGUNIQ"; then
14412                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
14413             fi
14414         fi
14415     fi
14417 AC_SUBST(MSGFMT)
14418 AC_SUBST(MSGUNIQ)
14419 # check that the list is valid
14420 for lang in $WITH_LANG; do
14421     test "$lang" = "ALL" && continue
14422     # need to check for the exact string, so add space before and after the list of all languages
14423     for vl in $ALL_LANGS; do
14424         if test "$vl" = "$lang"; then
14425            break
14426         fi
14427     done
14428     if test "$vl" != "$lang"; then
14429         # if you're reading this - you prolly quoted your languages remove the quotes ...
14430         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
14431     fi
14432 done
14433 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
14434     echo $WITH_LANG | grep -q en-US
14435     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
14437 # list with substituted ALL
14438 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
14439 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
14440 test "$WITH_LANG" = "en-US" && WITH_LANG=
14441 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
14442     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
14443     ALL_LANGS=`echo $ALL_LANGS qtz`
14445 AC_SUBST(ALL_LANGS)
14446 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
14447 AC_SUBST(WITH_LANG)
14448 AC_SUBST(WITH_LANG_LIST)
14449 AC_SUBST(GIT_NEEDED_SUBMODULES)
14451 WITH_POOR_HELP_LOCALIZATIONS=
14452 if test -d "$SRC_ROOT/translations/source"; then
14453     for l in `ls -1 $SRC_ROOT/translations/source`; do
14454         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
14455             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
14456         fi
14457     done
14459 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
14461 if test -n "$with_locales" -a "$with_locales" != ALL; then
14462     WITH_LOCALES="$with_locales"
14464     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
14465     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
14466     # config_host/config_locales.h.in
14467     for locale in $WITH_LOCALES; do
14468         lang=${locale%_*}
14470         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
14472         case $lang in
14473         hi|mr*ne)
14474             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
14475             ;;
14476         bg|ru)
14477             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
14478             ;;
14479         esac
14480     done
14481 else
14482     AC_DEFINE(WITH_LOCALE_ALL)
14484 AC_SUBST(WITH_LOCALES)
14486 dnl git submodule update --reference
14487 dnl ===================================================================
14488 if test -n "${GIT_REFERENCE_SRC}"; then
14489     for repo in ${GIT_NEEDED_SUBMODULES}; do
14490         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
14491             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
14492         fi
14493     done
14495 AC_SUBST(GIT_REFERENCE_SRC)
14497 dnl git submodules linked dirs
14498 dnl ===================================================================
14499 if test -n "${GIT_LINK_SRC}"; then
14500     for repo in ${GIT_NEEDED_SUBMODULES}; do
14501         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14502             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14503         fi
14504     done
14506 AC_SUBST(GIT_LINK_SRC)
14508 dnl branding
14509 dnl ===================================================================
14510 AC_MSG_CHECKING([for alternative branding images directory])
14511 # initialize mapped arrays
14512 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14513 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14515 if test -z "$with_branding" -o "$with_branding" = "no"; then
14516     AC_MSG_RESULT([none])
14517     DEFAULT_BRAND_IMAGES="$brand_files"
14518 else
14519     if ! test -d $with_branding ; then
14520         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14521     else
14522         AC_MSG_RESULT([$with_branding])
14523         CUSTOM_BRAND_DIR="$with_branding"
14524         for lfile in $brand_files
14525         do
14526             if ! test -f $with_branding/$lfile ; then
14527                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14528                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14529             else
14530                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14531             fi
14532         done
14533         check_for_progress="yes"
14534     fi
14536 AC_SUBST([BRAND_INTRO_IMAGES])
14537 AC_SUBST([CUSTOM_BRAND_DIR])
14538 AC_SUBST([CUSTOM_BRAND_IMAGES])
14539 AC_SUBST([DEFAULT_BRAND_IMAGES])
14542 AC_MSG_CHECKING([for 'intro' progress settings])
14543 PROGRESSBARCOLOR=
14544 PROGRESSSIZE=
14545 PROGRESSPOSITION=
14546 PROGRESSFRAMECOLOR=
14547 PROGRESSTEXTCOLOR=
14548 PROGRESSTEXTBASELINE=
14550 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14551     source "$with_branding/progress.conf"
14552     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14553 else
14554     AC_MSG_RESULT([none])
14557 AC_SUBST(PROGRESSBARCOLOR)
14558 AC_SUBST(PROGRESSSIZE)
14559 AC_SUBST(PROGRESSPOSITION)
14560 AC_SUBST(PROGRESSFRAMECOLOR)
14561 AC_SUBST(PROGRESSTEXTCOLOR)
14562 AC_SUBST(PROGRESSTEXTBASELINE)
14565 dnl ===================================================================
14566 dnl Custom build version
14567 dnl ===================================================================
14568 AC_MSG_CHECKING([for extra build ID])
14569 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14570     EXTRA_BUILDID="$with_extra_buildid"
14572 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14573 if test -n "$EXTRA_BUILDID" ; then
14574     AC_MSG_RESULT([$EXTRA_BUILDID])
14575 else
14576     AC_MSG_RESULT([not set])
14578 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14580 OOO_VENDOR=
14581 AC_MSG_CHECKING([for vendor])
14582 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14583     OOO_VENDOR="$USERNAME"
14585     if test -z "$OOO_VENDOR"; then
14586         OOO_VENDOR="$USER"
14587     fi
14589     if test -z "$OOO_VENDOR"; then
14590         OOO_VENDOR="`id -u -n`"
14591     fi
14593     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14594 else
14595     OOO_VENDOR="$with_vendor"
14596     AC_MSG_RESULT([$OOO_VENDOR])
14598 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14599 AC_SUBST(OOO_VENDOR)
14601 if test "$_os" = "Android" ; then
14602     ANDROID_PACKAGE_NAME=
14603     AC_MSG_CHECKING([for Android package name])
14604     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14605         if test -n "$ENABLE_DEBUG"; then
14606             # Default to the package name that makes ndk-gdb happy.
14607             ANDROID_PACKAGE_NAME="org.libreoffice"
14608         else
14609             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14610         fi
14612         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14613     else
14614         ANDROID_PACKAGE_NAME="$with_android_package_name"
14615         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14616     fi
14617     AC_SUBST(ANDROID_PACKAGE_NAME)
14620 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14621 if test "$with_compat_oowrappers" = "yes"; then
14622     WITH_COMPAT_OOWRAPPERS=TRUE
14623     AC_MSG_RESULT(yes)
14624 else
14625     WITH_COMPAT_OOWRAPPERS=
14626     AC_MSG_RESULT(no)
14628 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14630 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14631 AC_MSG_CHECKING([for install dirname])
14632 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14633     INSTALLDIRNAME="$with_install_dirname"
14635 AC_MSG_RESULT([$INSTALLDIRNAME])
14636 AC_SUBST(INSTALLDIRNAME)
14638 AC_MSG_CHECKING([for prefix])
14639 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14640 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14641 PREFIXDIR="$prefix"
14642 AC_MSG_RESULT([$PREFIXDIR])
14643 AC_SUBST(PREFIXDIR)
14645 LIBDIR=[$(eval echo $(eval echo $libdir))]
14646 AC_SUBST(LIBDIR)
14648 DATADIR=[$(eval echo $(eval echo $datadir))]
14649 AC_SUBST(DATADIR)
14651 MANDIR=[$(eval echo $(eval echo $mandir))]
14652 AC_SUBST(MANDIR)
14654 DOCDIR=[$(eval echo $(eval echo $docdir))]
14655 AC_SUBST(DOCDIR)
14657 BINDIR=[$(eval echo $(eval echo $bindir))]
14658 AC_SUBST(BINDIR)
14660 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14661 AC_SUBST(INSTALLDIR)
14663 TESTINSTALLDIR="${BUILDDIR}/test-install"
14664 AC_SUBST(TESTINSTALLDIR)
14667 # ===================================================================
14668 # OAuth2 id and secrets
14669 # ===================================================================
14671 AC_MSG_CHECKING([for Google Drive client id and secret])
14672 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14673     AC_MSG_RESULT([not set])
14674     GDRIVE_CLIENT_ID="\"\""
14675     GDRIVE_CLIENT_SECRET="\"\""
14676 else
14677     AC_MSG_RESULT([set])
14678     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14679     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14681 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14682 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14684 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14685 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14686     AC_MSG_RESULT([not set])
14687     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14688     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14689 else
14690     AC_MSG_RESULT([set])
14691     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14692     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14694 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14695 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14697 AC_MSG_CHECKING([for OneDrive client id and secret])
14698 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14699     AC_MSG_RESULT([not set])
14700     ONEDRIVE_CLIENT_ID="\"\""
14701     ONEDRIVE_CLIENT_SECRET="\"\""
14702 else
14703     AC_MSG_RESULT([set])
14704     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14705     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14707 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14708 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14711 dnl ===================================================================
14712 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14713 dnl --enable-dependency-tracking configure option
14714 dnl ===================================================================
14715 AC_MSG_CHECKING([whether to enable dependency tracking])
14716 if test "$enable_dependency_tracking" = "no"; then
14717     nodep=TRUE
14718     AC_MSG_RESULT([no])
14719 else
14720     AC_MSG_RESULT([yes])
14722 AC_SUBST(nodep)
14724 dnl ===================================================================
14725 dnl Number of CPUs to use during the build
14726 dnl ===================================================================
14727 AC_MSG_CHECKING([for number of processors to use])
14728 # plain --with-parallelism is just the default
14729 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14730     if test "$with_parallelism" = "no"; then
14731         PARALLELISM=0
14732     else
14733         PARALLELISM=$with_parallelism
14734     fi
14735 else
14736     if test "$enable_icecream" = "yes"; then
14737         PARALLELISM="40"
14738     else
14739         case `uname -s` in
14741         Darwin|FreeBSD|NetBSD|OpenBSD)
14742             PARALLELISM=`sysctl -n hw.ncpu`
14743             ;;
14745         Linux)
14746             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14747         ;;
14748         # what else than above does profit here *and* has /proc?
14749         *)
14750             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14751             ;;
14752         esac
14754         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14755         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14756     fi
14759 if test $PARALLELISM -eq 0; then
14760     AC_MSG_RESULT([explicit make -j option needed])
14761 else
14762     AC_MSG_RESULT([$PARALLELISM])
14764 AC_SUBST(PARALLELISM)
14767 # Set up ILIB for MSVC build
14769 ILIB1=
14770 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
14771     ILIB="."
14772     if test -n "$JAVA_HOME"; then
14773         ILIB="$ILIB;$JAVA_HOME/lib"
14774     fi
14775     ILIB1=-link
14776     PathFormat "${COMPATH}/lib/$WIN_HOST_ARCH"
14777     ILIB="$ILIB;$formatted_path"
14778     ILIB1="$ILIB1 -LIBPATH:$formatted_path"
14779     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14780     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14781     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14782         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14783         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14784     fi
14785     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14786     ucrtlibpath_formatted=$formatted_path
14787     ILIB="$ILIB;$ucrtlibpath_formatted"
14788     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14789     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14790         PathFormat "$DOTNET_FRAMEWORK_HOME/lib"
14791         ILIB="$ILIB;$formatted_path"
14792     else
14793         PathFormat "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14794         ILIB="$ILIB;$formatted_path"
14795     fi
14797     if test "$cross_compiling" != "yes"; then
14798         ILIB_FOR_BUILD="$ILIB"
14799     fi
14801 AC_SUBST(ILIB)
14802 AC_SUBST(ILIB_FOR_BUILD)
14804 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14805 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14806 dnl from consteval constructor initializing const variable",
14807 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14808 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14809 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14810 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'" (which should be
14811 dnl fixed since Clang 14), <https://developercommunity.visualstudio.com/t/1581879> "Bogus error
14812 dnl C7595 with consteval constructor in ternary expression (/std:c++latest)" (which appears to be
14813 dnl fixed at least in Visual Studio Community 2022 Preview 17.9.0 Preview 5.0),
14814 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14815 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14816 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14817 dnl && "Ptr must be a pointer to Val type!"' failed." (which should be fixed since Clang 17), or
14818 dnl <https://developercommunity.visualstudio.com/t/Bogus-error-C2440-with-consteval-constru/10579616>
14819 dnl "Bogus error C2440 with consteval constructor (/std:c++20)":
14820 have_cpp_consteval=
14821 AC_LANG_PUSH([C++])
14822 save_CXX=$CXX
14823 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14824     CXX="env LIB=$ILIB $CXX"
14826 save_CXXFLAGS=$CXXFLAGS
14827 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14828 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14829         struct S {
14830             consteval S() { i = 1; }
14831             int i = 0;
14832         };
14833         S const s;
14835         struct S1 {
14836              int a;
14837              consteval S1(int n): a(n) {}
14838         };
14839         struct S2 {
14840             S1 x;
14841             S2(): x(0) {}
14842         };
14844         struct S3 {
14845             consteval S3() {}
14846             union {
14847                 int a;
14848                 unsigned b = 0;
14849             };
14850         };
14851         void f() { S3(); }
14853         struct S4 { consteval S4() = default; };
14854         void f4(bool b) { b ? S4() : S4(); }
14856         struct S5 {
14857             consteval S5() { c = 0; }
14858             char * f() { return &c; }
14859             union {
14860                 char c;
14861                 int i;
14862             };
14863         };
14864         auto s5 = S5().f();
14866         struct S6 {
14867             consteval S6(char const (&lit)[[2]]) {
14868                 buf[[0]] = lit[[0]];
14869                 buf[[1]] = lit[[1]];
14870             }
14871             union {
14872                 int x;
14873                 char buf[[2]];
14874             };
14875         };
14876         void f6() { S6("a"); }
14877     ], [
14878         return (s.i == 1) ? 0 : 1;
14879     ])], [
14880         have_cpp_consteval=1
14881         AC_MSG_RESULT([yes])
14882     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14883 CXX=$save_CXX
14884 CXXFLAGS=$save_CXXFLAGS
14885 AC_LANG_POP([C++])
14886 if test -n "$have_cpp_consteval" && test "$COM_IS_CLANG" = TRUE && test -n "$BUILDING_PCH_WITH_OBJ"
14887 then
14888     AC_MSG_CHECKING([whether $CXX_BASE has working consteval in combination with PCH])
14889     dnl ...that does not suffer from <https://github.com/llvm/llvm-project/issues/81745> "undefined
14890     dnl reference to consteval constructor exported from module" (which also affects PCH, see
14891     dnl <https://lists.freedesktop.org/archives/libreoffice/2024-February/091564.html> "Our Clang
14892     dnl --enable-pch setup is known broken"):
14893     printf 'export module M;\nexport struct S1 { consteval S1(int) {} };' >conftest.cppm
14894     $CXX $CXXFLAGS $CXXFLAGS_CXX11 --precompile conftest.cppm
14895     rm conftest.cppm
14896     AC_LANG_PUSH([C++])
14897     save_CXXFLAGS=$CXXFLAGS
14898     save_LDFLAGS=$LDFLAGS
14899     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14900     LDFLAGS="$LDFLAGS -fmodule-file=M=conftest.pcm conftest.pcm"
14901     AC_LINK_IFELSE([AC_LANG_PROGRAM([
14902         import M;
14903     ], [
14904         struct S2 { S1 s = 0; };
14905         S2 s;
14906     ])], [
14907         AC_MSG_RESULT([yes])
14908     ], [
14909         have_cpp_consteval=
14910         AC_MSG_RESULT([no])])
14911     CXXFLAGS=$save_CXXFLAGS
14912     LDFLAGS=$save_LDFLAGS
14913     AC_LANG_POP([C++])
14914     rm conftest.pcm
14916 if test -n "$have_cpp_consteval"; then
14917     AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14920 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 std::strong_order])
14921 dnl ...which is known to not be implemented in libc++ prior to
14922 dnl <https://github.com/llvm/llvm-project/commit/d8380ad977e94498e170b06449c81f1fc27da7b5> "[libc++]
14923 dnl [P1614] Implement [cmp.alg]'s std::{strong,weak,partial}_order" in LLVM 14:
14924 AC_LANG_PUSH([C++])
14925 save_CXX=$CXX
14926 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14927     CXX="env LIB=$ILIB $CXX"
14929 save_CXXFLAGS=$CXXFLAGS
14930 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14931 AC_LINK_IFELSE([AC_LANG_PROGRAM([
14932         #include <compare>
14933     ], [
14934         (void) (std::strong_order(1.0, 2.0) < 0);
14935     ])], [
14936         AC_DEFINE([HAVE_CPP_STRONG_ORDER],[1])
14937         AC_MSG_RESULT([yes])
14938     ], [AC_MSG_RESULT([no])])
14939 CXX=$save_CXX
14940 CXXFLAGS=$save_CXXFLAGS
14941 AC_LANG_POP([C++])
14943 # ===================================================================
14944 # Creating bigger shared library to link against
14945 # ===================================================================
14946 AC_MSG_CHECKING([whether to create huge library])
14947 MERGELIBS=
14948 MERGELIBS_MORE=
14950 if test $_os = iOS -o $_os = Android; then
14951     # Never any point in mergelibs for these as we build just static
14952     # libraries anyway...
14953     enable_mergelibs=no
14956 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14957     if test "$enable_mergelibs" = "more"; then
14958         MERGELIBS="TRUE"
14959         MERGELIBS_MORE="TRUE"
14960         AC_MSG_RESULT([yes (more)])
14961         AC_DEFINE(ENABLE_MERGELIBS)
14962         AC_DEFINE(ENABLE_MERGELIBS_MORE)
14963     elif test "$enable_mergelibs" = "yes" -o "$enable_mergelibs" = ""; then
14964         MERGELIBS="TRUE"
14965         AC_MSG_RESULT([yes])
14966         AC_DEFINE(ENABLE_MERGELIBS)
14967     else
14968         AC_MSG_ERROR([unknown value --enable-mergelibs=$enable_mergelibs])
14969     fi
14970 else
14971     AC_MSG_RESULT([no])
14973 AC_SUBST([MERGELIBS])
14974 AC_SUBST([MERGELIBS_MORE])
14976 dnl ===================================================================
14977 dnl icerun is a wrapper that stops us spawning tens of processes
14978 dnl locally - for tools that can't be executed on the compile cluster
14979 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14980 dnl ===================================================================
14981 AC_MSG_CHECKING([whether to use icerun wrapper])
14982 ICECREAM_RUN=
14983 if test "$enable_icecream" = "yes" && command -v icerun >/dev/null ; then
14984     ICECREAM_RUN=icerun
14985     AC_MSG_RESULT([yes])
14986 else
14987     AC_MSG_RESULT([no])
14989 AC_SUBST(ICECREAM_RUN)
14991 dnl ===================================================================
14992 dnl Setup the ICECC_VERSION for the build the same way it was set for
14993 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14994 dnl ===================================================================
14995 x_ICECC_VERSION=[\#]
14996 if test -n "$ICECC_VERSION" ; then
14997     x_ICECC_VERSION=
14999 AC_SUBST(x_ICECC_VERSION)
15000 AC_SUBST(ICECC_VERSION)
15002 dnl ===================================================================
15004 AC_MSG_CHECKING([MPL subset])
15005 MPL_SUBSET=
15006 LICENSE="LGPL"
15008 if test "$enable_mpl_subset" = "yes"; then
15009     mpl_error_string=
15010     newline=$'\n    *'
15011     warn_report=false
15012     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
15013         warn_report=true
15014     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
15015         warn_report=true
15016     fi
15017     if test "$warn_report" = "true"; then
15018         mpl_error_string="$mpl_error_string$newline Need to --disable-report-builder - extended database report builder."
15019     fi
15020     if test "x$enable_postgresql_sdbc" != "xno"; then
15021         mpl_error_string="$mpl_error_string$newline Need to --disable-postgresql-sdbc - the PostgreSQL database backend."
15022     fi
15023     if test "$enable_lotuswordpro" = "yes"; then
15024         mpl_error_string="$mpl_error_string$newline Need to --disable-lotuswordpro - a Lotus Word Pro file format import filter."
15025     fi
15026     if test -n "$ENABLE_POPPLER"; then
15027         if test "x$SYSTEM_POPPLER" = "x"; then
15028             mpl_error_string="$mpl_error_string$newline Need to disable PDF import via poppler (--disable-poppler) or use system library."
15029         fi
15030     fi
15031     # cf. m4/libo_check_extension.m4
15032     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
15033         mpl_error_string="$mpl_error_string$newline Need to disable extra extensions enabled using --enable-ext-XXXX."
15034     fi
15035     denied_themes=
15036     filtered_themes=
15037     for theme in $WITH_THEMES; do
15038         case $theme in
15039         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
15040             denied_themes="${denied_themes:+$denied_themes }$theme" ;;
15041         *)
15042             filtered_themes="${filtered_themes:+$filtered_themes }$theme" ;;
15043         esac
15044     done
15045     if test "x$denied_themes" != "x"; then
15046         if test "x$filtered_themes" == "x"; then
15047             filtered_themes="colibre"
15048         fi
15049         mpl_error_string="$mpl_error_string$newline Need to disable icon themes: $denied_themes, use --with-theme=$filtered_themes."
15050     fi
15052     ENABLE_OPENGL_TRANSITIONS=
15054     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
15055         mpl_error_string="$mpl_error_string$newline Need to --disable-lpsolve - calc linear programming solver."
15056     fi
15058     if test "x$mpl_error_string" != "x"; then
15059         AC_MSG_ERROR([$mpl_error_string])
15060     fi
15062     MPL_SUBSET="TRUE"
15063     LICENSE="MPL-2.0"
15064     AC_DEFINE(MPL_HAVE_SUBSET)
15065     AC_MSG_RESULT([only])
15066 else
15067     AC_MSG_RESULT([no restrictions])
15069 AC_SUBST(MPL_SUBSET)
15070 AC_SUBST(LICENSE)
15072 dnl ===================================================================
15074 AC_MSG_CHECKING([formula logger])
15075 ENABLE_FORMULA_LOGGER=
15077 if test "x$enable_formula_logger" = "xyes"; then
15078     AC_MSG_RESULT([yes])
15079     AC_DEFINE(ENABLE_FORMULA_LOGGER)
15080     ENABLE_FORMULA_LOGGER=TRUE
15081 elif test -n "$ENABLE_DBGUTIL" ; then
15082     AC_MSG_RESULT([yes])
15083     AC_DEFINE(ENABLE_FORMULA_LOGGER)
15084     ENABLE_FORMULA_LOGGER=TRUE
15085 else
15086     AC_MSG_RESULT([no])
15089 AC_SUBST(ENABLE_FORMULA_LOGGER)
15091 dnl ===================================================================
15092 dnl Checking for active Antivirus software.
15093 dnl ===================================================================
15095 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
15096     AC_MSG_CHECKING([for active Antivirus software])
15097     PathFormat "$SRC_ROOT/antivirusDetection.vbs"
15098     ANTIVIRUS_LIST=`cscript.exe //Nologo ${formatted_path}`
15099     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
15100         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
15101             AC_MSG_RESULT([found])
15102             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
15103             echo $EICAR_STRING > $SRC_ROOT/eicar
15104             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
15105             rm $SRC_ROOT/eicar
15106             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
15107                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
15108             fi
15109             echo $EICAR_STRING > $BUILDDIR/eicar
15110             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
15111             rm $BUILDDIR/eicar
15112             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
15113                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
15114             fi
15115             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"
15116         else
15117             AC_MSG_RESULT([not found])
15118         fi
15119     else
15120         AC_MSG_RESULT([n/a])
15121     fi
15124 dnl ===================================================================
15126 AC_MSG_CHECKING([for coredumpctl support])
15127 if test -z "$with_coredumpctl" && test $_os != Linux; then
15128     with_coredumpctl=no
15130 if test "$with_coredumpctl" = no; then
15131     WITH_COREDUMPCTL=
15132 else
15133     AC_PATH_PROG(COREDUMPCTL, coredumpctl)
15134     AC_PATH_PROG(JQ, jq)
15135     AC_PATH_PROG(SYSTEMD_ESCAPE, systemd-escape)
15136     AC_PATH_PROG(SYSTEMD_RUN, systemd-run)
15137     if test -z "$COREDUMPCTL" || test -z "$JQ" || test -z "$SYSTEMD_ESCAPE" \
15138         || test -z "$SYSTEMD_RUN"
15139     then
15140         if test -z "$with_coredumpctl"; then
15141             WITH_COREDUMPCTL=
15142         else
15143             if test -z "$COREDUMPCTL"; then
15144                 AC_MSG_ERROR([coredumpctl not found])
15145             fi
15146             if test -z "$JQ"; then
15147                 AC_MSG_ERROR([jq not found])
15148             fi
15149             if test -z "$SYSTEMD_ESCAPE"; then
15150                 AC_MSG_ERROR([systemd-escape not found])
15151             fi
15152             if test -z "$SYSTEMD_RUN"; then
15153                 AC_MSG_ERROR([systemd-run not found])
15154             fi
15155         fi
15156     else
15157         WITH_COREDUMPCTL=TRUE
15158     fi
15160 if test -z "$WITH_COREDUMPCTL"; then
15161     AC_MSG_RESULT([no])
15162 else
15163     AC_MSG_RESULT([yes])
15165 AC_SUBST(COREDUMPCTL)
15166 AC_SUBST(JQ)
15167 AC_SUBST(SYSTEMD_ESCAPE)
15168 AC_SUBST(SYSTEMD_RUN)
15169 AC_SUBST(WITH_COREDUMPCTL)
15171 dnl ===================================================================
15172 dnl Setting up the environment.
15173 dnl ===================================================================
15174 AC_MSG_NOTICE([setting up the build environment variables...])
15176 AC_SUBST(COMPATH)
15178 if test "$build_os" = "cygwin" -o "$build_os" = wsl; then
15179     if test -d "$COMPATH_unix/atlmfc/lib/spectre"; then
15180         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
15181         ATL_INCLUDE="$COMPATH/atlmfc/include"
15182     elif test -d "$COMPATH_unix/atlmfc/lib"; then
15183         ATL_LIB="$COMPATH/atlmfc/lib"
15184         ATL_INCLUDE="$COMPATH/atlmfc/include"
15185     else
15186         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
15187         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
15188     fi
15189     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
15190     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
15191     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
15194 if test "$build_os" = "cygwin"; then
15195     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
15196     PathFormat "/usr/bin/find.exe"
15197     FIND="$formatted_path"
15198     PathFormat "/usr/bin/sort.exe"
15199     SORT="$formatted_path"
15200     PathFormat "/usr/bin/grep.exe"
15201     WIN_GREP="$formatted_path"
15202     PathFormat "/usr/bin/ls.exe"
15203     WIN_LS="$formatted_path"
15204     PathFormat "/usr/bin/touch.exe"
15205     WIN_TOUCH="$formatted_path"
15206 else
15207     FIND=find
15208     SORT=sort
15211 AC_SUBST(ATL_INCLUDE)
15212 AC_SUBST(ATL_LIB)
15213 AC_SUBST(FIND)
15214 AC_SUBST(SORT)
15215 AC_SUBST(WIN_GREP)
15216 AC_SUBST(WIN_LS)
15217 AC_SUBST(WIN_TOUCH)
15219 AC_SUBST(BUILD_TYPE)
15221 AC_SUBST(SOLARINC)
15223 PathFormat "$PERL"
15224 PERL="$formatted_path"
15225 AC_SUBST(PERL)
15227 if test -n "$TMPDIR"; then
15228     TEMP_DIRECTORY="$TMPDIR"
15229 else
15230     TEMP_DIRECTORY="/tmp"
15232 CYGWIN_BASH="C:/cygwin64/bin/bash.exe"
15233 if test "$build_os" = "cygwin"; then
15234     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
15235     CYGWIN_BASH=`cygpath -m /usr/bin/bash`
15237 AC_SUBST(TEMP_DIRECTORY)
15238 AC_SUBST(CYGWIN_BASH)
15240 # setup the PATH for the environment
15241 if test -n "$LO_PATH_FOR_BUILD"; then
15242     LO_PATH="$LO_PATH_FOR_BUILD"
15243     case "$host_os" in
15244     cygwin*|wsl*)
15245         pathmunge "$MSVC_HOST_PATH" "before"
15246         ;;
15247     esac
15248 else
15249     LO_PATH="$PATH"
15251     case "$host_os" in
15253     dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
15254         if test "$ENABLE_JAVA" != ""; then
15255             pathmunge "$JAVA_HOME/bin" "after"
15256         fi
15257         ;;
15259     cygwin*|wsl*)
15260         # Win32 make needs native paths
15261         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
15262             LO_PATH=`cygpath -p -m "$PATH"`
15263         fi
15264         if test "$WIN_BUILD_ARCH" = "x64"; then
15265             # needed for msi packaging
15266             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
15267         fi
15268         if test "$WIN_BUILD_ARCH" = "arm64"; then
15269             # needed for msi packaging - as of 10.0.22621 SDK no arm64 ones yet
15270             # the x86 ones probably would work just as well...
15271             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/arm" "before"
15272         fi
15273         # .NET 4.6 and higher don't have bin directory
15274         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
15275             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
15276         fi
15277         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
15278         pathmunge "$CSC_PATH" "before"
15279         pathmunge "$MIDL_PATH" "before"
15280         pathmunge "$AL_PATH" "before"
15281         pathmunge "$MSVC_MULTI_PATH" "before"
15282         pathmunge "$MSVC_BUILD_PATH" "before"
15283         if test -n "$MSBUILD_PATH" ; then
15284             pathmunge "$MSBUILD_PATH" "before"
15285         fi
15286         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
15287         if test "$ENABLE_JAVA" != ""; then
15288             if test -d "$JAVA_HOME/jre/bin/client"; then
15289                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
15290             fi
15291             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
15292                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
15293             fi
15294             pathmunge "$JAVA_HOME/bin" "before"
15295         fi
15296         pathmunge "$MSVC_HOST_PATH" "before"
15297         ;;
15299     solaris*)
15300         pathmunge "/usr/css/bin" "before"
15301         if test "$ENABLE_JAVA" != ""; then
15302             pathmunge "$JAVA_HOME/bin" "after"
15303         fi
15304         ;;
15305     esac
15308 AC_SUBST(LO_PATH)
15310 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
15311 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
15312     x_LO_ELFCHECK_ALLOWLIST=
15313 else
15314     x_LO_ELFCHECK_ALLOWLIST=[\#]
15316 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
15317 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
15319 libo_FUZZ_SUMMARY
15321 # Generate a configuration sha256 we can use for deps
15322 if test -f config_host.mk; then
15323     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
15325 if test -f config_host_lang.mk; then
15326     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
15329 CFLAGS=$my_original_CFLAGS
15330 CXXFLAGS=$my_original_CXXFLAGS
15331 CPPFLAGS=$my_original_CPPFLAGS
15333 AC_CONFIG_LINKS([include:include])
15335 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
15336 # BUILD platform configuration] - otherwise breaks cross building
15337 AC_CONFIG_FILES([config_host.mk
15338                  config_host_lang.mk
15339                  Makefile
15340                  bin/bffvalidator.sh
15341                  bin/odfvalidator.sh
15342                  bin/officeotron.sh
15343                  instsetoo_native/util/openoffice.lst
15344                  sysui/desktop/macosx/Info.plist
15345                  hardened_runtime.xcent:sysui/desktop/macosx/hardened_runtime.xcent.in
15346                  lo.xcent:sysui/desktop/macosx/lo.xcent.in
15347                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
15349 AC_CONFIG_HEADERS([config_host/config_atspi.h])
15350 AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
15351 AC_CONFIG_HEADERS([config_host/config_buildid.h])
15352 AC_CONFIG_HEADERS([config_host/config_box2d.h])
15353 AC_CONFIG_HEADERS([config_host/config_clang.h])
15354 AC_CONFIG_HEADERS([config_host/config_crypto.h])
15355 AC_CONFIG_HEADERS([config_host/config_dconf.h])
15356 AC_CONFIG_HEADERS([config_host/config_eot.h])
15357 AC_CONFIG_HEADERS([config_host/config_extensions.h])
15358 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
15359 AC_CONFIG_HEADERS([config_host/config_cairo_rgba.h])
15360 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
15361 AC_CONFIG_HEADERS([config_host/config_dbus.h])
15362 AC_CONFIG_HEADERS([config_host/config_features.h])
15363 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
15364 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
15365 AC_CONFIG_HEADERS([config_host/config_firebird.h])
15366 AC_CONFIG_HEADERS([config_host/config_folders.h])
15367 AC_CONFIG_HEADERS([config_host/config_fonts.h])
15368 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
15369 AC_CONFIG_HEADERS([config_host/config_gio.h])
15370 AC_CONFIG_HEADERS([config_host/config_global.h])
15371 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
15372 AC_CONFIG_HEADERS([config_host/config_java.h])
15373 AC_CONFIG_HEADERS([config_host/config_langs.h])
15374 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
15375 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
15376 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
15377 AC_CONFIG_HEADERS([config_host/config_locales.h])
15378 AC_CONFIG_HEADERS([config_host/config_mpl.h])
15379 AC_CONFIG_HEADERS([config_host/config_oox.h])
15380 AC_CONFIG_HEADERS([config_host/config_options.h])
15381 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
15382 AC_CONFIG_HEADERS([config_host/config_zxing.h])
15383 AC_CONFIG_HEADERS([config_host/config_skia.h])
15384 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
15385 AC_CONFIG_HEADERS([config_host/config_validation.h])
15386 AC_CONFIG_HEADERS([config_host/config_vendor.h])
15387 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
15388 AC_CONFIG_HEADERS([config_host/config_version.h])
15389 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
15390 AC_CONFIG_HEADERS([config_host/config_poppler.h])
15391 AC_CONFIG_HEADERS([config_host/config_python.h])
15392 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
15393 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
15394 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
15395 AC_OUTPUT
15397 if test "$CROSS_COMPILING" = TRUE; then
15398     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
15401 # touch the config timestamp file
15402 if test ! -f config_host.mk.stamp; then
15403     echo > config_host.mk.stamp
15404 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
15405     echo "Host Configuration unchanged - avoiding scp2 stamp update"
15406 else
15407     echo > config_host.mk.stamp
15410 # touch the config lang timestamp file
15411 if test ! -f config_host_lang.mk.stamp; then
15412     echo > config_host_lang.mk.stamp
15413 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
15414     echo "Language Configuration unchanged - avoiding scp2 stamp update"
15415 else
15416     echo > config_host_lang.mk.stamp
15420 if test \( "$STALE_MAKE" = "TRUE" \) \
15421         -a "$build_os" = "cygwin"; then
15423 cat << _EOS
15424 ****************************************************************************
15425 WARNING:
15426 Your make version is known to be horribly slow, and hard to debug
15427 problems with. To get a reasonably functional make please do:
15429 to install a pre-compiled binary make for Win32
15431  mkdir -p /opt/lo/bin
15432  cd /opt/lo/bin
15433  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
15434  cp make-4.2.1-msvc.exe make
15435  chmod +x make
15437 to install from source:
15438 place yourself in a working directory of you choice.
15440  git clone git://git.savannah.gnu.org/make.git
15442  [go to Start menu, open "Visual Studio 2019" or "Visual Studio 2022", and then click "x86 Native Tools Command Prompt" or "x64 Native Tools Command Prompt"]
15443  set PATH=%PATH%;C:\Cygwin\bin
15444  [or Cygwin64, if that is what you have]
15445  cd path-to-make-repo-you-cloned-above
15446  build_w32.bat --without-guile
15448 should result in a WinRel/gnumake.exe.
15449 Copy it to the Cygwin /opt/lo/bin directory as make.exe
15451 Then re-run autogen.sh
15453 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
15454 Alternatively, you can install the 'new' make where ever you want and make sure that `command -v make` finds it.
15456 _EOS
15460 cat << _EOF
15461 ****************************************************************************
15463 To show information on various make targets and make flags, run:
15464 $GNUMAKE help
15466 To just build, run:
15467 $GNUMAKE
15469 _EOF
15471 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
15472     cat << _EOF
15473 After the build has finished successfully, you can immediately run what you built using the command:
15474 _EOF
15476     if test $_os = Darwin; then
15477         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
15478     else
15479         echo instdir/program/soffice
15480     fi
15481     cat << _EOF
15483 If you want to run the unit tests, run:
15484 $GNUMAKE check
15486 _EOF
15489 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
15490     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
15491     cat "$WARNINGS_FILE_FOR_BUILD"
15492     echo
15495 if test -s "$WARNINGS_FILE"; then
15496     echo "HOST config ($WARNINGS_FILE)"
15497     cat "$WARNINGS_FILE"
15500 # Remove unneeded emconfigure artifacts
15501 rm -f a.out a.wasm a.out.js a.out.wasm
15503 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: