look for java, javac and javadoc with the .exe suffix on windows
[LibreOffice.git] / configure.ac
blob46430707a31355e29bfb80aca2b2710cd82915a7
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 javacompiler="javac"
3527 javadoc="javadoc"
3528 if test "$with_java" != "no"; then
3529     if test "$DISABLE_SCRIPTING" = TRUE; then
3530         AC_MSG_RESULT([no, overridden by --disable-scripting])
3531         ENABLE_JAVA=""
3532         with_java=no
3533     else
3534         AC_MSG_RESULT([yes])
3535         ENABLE_JAVA="TRUE"
3536         AC_DEFINE(HAVE_FEATURE_JAVA)
3537     fi
3538 else
3539     AC_MSG_RESULT([no])
3540     ENABLE_JAVA=""
3543 AC_SUBST(ENABLE_JAVA)
3545 dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) support for Java
3547 dnl ENABLE_JAVA="" indicate no Java support at all
3549 dnl ===================================================================
3550 dnl Check macOS SDK and compiler
3551 dnl ===================================================================
3553 if test $_os = Darwin; then
3555     # The SDK in the currently selected Xcode should be found.
3557     AC_MSG_CHECKING([what macOS SDK to use])
3558     # XCode only ships with a single SDK for a while now, and using older SDKs alongside is not
3559     # really supported anymore, instead you'd use different copies of Xcode, each with their own
3560     # SDK, and thus xcrun will pick the SDK that matches the currently selected Xcode version
3561     # also restricting the SDK version to "known good" versions doesn't seem necessary anymore, the
3562     # problems that existed in the PPC days with target versions not being respected or random
3563     # failures seems to be a thing of the past or rather: limiting either the Xcode version or the
3564     # SDK version is enough, no need to do both...
3565     MACOSX_SDK_PATH=`xcrun --sdk macosx --show-sdk-path 2> /dev/null`
3566     if test ! -d "$MACOSX_SDK_PATH"; then
3567         AC_MSG_ERROR([Could not find an appropriate macOS SDK])
3568     fi
3569     macosx_sdk=`xcodebuild -version -sdk "$MACOSX_SDK_PATH" SDKVersion`
3570     MACOSX_SDK_BUILD_VERSION=$(xcodebuild -version -sdk "$MACOSX_SDK_PATH" ProductBuildVersion)
3571     # format changed between 10.9 and 10.10 - up to 10.9 it was just four digits (1090), starting
3572     # with macOS 10.10 it was switched to account for x.y.z with six digits, 10.10 is 101000,
3573     # 10.10.2 is 101002
3574     # we don't target the lower versions anymore, so it doesn't matter that we don't generate the
3575     # correct version in case such an old SDK is specified, it will be rejected later anyway
3576     MACOSX_SDK_VERSION=$(echo $macosx_sdk | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3577     if test $MACOSX_SDK_VERSION -lt 101500; then
3578         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported, lowest supported version is 10.15])
3579     fi
3580     if test "$host_cpu" = arm64 -a $MACOSX_SDK_VERSION -lt 110000; then
3581         AC_MSG_ERROR([macOS SDK $macosx_sdk is not supported for Apple Silicon (need at least 11.0)])
3582     fi
3583     AC_MSG_RESULT([macOS SDK $macosx_sdk at $MACOSX_SDK_PATH])
3585     AC_MSG_CHECKING([what minimum version of macOS to require])
3586     if test "$with_macosx_version_min_required" = "" ; then
3587         if test "$host_cpu" = x86_64; then
3588             with_macosx_version_min_required="10.15";
3589         else
3590             with_macosx_version_min_required="11.0";
3591         fi
3592     fi
3593     # see same notes about MACOSX_SDK_VERSION above
3594     MAC_OS_X_VERSION_MIN_REQUIRED=$(echo $with_macosx_version_min_required | $AWK -F. '{ print $1*10000+$2*100+$3 }')
3595     if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 101500; then
3596         AC_MSG_ERROR([with-macosx-version-min-required $with_macosx_version_min_required is not a supported value, minimum supported version is 10.15])
3597     fi
3598     AC_MSG_RESULT([$with_macosx_version_min_required])
3600     AC_MSG_CHECKING([that macosx-version-min-required is coherent with macos-with-sdk])
3601     if test $MAC_OS_X_VERSION_MIN_REQUIRED -gt $MACOSX_SDK_VERSION; then
3602         AC_MSG_ERROR([the version minimum required ($with_macosx_version_min_required) cannot be greater than the sdk level ($macosx_sdk)])
3603     else
3604         AC_MSG_RESULT([yes])
3605     fi
3607     # export this so that "xcrun" invocations later return matching values
3608     DEVELOPER_DIR="${MACOSX_SDK_PATH%/SDKs*}"
3609     DEVELOPER_DIR="${DEVELOPER_DIR%/Platforms*}"
3610     export DEVELOPER_DIR
3611     FRAMEWORKSHOME="$MACOSX_SDK_PATH/System/Library/Frameworks"
3612     MACOSX_DEPLOYMENT_TARGET="$with_macosx_version_min_required"
3614     AC_MSG_CHECKING([whether Xcode is new enough])
3615     my_xcode_ver1=$(xcrun xcodebuild -version | head -n 1)
3616     my_xcode_ver2=${my_xcode_ver1#Xcode }
3617     my_xcode_ver3=$(printf %s "$my_xcode_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
3618     if test "$my_xcode_ver3" -ge 1205; then
3619         AC_MSG_RESULT([yes ($my_xcode_ver2)])
3620         if test $MAC_OS_X_VERSION_MIN_REQUIRED -lt 120000; then
3621             if test "$my_xcode_ver3" -ge 1600; then
3622                 dnl the Xcode 15 relnotes state that the classic linker will disappear in the next version, but nothing about
3623                 dnl fixing the problem with weak symbols/macOS 11 compatibility, so assume for now that Xcode 16 will break it...
3624                 AC_MSG_ERROR([Check that Xcode 16 still supports the old linker/that it doesn't break macOS 11 compatibility, then remove this check]);
3625             fi
3626             if test "$my_xcode_ver3" -ge 1500; then
3627                 AC_MSG_WARN([Xcode 15 has a new linker that causes runtime crashes on macOS 11])
3628                 add_warning "Xcode 15 has a new linker that causes runtime crashes on macOS 11, forcing the old linker."
3629                 add_warning "see https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking"
3630                 LDFLAGS="$LDFLAGS -Wl,-ld_classic"
3631                 # if LDFLAGS weren't set already, a check above sets x_LDFLAGS=[#] to comment-out the export LDFLAGS line in config_host.mk
3632                 x_LDFLAGS=
3633             fi
3634         fi
3635     else
3636         AC_MSG_ERROR(["$my_xcode_ver1" is too old or unrecognized, must be at least Xcode 12.5])
3637     fi
3639     my_xcode_ver1=$(xcrun xcodebuild -version | tail -n 1)
3640     MACOSX_XCODE_BUILD_VERSION=${my_xcode_ver1#Build version }
3642     LIBTOOL=/usr/bin/libtool
3643     INSTALL_NAME_TOOL=install_name_tool
3644     if test -z "$save_CC"; then
3645         stdlib=-stdlib=libc++
3647         AC_MSG_CHECKING([what C compiler to use])
3648         CC="`xcrun -find clang`"
3649         CC_BASE=`first_arg_basename "$CC"`
3650         if test "$host_cpu" = x86_64; then
3651             CC+=" -target x86_64-apple-macos"
3652         else
3653             CC+=" -target arm64-apple-macos"
3654         fi
3655         CC+=" -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3656         AC_MSG_RESULT([$CC])
3658         AC_MSG_CHECKING([what C++ compiler to use])
3659         CXX="`xcrun -find clang++`"
3660         CXX_BASE=`first_arg_basename "$CXX"`
3661         if test "$host_cpu" = x86_64; then
3662             CXX+=" -target x86_64-apple-macos"
3663         else
3664             CXX+=" -target arm64-apple-macos"
3665         fi
3666         CXX+=" $stdlib -mmacosx-version-min=$with_macosx_version_min_required -isysroot $MACOSX_SDK_PATH"
3667         AC_MSG_RESULT([$CXX])
3669         INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3670         AR=`xcrun -find ar`
3671         NM=`xcrun -find nm`
3672         STRIP=`xcrun -find strip`
3673         LIBTOOL=`xcrun -find libtool`
3674         RANLIB=`xcrun -find ranlib`
3675     fi
3677     AC_MSG_CHECKING([whether to do code signing])
3679     if test -z "$enable_macosx_code_signing" -o "$enable_macosx_code_signing" == "no" ; then
3680         AC_MSG_RESULT([no])
3681     else
3682         if test "$enable_macosx_code_signing" = yes; then
3683             # By default use the first suitable certificate (?).
3685             # https://stackoverflow.com/questions/13196291/difference-between-mac-developer-and-3rd-party-mac-developer-application
3686             # says that the "Mac Developer" certificate is useful just for self-testing. For distribution
3687             # outside the Mac App Store, use the "Developer ID Application" one, and for distribution in
3688             # the App Store, the "3rd Party Mac Developer" one. I think it works best to the
3689             # "Developer ID Application" one.
3690             identity="Developer ID Application:"
3691         else
3692             identity=$enable_macosx_code_signing
3693         fi
3694         identity=`security find-identity -p codesigning -v 2>/dev/null | $AWK "/$identity/{print \\$2; exit}"`
3695         if test -n "$identity"; then
3696             MACOSX_CODESIGNING_IDENTITY=$identity
3697             pretty_name=`security find-identity -p codesigning -v | grep "$MACOSX_CODESIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3698             AC_MSG_RESULT([yes, using the identity $MACOSX_CODESIGNING_IDENTITY for $pretty_name])
3699         else
3700             AC_MSG_ERROR([cannot determine identity to use])
3701         fi
3702     fi
3704     AC_MSG_CHECKING([whether to create a Mac App Store package])
3706     if test -z "$enable_macosx_package_signing" || test "$enable_macosx_package_signing" == no; then
3707         AC_MSG_RESULT([no])
3708     elif test -z "$MACOSX_CODESIGNING_IDENTITY"; then
3709         AC_MSG_ERROR([You forgot --enable-macosx-code-signing])
3710     else
3711         if test "$enable_macosx_package_signing" = yes; then
3712             # By default use the first suitable certificate.
3713             # It should be a "3rd Party Mac Developer Installer" one
3714             identity="3rd Party Mac Developer Installer:"
3715         else
3716             identity=$enable_macosx_package_signing
3717         fi
3718         identity=`security find-identity -v 2>/dev/null | $AWK "/$identity/ {print \\$2; exit}"`
3719         if test -n "$identity"; then
3720             MACOSX_PACKAGE_SIGNING_IDENTITY=$identity
3721             pretty_name=`security find-identity -v | grep "$MACOSX_PACKAGE_SIGNING_IDENTITY" | sed -e 's/^[[^"]]*"//' -e 's/"//'`
3722             AC_MSG_RESULT([yes, using the identity $MACOSX_PACKAGE_SIGNING_IDENTITY for $pretty_name])
3723         else
3724             AC_MSG_ERROR([Could not find any suitable '3rd Party Mac Developer Installer' certificate])
3725         fi
3726     fi
3728     if test -n "$MACOSX_CODESIGNING_IDENTITY" -a -n "$MACOSX_PACKAGE_SIGNING_IDENTITY" -a "$MACOSX_CODESIGNING_IDENTITY" = "$MACOSX_PACKAGE_SIGNING_IDENTITY"; then
3729         AC_MSG_ERROR([You should not use the same identity for code and package signing])
3730     fi
3732     AC_MSG_CHECKING([whether to sandbox the application])
3734     if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then
3735         AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java])
3736     elif test "$enable_macosx_sandbox" = yes; then
3737         ENABLE_MACOSX_SANDBOX=TRUE
3738         AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX)
3739         AC_MSG_RESULT([yes])
3740     else
3741         AC_MSG_RESULT([no])
3742     fi
3744     AC_MSG_CHECKING([what macOS app bundle identifier to use])
3745     MACOSX_BUNDLE_IDENTIFIER=$with_macosx_bundle_identifier
3746     AC_MSG_RESULT([$MACOSX_BUNDLE_IDENTIFIER])
3748     if test -n "$with_macosx_provisioning_profile" ; then
3749         if test ! -f "$with_macosx_provisioning_profile"; then
3750             AC_MSG_ERROR([provisioning profile not found at $with_macosx_provisioning_profile])
3751         else
3752             MACOSX_PROVISIONING_PROFILE=$with_macosx_provisioning_profile
3753             MACOSX_PROVISIONING_INFO=$([security cms -D -i "$MACOSX_PROVISIONING_PROFILE" | \
3754                 xmllint --xpath "//key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier'] \
3755                     | //key[.='com.apple.application-identifier' or .='com.apple.developer.team-identifier']/following-sibling::string[1]" - | \
3756                 sed -e 's#><#>\n\t<#g' -e 's#^#\t#'])
3757         fi
3758     fi
3760 AC_SUBST(MACOSX_SDK_PATH)
3761 AC_SUBST(MACOSX_DEPLOYMENT_TARGET)
3762 AC_SUBST(MAC_OS_X_VERSION_MIN_REQUIRED)
3763 AC_SUBST(INSTALL_NAME_TOOL)
3764 AC_SUBST(LIBTOOL) # Note that the macOS libtool command is unrelated to GNU libtool
3765 AC_SUBST(MACOSX_CODESIGNING_IDENTITY)
3766 AC_SUBST(MACOSX_PACKAGE_SIGNING_IDENTITY)
3767 AC_SUBST(ENABLE_MACOSX_SANDBOX)
3768 AC_SUBST(MACOSX_BUNDLE_IDENTIFIER)
3769 AC_SUBST(MACOSX_PROVISIONING_INFO)
3770 AC_SUBST(MACOSX_PROVISIONING_PROFILE)
3771 AC_SUBST(MACOSX_SDK_BUILD_VERSION)
3772 AC_SUBST(MACOSX_XCODE_BUILD_VERSION)
3774 dnl ===================================================================
3775 dnl Check iOS SDK and compiler
3776 dnl ===================================================================
3778 if test $_os = iOS; then
3779     AC_MSG_CHECKING([what iOS SDK to use])
3781     if test "$enable_ios_simulator" = "yes"; then
3782         platformlc=iphonesimulator
3783         versionmin=-mios-simulator-version-min=14.5
3784     else
3785         platformlc=iphoneos
3786         versionmin=-miphoneos-version-min=14.5
3787     fi
3789     sysroot=`xcrun --sdk $platformlc --show-sdk-path`
3791     if ! test -d "$sysroot"; then
3792         AC_MSG_ERROR([Could not find iOS SDK $sysroot])
3793     fi
3795     AC_MSG_RESULT($sysroot)
3797     stdlib="-stdlib=libc++"
3799     AC_MSG_CHECKING([what C compiler to use])
3800     CC="`xcrun -find clang`"
3801     CC_BASE=`first_arg_basename "$CC"`
3802     CC+=" -arch $host_cpu_for_clang -isysroot $sysroot $versionmin"
3803     AC_MSG_RESULT([$CC])
3805     AC_MSG_CHECKING([what C++ compiler to use])
3806     CXX="`xcrun -find clang++`"
3807     CXX_BASE=`first_arg_basename "$CXX"`
3808     CXX+=" -arch $host_cpu_for_clang $stdlib -isysroot $sysroot $versionmin"
3809     AC_MSG_RESULT([$CXX])
3811     INSTALL_NAME_TOOL=`xcrun -find install_name_tool`
3812     AR=`xcrun -find ar`
3813     NM=`xcrun -find nm`
3814     STRIP=`xcrun -find strip`
3815     LIBTOOL=`xcrun -find libtool`
3816     RANLIB=`xcrun -find ranlib`
3819 AC_MSG_CHECKING([whether to treat the installation as read-only])
3821 if test $_os = Darwin; then
3822     enable_readonly_installset=yes
3823 elif test "$enable_extensions" != yes; then
3824     enable_readonly_installset=yes
3826 if test "$enable_readonly_installset" = yes; then
3827     AC_MSG_RESULT([yes])
3828     AC_DEFINE(HAVE_FEATURE_READONLY_INSTALLSET)
3829 else
3830     AC_MSG_RESULT([no])
3833 dnl ===================================================================
3834 dnl Structure of install set
3835 dnl ===================================================================
3837 if test $_os = Darwin; then
3838     LIBO_BIN_FOLDER=MacOS
3839     LIBO_ETC_FOLDER=Resources
3840     LIBO_LIBEXEC_FOLDER=MacOS
3841     LIBO_LIB_FOLDER=Frameworks
3842     LIBO_LIB_PYUNO_FOLDER=Resources
3843     LIBO_SHARE_FOLDER=Resources
3844     LIBO_SHARE_HELP_FOLDER=Resources/help
3845     LIBO_SHARE_JAVA_FOLDER=Resources/java
3846     LIBO_SHARE_PRESETS_FOLDER=Resources/presets
3847     LIBO_SHARE_READMES_FOLDER=Resources/readmes
3848     LIBO_SHARE_RESOURCE_FOLDER=Resources/resource
3849     LIBO_SHARE_SHELL_FOLDER=Resources/shell
3850     LIBO_URE_BIN_FOLDER=MacOS
3851     LIBO_URE_ETC_FOLDER=Resources/ure/etc
3852     LIBO_URE_LIB_FOLDER=Frameworks
3853     LIBO_URE_MISC_FOLDER=Resources/ure/share/misc
3854     LIBO_URE_SHARE_JAVA_FOLDER=Resources/java
3855 elif test $_os = WINNT; then
3856     LIBO_BIN_FOLDER=program
3857     LIBO_ETC_FOLDER=program
3858     LIBO_LIBEXEC_FOLDER=program
3859     LIBO_LIB_FOLDER=program
3860     LIBO_LIB_PYUNO_FOLDER=program
3861     LIBO_SHARE_FOLDER=share
3862     LIBO_SHARE_HELP_FOLDER=help
3863     LIBO_SHARE_JAVA_FOLDER=program/classes
3864     LIBO_SHARE_PRESETS_FOLDER=presets
3865     LIBO_SHARE_READMES_FOLDER=readmes
3866     LIBO_SHARE_RESOURCE_FOLDER=program/resource
3867     LIBO_SHARE_SHELL_FOLDER=program/shell
3868     LIBO_URE_BIN_FOLDER=program
3869     LIBO_URE_ETC_FOLDER=program
3870     LIBO_URE_LIB_FOLDER=program
3871     LIBO_URE_MISC_FOLDER=program
3872     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3873 else
3874     LIBO_BIN_FOLDER=program
3875     LIBO_ETC_FOLDER=program
3876     LIBO_LIBEXEC_FOLDER=program
3877     LIBO_LIB_FOLDER=program
3878     LIBO_LIB_PYUNO_FOLDER=program
3879     LIBO_SHARE_FOLDER=share
3880     LIBO_SHARE_HELP_FOLDER=help
3881     LIBO_SHARE_JAVA_FOLDER=program/classes
3882     LIBO_SHARE_PRESETS_FOLDER=presets
3883     LIBO_SHARE_READMES_FOLDER=readmes
3884     if test "$enable_fuzzers" != yes; then
3885         LIBO_SHARE_RESOURCE_FOLDER=program/resource
3886     else
3887         LIBO_SHARE_RESOURCE_FOLDER=resource
3888     fi
3889     LIBO_SHARE_SHELL_FOLDER=program/shell
3890     LIBO_URE_BIN_FOLDER=program
3891     LIBO_URE_ETC_FOLDER=program
3892     LIBO_URE_LIB_FOLDER=program
3893     LIBO_URE_MISC_FOLDER=program
3894     LIBO_URE_SHARE_JAVA_FOLDER=program/classes
3896 AC_DEFINE_UNQUOTED(LIBO_BIN_FOLDER,"$LIBO_BIN_FOLDER")
3897 AC_DEFINE_UNQUOTED(LIBO_ETC_FOLDER,"$LIBO_ETC_FOLDER")
3898 AC_DEFINE_UNQUOTED(LIBO_LIBEXEC_FOLDER,"$LIBO_LIBEXEC_FOLDER")
3899 AC_DEFINE_UNQUOTED(LIBO_LIB_FOLDER,"$LIBO_LIB_FOLDER")
3900 AC_DEFINE_UNQUOTED(LIBO_LIB_PYUNO_FOLDER,"$LIBO_LIB_PYUNO_FOLDER")
3901 AC_DEFINE_UNQUOTED(LIBO_SHARE_FOLDER,"$LIBO_SHARE_FOLDER")
3902 AC_DEFINE_UNQUOTED(LIBO_SHARE_HELP_FOLDER,"$LIBO_SHARE_HELP_FOLDER")
3903 AC_DEFINE_UNQUOTED(LIBO_SHARE_JAVA_FOLDER,"$LIBO_SHARE_JAVA_FOLDER")
3904 AC_DEFINE_UNQUOTED(LIBO_SHARE_PRESETS_FOLDER,"$LIBO_SHARE_PRESETS_FOLDER")
3905 AC_DEFINE_UNQUOTED(LIBO_SHARE_RESOURCE_FOLDER,"$LIBO_SHARE_RESOURCE_FOLDER")
3906 AC_DEFINE_UNQUOTED(LIBO_SHARE_SHELL_FOLDER,"$LIBO_SHARE_SHELL_FOLDER")
3907 AC_DEFINE_UNQUOTED(LIBO_URE_BIN_FOLDER,"$LIBO_URE_BIN_FOLDER")
3908 AC_DEFINE_UNQUOTED(LIBO_URE_ETC_FOLDER,"$LIBO_URE_ETC_FOLDER")
3909 AC_DEFINE_UNQUOTED(LIBO_URE_LIB_FOLDER,"$LIBO_URE_LIB_FOLDER")
3910 AC_DEFINE_UNQUOTED(LIBO_URE_MISC_FOLDER,"$LIBO_URE_MISC_FOLDER")
3911 AC_DEFINE_UNQUOTED(LIBO_URE_SHARE_JAVA_FOLDER,"$LIBO_URE_SHARE_JAVA_FOLDER")
3913 # Not all of them needed in config_host.mk, add more if need arises
3914 AC_SUBST(LIBO_BIN_FOLDER)
3915 AC_SUBST(LIBO_ETC_FOLDER)
3916 AC_SUBST(LIBO_LIB_FOLDER)
3917 AC_SUBST(LIBO_LIB_PYUNO_FOLDER)
3918 AC_SUBST(LIBO_SHARE_FOLDER)
3919 AC_SUBST(LIBO_SHARE_HELP_FOLDER)
3920 AC_SUBST(LIBO_SHARE_JAVA_FOLDER)
3921 AC_SUBST(LIBO_SHARE_PRESETS_FOLDER)
3922 AC_SUBST(LIBO_SHARE_READMES_FOLDER)
3923 AC_SUBST(LIBO_SHARE_RESOURCE_FOLDER)
3924 AC_SUBST(LIBO_URE_BIN_FOLDER)
3925 AC_SUBST(LIBO_URE_ETC_FOLDER)
3926 AC_SUBST(LIBO_URE_LIB_FOLDER)
3927 AC_SUBST(LIBO_URE_MISC_FOLDER)
3928 AC_SUBST(LIBO_URE_SHARE_JAVA_FOLDER)
3930 dnl ===================================================================
3931 dnl Windows specific tests and stuff
3932 dnl ===================================================================
3934 reg_get_value()
3936     # Return value: $regvalue
3937     unset regvalue
3939     if test "$build_os" = "wsl"; then
3940         regvalue=$($WSL_LO_HELPER --read-registry $1 "$2/$3" 2>/dev/null)
3941         return
3942     fi
3944     local _regentry="/proc/registry${1}/${2}/${3}"
3945     if test -f "$_regentry"; then
3946         # Stop bash complaining about \0 bytes in input, as it can't handle them.
3947         # Registry keys read via /proc/registry* are always \0 terminated!
3948         local _regvalue=$(tr -d '\0' < "$_regentry")
3949         if test $? -eq 0; then
3950             regvalue=$_regvalue
3951         fi
3952     fi
3955 # Get a value from the 32-bit side of the Registry
3956 reg_get_value_32()
3958     reg_get_value "32" "$1" "$2"
3961 # Get a value from the 64-bit side of the Registry
3962 reg_get_value_64()
3964     reg_get_value "64" "$1" "$2"
3967 reg_list_values()
3969     # Return value: $reglist
3970     unset reglist
3972     if test "$build_os" = "wsl"; then
3973         reglist=$($WSL_LO_HELPER --list-registry $1 "$2" 2>/dev/null | tr -d '\r')
3974         return
3975     fi
3977     reglist=$(ls "/proc/registry${1}/${2}")
3980 # List values from the 32-bit side of the Registry
3981 reg_list_values_32()
3983     reg_list_values "32" "$1"
3986 # List values from the 64-bit side of the Registry
3987 reg_list_values_64()
3989     reg_list_values "64" "$1"
3992 case "$host_os" in
3993 cygwin*|wsl*)
3994     COM=MSC
3995     OS=WNT
3996     RTL_OS=Windows
3997     if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
3998         P_SEP=";"
3999     else
4000         P_SEP=:
4001     fi
4002     case "$host_cpu" in
4003     x86_64)
4004         CPUNAME=X86_64
4005         RTL_ARCH=X86_64
4006         PLATFORMID=windows_x86_64
4007         WINDOWS_X64=1
4008         SCPDEFS="$SCPDEFS -DWINDOWS_X64"
4009         WIN_HOST_ARCH="x64"
4010         WIN_MULTI_ARCH="x86"
4011         WIN_HOST_BITS=64
4012         ;;
4013     i*86)
4014         CPUNAME=INTEL
4015         RTL_ARCH=x86
4016         PLATFORMID=windows_x86
4017         WIN_HOST_ARCH="x86"
4018         WIN_HOST_BITS=32
4019         WIN_OTHER_ARCH="x64"
4020         ;;
4021     aarch64)
4022         CPUNAME=AARCH64
4023         RTL_ARCH=AARCH64
4024         PLATFORMID=windows_aarch64
4025         WINDOWS_X64=1
4026         SCPDEFS="$SCPDEFS -DWINDOWS_AARCH64"
4027         WIN_HOST_ARCH="arm64"
4028         WIN_HOST_BITS=64
4029         with_ucrt_dir=no
4030         ;;
4031     *)
4032         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
4033         ;;
4034     esac
4036     case "$build_cpu" in
4037     x86_64) WIN_BUILD_ARCH="x64" ;;
4038     i*86) WIN_BUILD_ARCH="x86" ;;
4039     aarch64) WIN_BUILD_ARCH="arm64" ;;
4040     *)
4041         AC_MSG_ERROR([Unsupported build_cpu $build_cpu for host_os $host_os])
4042         ;;
4043     esac
4045     SCPDEFS="$SCPDEFS -D_MSC_VER"
4046     ;;
4047 esac
4049 # multi-arch is an arch, which can execute on the host (x86 on x64), while
4050 # other-arch won't, but wouldn't break the build (x64 on x86).
4051 if test -n "$WIN_MULTI_ARCH" -a -n "$WIN_OTHER_ARCH"; then
4052     AC_MSG_ERROR([Broken configure.ac file: can't have set \$WIN_MULTI_ARCH and $WIN_OTHER_ARCH])
4056 if test "$build_cpu" != "$host_cpu" -o "$DISABLE_DYNLOADING" = TRUE; then
4057     # To allow building Windows multi-arch releases without cross-tooling
4058     if test "$DISABLE_DYNLOADING" = TRUE -o \( -z "$WIN_MULTI_ARCH" -a -z "$WIN_OTHER_ARCH" \); then
4059         cross_compiling="yes"
4060     fi
4063 if test "$cross_compiling" = "yes"; then
4064     export CROSS_COMPILING=TRUE
4065     if test "$enable_dynamic_loading" != yes -a "$enable_wasm_strip" = yes; then
4066         ENABLE_WASM_STRIP=TRUE
4067     fi
4068     if test "$_os" = "Emscripten"; then
4069         if test "$with_main_module" = "calc"; then
4070             ENABLE_WASM_STRIP_WRITER=TRUE
4071         elif test "$with_main_module" = "writer"; then
4072             ENABLE_WASM_STRIP_CALC=TRUE
4073         fi
4074     fi
4075 else
4076     CROSS_COMPILING=
4077     BUILD_TYPE="$BUILD_TYPE NATIVE"
4079 AC_SUBST(CROSS_COMPILING)
4080 AC_SUBST(ENABLE_WASM_STRIP)
4081 AC_SUBST(ENABLE_WASM_STRIP_WRITER)
4082 AC_SUBST(ENABLE_WASM_STRIP_CALC)
4084 # Use -isystem (gcc) if possible, to avoid warnings in 3rd party headers.
4085 # NOTE: must _not_ be used for bundled external libraries!
4086 ISYSTEM=
4087 if test "$GCC" = "yes"; then
4088     AC_MSG_CHECKING( for -isystem )
4089     save_CFLAGS=$CFLAGS
4090     CFLAGS="$CFLAGS -isystem /usr/include -Werror"
4091     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ ISYSTEM="-isystem " ],[])
4092     CFLAGS=$save_CFLAGS
4093     if test -n "$ISYSTEM"; then
4094         AC_MSG_RESULT(yes)
4095     else
4096         AC_MSG_RESULT(no)
4097     fi
4099 if test -z "$ISYSTEM"; then
4100     # fall back to using -I
4101     ISYSTEM=-I
4103 AC_SUBST(ISYSTEM)
4105 dnl ===================================================================
4106 dnl  Check which Visual Studio compiler is used
4107 dnl ===================================================================
4109 map_vs_year_to_version()
4111     # Return value: $vsversion
4113     unset vsversion
4115     case $1 in
4116     2019)
4117         vsversion=16;;
4118     2022)
4119         vsversion=17;;
4120     2022preview)
4121         vsversion=17.10;;
4122     *)
4123         AC_MSG_ERROR([Assertion failure - invalid argument "$1" to map_vs_year_to_version()]);;
4124     esac
4127 vs_versions_to_check()
4129     # Args: $1 (optional) : versions to check, in the order of preference
4130     # Return value: $vsversions
4132     unset vsversions
4134     if test -n "$1"; then
4135         map_vs_year_to_version "$1"
4136         vsversions=$vsversion
4137     else
4138         # Default version is 2019
4139         vsversions="16"
4140     fi
4143 win_get_env_from_vsdevcmdbat()
4145     local WRAPPERBATCHFILEPATH="`mktemp -t wrpXXXXXX.bat`"
4146     printf '@set VSCMD_SKIP_SENDTELEMETRY=1\r\n' > $WRAPPERBATCHFILEPATH
4147     PathFormat "$VC_PRODUCT_DIR"
4148     printf '@call "%s/../Common7/Tools/VsDevCmd.bat" /no_logo\r\n' "$formatted_path" >> $WRAPPERBATCHFILEPATH
4149     # use 'echo.%ENV%' syntax (instead of 'echo %ENV%') to avoid outputting "ECHO is off." in case when ENV is empty or a space
4150     printf '@setlocal\r\n@echo.%%%s%%\r\n@endlocal\r\n' "$1" >> $WRAPPERBATCHFILEPATH
4151     local result
4152     if test "$build_os" = "wsl"; then
4153         result=$(cd /mnt/c && cmd.exe /c $(wslpath -w $WRAPPERBATCHFILEPATH) | tr -d '\r')
4154     else
4155         chmod +x $WRAPPERBATCHFILEPATH
4156         result=$("$WRAPPERBATCHFILEPATH" | tr -d '\r')
4157     fi
4158     rm -f $WRAPPERBATCHFILEPATH
4159     printf '%s' "$result"
4162 find_ucrt()
4164     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0" "InstallationFolder"
4165     if test -n "$regvalue"; then
4166         PathFormat "$regvalue"
4167         UCRTSDKDIR=$formatted_path_unix
4168         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v10.0" "ProductVersion"
4169         if test -n "$regvalue"; then
4170             UCRTVERSION="$regvalue".0
4171         fi
4173         # Rest if not exist
4174         if ! test -d "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"; then
4175           UCRTSDKDIR=
4176         fi
4177     fi
4178     if test -z "$UCRTSDKDIR"; then
4179         ide_env_dir="$VC_PRODUCT_DIR/../Common7/Tools/"
4180         ide_env_file="${ide_env_dir}VsDevCmd.bat"
4181         if test -f "$ide_env_file"; then
4182             PathFormat "$(win_get_env_from_vsdevcmdbat UniversalCRTSdkDir)"
4183             UCRTSDKDIR=$formatted_path_unix
4184             UCRTVERSION=$(win_get_env_from_vsdevcmdbat UCRTVersion)
4185             dnl Hack needed at least by tml:
4186             if test "$UCRTVERSION" = 10.0.15063.0 \
4187                 -a ! -f "${UCRTSDKDIR}Include/10.0.15063.0/um/sqlext.h" \
4188                 -a -f "${UCRTSDKDIR}Include/10.0.14393.0/um/sqlext.h"
4189             then
4190                 UCRTVERSION=10.0.14393.0
4191             fi
4192         else
4193           AC_MSG_ERROR([No UCRT found])
4194         fi
4195     fi
4198 find_msvc()
4200     # Find Visual C++
4201     # Args: $1 (optional) : The VS version year
4202     # Return values: $vctest, $vcyear, $vctoolset, $vcnumwithdot, $vcbuildnumber
4204     unset vctest vctoolset vcnumwithdot vcbuildnumber
4206     vs_versions_to_check "$1"
4207     if test "$build_os" = wsl; then
4208         vswhere="$PROGRAMFILESX86"
4209         if test -z "$vswhere"; then
4210             vswhere="c:\\Program Files (x86)"
4211         fi
4212     else
4213         vswhere="$(perl -e 'print $ENV{"ProgramFiles(x86)"}')"
4214     fi
4215     vswhere+="\\Microsoft Visual Studio\\Installer\\vswhere.exe"
4216     PathFormat "$vswhere"
4217     vswhere=$formatted_path_unix
4218     for ver in $vsversions; do
4219         vswhereoutput=`$vswhere -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4220         if test -z "$vswhereoutput"; then
4221             vswhereoutput=`$vswhere -prerelease -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4222         fi
4223         # Fall back to all MS products (this includes VC++ Build Tools)
4224         if ! test -n "$vswhereoutput"; then
4225             AC_MSG_CHECKING([VC++ Build Tools and similar])
4226             vswhereoutput=`$vswhere -products \* -version "@<:@ $ver , $(expr ${ver%%.*} + 1) @:}@" -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath | head -1`
4227         fi
4228         if test -n "$vswhereoutput"; then
4229             PathFormat "$vswhereoutput"
4230             vctest=$formatted_path_unix
4231             break
4232         fi
4233     done
4235     if test -n "$vctest"; then
4236         vcnumwithdot="$ver"
4237         if test "${vcnumwithdot%%.*}" = "$vcnumwithdot"; then
4238             vcnumwithdot=$vcnumwithdot.0
4239         fi
4240         case "$vcnumwithdot" in
4241         16.0)
4242             vcyear=2019
4243             vctoolset=v142
4244             ;;
4245         17.0 | 17.10)
4246             vcyear=2022
4247             vctoolset=v143
4248             ;;
4249         esac
4250         vcbuildnumber=`ls $vctest/VC/Tools/MSVC -A1r | head -1`
4252     fi
4255 test_cl_exe()
4257     AC_MSG_CHECKING([$1 compiler])
4259     CL_EXE_PATH="$2/cl.exe"
4261     if test ! -f "$CL_EXE_PATH"; then
4262         if test "$1" = "multi-arch"; then
4263             AC_MSG_WARN([no compiler (cl.exe) in $2])
4264             return 1
4265         else
4266             AC_MSG_ERROR([no compiler (cl.exe) in $2])
4267         fi
4268     fi
4270     dnl ===========================================================
4271     dnl  Check for the corresponding mspdb*.dll
4272     dnl ===========================================================
4274     # MSVC 15.0 has libraries from 14.0?
4275     mspdbnum="140"
4277     if test ! -e "$2/mspdb${mspdbnum}.dll"; then
4278         AC_MSG_ERROR([No mspdb${mspdbnum}.dll in $2, Visual Studio installation broken?])
4279     fi
4281     # The compiles has to find its shared libraries
4282     OLD_PATH="$PATH"
4283     TEMP_PATH=`cygpath -d "$2"`
4284     PATH="`cygpath -u "$TEMP_PATH"`:$PATH"
4286     if ! "$CL_EXE_PATH" -? </dev/null >/dev/null 2>&1; then
4287         AC_MSG_ERROR([no compiler (cl.exe) in $2])
4288     fi
4290     PATH="$OLD_PATH"
4292     AC_MSG_RESULT([$CL_EXE_PATH])
4295 SOLARINC=
4296 MSBUILD_PATH=
4297 DEVENV=
4298 if test "$_os" = "WINNT"; then
4299     AC_MSG_CHECKING([Visual C++])
4300     find_msvc "$with_visual_studio"
4301     if test -z "$vctest"; then
4302         if test -n "$with_visual_studio"; then
4303             AC_MSG_ERROR([no Visual Studio $with_visual_studio installation found])
4304         else
4305             AC_MSG_ERROR([no Visual Studio installation found])
4306         fi
4307     fi
4308     AC_MSG_RESULT([])
4310     VC_PRODUCT_DIR="$vctest/VC"
4311     COMPATH="$VC_PRODUCT_DIR/Tools/MSVC/$vcbuildnumber"
4313     # $WIN_OTHER_ARCH is a hack to test the x64 compiler on x86, even if it's not multi-arch
4314     if test -n "$WIN_MULTI_ARCH" -o -n "$WIN_OTHER_ARCH"; then
4315         MSVC_MULTI_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/${WIN_MULTI_ARCH}${WIN_OTHER_ARCH}"
4316         test_cl_exe "multi-arch" "$MSVC_MULTI_PATH"
4317         if test $? -ne 0; then
4318             WIN_MULTI_ARCH=""
4319             WIN_OTHER_ARCH=""
4320         fi
4321     fi
4323     if test "$WIN_BUILD_ARCH" = "$WIN_HOST_ARCH"; then
4324         MSVC_BUILD_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_BUILD_ARCH"
4325         test_cl_exe "build" "$MSVC_BUILD_PATH"
4326     fi
4328     if test "$WIN_BUILD_ARCH" != "$WIN_HOST_ARCH"; then
4329         MSVC_HOST_PATH="$COMPATH/bin/Host$WIN_BUILD_ARCH/$WIN_HOST_ARCH"
4330         test_cl_exe "host" "$MSVC_HOST_PATH"
4331     else
4332         MSVC_HOST_PATH="$MSVC_BUILD_PATH"
4333     fi
4335     AC_MSG_CHECKING([for short pathname of VC product directory])
4336     VC_PRODUCT_DIR=`win_short_path_for_make "$VC_PRODUCT_DIR"`
4337     AC_MSG_RESULT([$VC_PRODUCT_DIR])
4339     UCRTSDKDIR=
4340     UCRTVERSION=
4342     AC_MSG_CHECKING([for UCRT location])
4343     find_ucrt
4344     # find_ucrt errors out if it doesn't find it
4345     AC_MSG_RESULT([$UCRTSDKDIR ($UCRTVERSION)])
4346     PathFormat "${UCRTSDKDIR}Include/$UCRTVERSION/ucrt"
4347     ucrtincpath_formatted=$formatted_path
4348     # SOLARINC is used for external modules and must be set too.
4349     # And no, it's not sufficient to set SOLARINC only, as configure
4350     # itself doesn't honour it.
4351     SOLARINC="$SOLARINC -I$ucrtincpath_formatted"
4352     CFLAGS="$CFLAGS -I$ucrtincpath_formatted"
4353     CXXFLAGS="$CXXFLAGS -I$ucrtincpath_formatted"
4354     CPPFLAGS="$CPPFLAGS -I$ucrtincpath_formatted"
4356     AC_SUBST(UCRTSDKDIR)
4357     AC_SUBST(UCRTVERSION)
4359     AC_MSG_CHECKING([for MSBuild.exe location for: $vcnumwithdot])
4360     # Find the proper version of MSBuild.exe to use based on the VS version
4361     reg_get_value_32 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSBuild/$vcnumwithdot MSBuildOverrideTasksPath
4362     if test -z "$regvalue" ; then
4363         if test "$WIN_BUILD_ARCH" != "x64"; then
4364             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin"
4365         else
4366             regvalue="$VC_PRODUCT_DIR/../MSBuild/Current/Bin/amd64"
4367         fi
4368     fi
4369     if test -d "$regvalue" ; then
4370         MSBUILD_PATH=`win_short_path_for_make "$regvalue"`
4371         AC_MSG_RESULT([$regvalue])
4372     else
4373         AC_MSG_ERROR([MSBuild.exe location not found])
4374     fi
4376     # Find the version of devenv.exe
4377     PathFormat "$VC_PRODUCT_DIR/../Common7/IDE/devenv.exe"
4378     DEVENV="$formatted_path"
4379     DEVENV_unix="$formatted_path_unix"
4380     if test ! -e "$DEVENV_unix"; then
4381         AC_MSG_WARN([No devenv.exe found - this is expected for VC++ Build Tools])
4382     fi
4384     dnl Save the true MSVC cl.exe for use when CC/CXX is actually clang-cl,
4385     dnl needed when building CLR code:
4386     if test -z "$MSVC_CXX"; then
4387         # This gives us a posix path with 8.3 filename restrictions
4388         MSVC_CXX=`win_short_path_for_make "$MSVC_HOST_PATH/cl.exe"`
4389     fi
4391     if test -z "$CC"; then
4392         CC=$MSVC_CXX
4393         CC_BASE=`first_arg_basename "$CC"`
4394     fi
4395     if test -z "$CXX"; then
4396         CXX=$MSVC_CXX
4397         CXX_BASE=`first_arg_basename "$CXX"`
4398     fi
4400     if test -n "$CC"; then
4401         # Remove /cl.exe from CC case insensitive
4402         AC_MSG_NOTICE([found Visual C++ $vcyear])
4404         PathFormat "$COMPATH"
4405         COMPATH="$formatted_path"
4406         COMPATH_unix="$formatted_path_unix"
4407         CPPFLAGS="$CPPFLAGS -I$COMPATH/Include"
4409         VCVER=$vcnumwithdot
4410         VCTOOLSET=$vctoolset
4412         # The WINDOWS_SDK_ACCEPTABLE_VERSIONS is mostly an educated guess...  Assuming newer ones
4413         # are always "better", we list them in reverse chronological order.
4415         case "$vcnumwithdot" in
4416         16.0 | 17.0 | 17.10)
4417             WINDOWS_SDK_ACCEPTABLE_VERSIONS="10.0 8.1A 8.1 8.0"
4418             ;;
4419         esac
4421         # The expectation is that --with-windows-sdk should not need to be used
4422         if test -n "$with_windows_sdk"; then
4423             case " $WINDOWS_SDK_ACCEPTABLE_VERSIONS " in
4424             *" "$with_windows_sdk" "*)
4425                 WINDOWS_SDK_ACCEPTABLE_VERSIONS=$with_windows_sdk
4426                 ;;
4427             *)
4428                 AC_MSG_ERROR([Windows SDK $with_windows_sdk is not known to work with VS $vcyear])
4429                 ;;
4430             esac
4431         fi
4433         # Make AC_COMPILE_IFELSE etc. work (set by AC_PROG_C, which we don't use for MSVC)
4434         ac_objext=obj
4435         ac_exeext=exe
4437     else
4438         AC_MSG_ERROR([Visual C++ not found after all, huh])
4439     fi
4441     # ERROR if VS version < 16.5
4442     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.5])
4443     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4444         // See <https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros> for mapping
4445         // between Visual Studio versions and _MSC_VER:
4446         #if _MSC_VER < 1925
4447         #error
4448         #endif
4449     ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no])])
4451     # WARN if VS version < 16.10
4452     AC_MSG_CHECKING([$CC_BASE is at least Visual Studio 2019 version 16.10])
4453     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4454         #if _MSC_VER < 1929
4455         #error
4456         #endif
4457     ]])],[vs2019_recommended_version=yes],[vs2019_recommended_version=no])
4459     if test $vs2019_recommended_version = yes; then
4460         AC_MSG_RESULT([yes])
4461     else
4462         AC_MSG_WARN([no])
4463         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."
4464     fi
4466     # Check for 64-bit (cross-)compiler to use to build the 64-bit
4467     # version of the Explorer extension (and maybe other small
4468     # bits, too) needed when installing a 32-bit LibreOffice on a
4469     # 64-bit OS. The 64-bit Explorer extension is a feature that
4470     # has been present since long in OOo. Don't confuse it with
4471     # building LibreOffice itself as 64-bit code.
4473     BUILD_X64=
4474     CXX_X64_BINARY=
4476     if test "$WIN_HOST_ARCH" = "x86" -a -n "$WIN_OTHER_ARCH"; then
4477         AC_MSG_CHECKING([for the libraries to build the 64-bit Explorer extensions])
4478         if test -f "$COMPATH/atlmfc/lib/x64/atls.lib" -o \
4479              -f "$COMPATH/atlmfc/lib/spectre/x64/atls.lib"
4480         then
4481             BUILD_X64=TRUE
4482             CXX_X64_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4483             AC_MSG_RESULT([found])
4484         else
4485             AC_MSG_RESULT([not found])
4486             AC_MSG_WARN([Installation set will not contain 64-bit Explorer extensions])
4487         fi
4488     elif test "$WIN_HOST_ARCH" = "x64"; then
4489         CXX_X64_BINARY=$CXX
4490     fi
4491     AC_SUBST(BUILD_X64)
4493     # These are passed to the environment and then used in gbuild/platform/com_MSC_class.mk
4494     AC_SUBST(CXX_X64_BINARY)
4496     # Check for 32-bit compiler to use to build the 32-bit TWAIN shim
4497     # needed to support TWAIN scan on both 32- and 64-bit systems
4499     case "$WIN_HOST_ARCH" in
4500     x64)
4501         AC_MSG_CHECKING([for a x86 compiler and libraries for 32-bit binaries required for TWAIN support])
4502         if test -n "$CXX_X86_BINARY"; then
4503             BUILD_X86=TRUE
4504             AC_MSG_RESULT([preset])
4505         elif test -n "$WIN_MULTI_ARCH"; then
4506             BUILD_X86=TRUE
4507             CXX_X86_BINARY=`win_short_path_for_make "$MSVC_MULTI_PATH/cl.exe"`
4508             AC_MSG_RESULT([found])
4509         else
4510             AC_MSG_RESULT([not found])
4511             AC_MSG_WARN([Installation set will not contain 32-bit binaries required for TWAIN support])
4512         fi
4513         ;;
4514     x86)
4515         BUILD_X86=TRUE
4516         CXX_X86_BINARY=$MSVC_CXX
4517         ;;
4518     esac
4519     AC_SUBST(BUILD_X86)
4520     AC_SUBST(CXX_X86_BINARY)
4522 AC_SUBST(VCVER)
4523 AC_SUBST(VCTOOLSET)
4524 AC_SUBST(DEVENV)
4525 AC_SUBST(MSVC_CXX)
4527 COM_IS_CLANG=
4528 AC_MSG_CHECKING([whether the compiler is actually Clang])
4529 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4530     #ifndef __clang__
4531     you lose
4532     #endif
4533     int foo=42;
4534     ]])],
4535     [AC_MSG_RESULT([yes])
4536      COM_IS_CLANG=TRUE],
4537     [AC_MSG_RESULT([no])])
4538 AC_SUBST(COM_IS_CLANG)
4540 CLANGVER=
4541 if test "$COM_IS_CLANG" = TRUE; then
4542     AC_MSG_CHECKING([whether Clang is new enough])
4543     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
4544         #if !defined __apple_build_version__
4545         #error
4546         #endif
4547         ]])],
4548         [my_apple_clang=yes],[my_apple_clang=])
4549     if test "$my_apple_clang" = yes; then
4550         AC_MSG_RESULT([assumed yes (Apple Clang)])
4551     elif test "$_os" = Emscripten; then
4552         AC_MSG_RESULT([assumed yes (Emscripten Clang)])
4553     else
4554         if test "$_os" = WINNT; then
4555             dnl In which case, assume clang-cl:
4556             my_args="/EP /TC"
4557         else
4558             my_args="-E -P"
4559         fi
4560         clang_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $CC $my_args - | sed 's/ //g'`
4561         CLANG_FULL_VERSION=`echo __clang_version__ | $CC $my_args -`
4562         CLANGVER=`echo $clang_version \
4563             | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
4564         if test "$CLANGVER" -ge 120000; then
4565             AC_MSG_RESULT([yes ($clang_version)])
4566         else
4567             AC_MSG_ERROR(["$CLANG_FULL_VERSION" is too old or unrecognized, must be at least Clang 12])
4568         fi
4569         AC_DEFINE_UNQUOTED(CLANG_VERSION,$CLANGVER)
4570         AC_DEFINE_UNQUOTED(CLANG_FULL_VERSION,$CLANG_FULL_VERSION)
4571     fi
4574 SHOWINCLUDES_PREFIX=
4575 if test "$_os" = WINNT; then
4576     dnl We need to guess the prefix of the -showIncludes output, it can be
4577     dnl localized
4578     AC_MSG_CHECKING([the dependency generation prefix (cl.exe -showIncludes)])
4579     echo "#include <stdlib.h>" > conftest.c
4580     SHOWINCLUDES_PREFIX=`VSLANG=1033 $CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
4581         grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
4582     rm -f conftest.c conftest.obj
4583     if test -z "$SHOWINCLUDES_PREFIX"; then
4584         AC_MSG_ERROR([cannot determine the -showIncludes prefix])
4585     else
4586         AC_MSG_RESULT(["$SHOWINCLUDES_PREFIX"])
4587     fi
4589 AC_SUBST(SHOWINCLUDES_PREFIX)
4592 # prefix C with ccache if needed
4594 if test "$CCACHE" != ""; then
4595     AC_MSG_CHECKING([whether $CC_BASE is already ccached])
4597     AC_LANG_PUSH([C])
4598     save_CFLAGS=$CFLAGS
4599     CFLAGS="$CFLAGS --ccache-skip -O2"
4600     # msvc does not fail on unknown options, check stdout
4601     if test "$COM" = MSC; then
4602         CFLAGS="$CFLAGS -nologo"
4603     fi
4604     save_ac_c_werror_flag=$ac_c_werror_flag
4605     ac_c_werror_flag=yes
4606     dnl an empty program will do, we're checking the compiler flags
4607     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
4608                       [use_ccache=yes], [use_ccache=no])
4609     CFLAGS=$save_CFLAGS
4610     ac_c_werror_flag=$save_ac_c_werror_flag
4611     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
4612         AC_MSG_RESULT([yes])
4613     else
4614         CC="$CCACHE $CC"
4615         CC_BASE="ccache $CC_BASE"
4616         AC_MSG_RESULT([no])
4617     fi
4618     AC_LANG_POP([C])
4621 # ===================================================================
4622 # check various GCC options that Clang does not support now but maybe
4623 # will somewhen in the future, check them even for GCC, so that the
4624 # flags are set
4625 # ===================================================================
4627 HAVE_GCC_GGDB2=
4628 if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4629     AC_MSG_CHECKING([whether $CC_BASE supports -ggdb2])
4630     save_CFLAGS=$CFLAGS
4631     CFLAGS="$CFLAGS -Werror -ggdb2"
4632     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_GGDB2=TRUE ],[])
4633     CFLAGS=$save_CFLAGS
4634     if test "$HAVE_GCC_GGDB2" = "TRUE"; then
4635         AC_MSG_RESULT([yes])
4636     else
4637         AC_MSG_RESULT([no])
4638     fi
4640     if test "$host_cpu" = "m68k"; then
4641         AC_MSG_CHECKING([whether $CC_BASE supports -mlong-jump-table-offsets])
4642         save_CFLAGS=$CFLAGS
4643         CFLAGS="$CFLAGS -Werror -mlong-jump-table-offsets"
4644         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_LONG_JUMP_TABLE_OFFSETS=TRUE ],[])
4645         CFLAGS=$save_CFLAGS
4646         if test "$HAVE_GCC_LONG_JUMP_TABLE_OFFSETS" = "TRUE"; then
4647             AC_MSG_RESULT([yes])
4648         else
4649             AC_MSG_ERROR([no])
4650         fi
4651     fi
4653 AC_SUBST(HAVE_GCC_GGDB2)
4655 dnl ===================================================================
4656 dnl  Test the gcc version
4657 dnl ===================================================================
4658 if test "$GCC" = "yes" -a -z "$COM_IS_CLANG"; then
4659     AC_MSG_CHECKING([the GCC version])
4660     _gcc_version=`$CC -dumpfullversion`
4661     gcc_full_version=$(printf '%s' "$_gcc_version" | \
4662         $AWK -F. '{ print $1*10000+$2*100+(NF<3?1:$3) }')
4663     GCC_VERSION=`echo $_gcc_version | $AWK -F. '{ print \$1*100+\$2 }'`
4665     AC_MSG_RESULT([gcc $_gcc_version ($gcc_full_version)])
4667     if test "$gcc_full_version" -lt 120000; then
4668         AC_MSG_ERROR([GCC $_gcc_version is too old, must be at least GCC 12])
4669     fi
4670 else
4671     # Explicitly force GCC_VERSION to be empty, even for Clang, to check incorrect uses.
4672     # GCC version should generally be checked only when handling GCC-specific bugs, for testing
4673     # things like features configure checks should be used, otherwise they may e.g. fail with Clang
4674     # (which reports itself as GCC 4.2.1).
4675     GCC_VERSION=
4677 AC_SUBST(GCC_VERSION)
4679 dnl Set the ENABLE_DBGUTIL variable
4680 dnl ===================================================================
4681 AC_MSG_CHECKING([whether to build with additional debug utilities])
4682 if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then
4683     ENABLE_DBGUTIL="TRUE"
4684     # this is an extra var so it can have different default on different MSVC
4685     # versions (in case there are version specific problems with it)
4686     MSVC_USE_DEBUG_RUNTIME="TRUE"
4688     AC_MSG_RESULT([yes])
4689     # cppunit and graphite expose STL in public headers
4690     if test "$with_system_cppunit" = "yes"; then
4691         AC_MSG_ERROR([--with-system-cppunit conflicts with --enable-dbgutil])
4692     else
4693         with_system_cppunit=no
4694     fi
4695     if test "$with_system_graphite" = "yes"; then
4696         AC_MSG_ERROR([--with-system-graphite conflicts with --enable-dbgutil])
4697     else
4698         with_system_graphite=no
4699     fi
4700     if test "$with_system_orcus" = "yes"; then
4701         AC_MSG_ERROR([--with-system-orcus conflicts with --enable-dbgutil])
4702     else
4703         with_system_orcus=no
4704     fi
4705     if test "$with_system_libcmis" = "yes"; then
4706         AC_MSG_ERROR([--with-system-libcmis conflicts with --enable-dbgutil])
4707     else
4708         with_system_libcmis=no
4709     fi
4710     if test "$with_system_hunspell" = "yes"; then
4711         AC_MSG_ERROR([--with-system-hunspell conflicts with --enable-dbgutil])
4712     else
4713         with_system_hunspell=no
4714     fi
4715     if test "$with_system_gpgmepp" = "yes"; then
4716         AC_MSG_ERROR([--with-system-gpgmepp conflicts with --enable-dbgutil])
4717     else
4718         with_system_gpgmepp=no
4719     fi
4720     if test "$with_system_zxing" = "yes"; then
4721         AC_MSG_ERROR([--with-system-zxing conflicts with --enable-dbgutil])
4722     else
4723         with_system_zxing=no
4724     fi
4725     if test "$with_system_poppler" = "yes"; then
4726         AC_MSG_ERROR([--with-system-poppler conflicts with --enable-dbgutil])
4727     else
4728         with_system_poppler=no
4729     fi
4730     # As mixing system libwps and non-system libnumbertext or vice versa likely causes trouble (see
4731     # 603074c5f2b84de8a24593faf807da784b040625 "Pass _GLIBCXX_DEBUG into external/libwps" and the
4732     # mail thread starting at <https://gcc.gnu.org/ml/gcc/2018-05/msg00057.html> "libstdc++: ODR
4733     # violation when using std::regex with and without -D_GLIBCXX_DEBUG"), simply make sure neither
4734     # of those two is using the system variant:
4735     if test "$with_system_libnumbertext" = "yes"; then
4736         AC_MSG_ERROR([--with-system-libnumbertext conflicts with --enable-dbgutil])
4737     else
4738         with_system_libnumbertext=no
4739     fi
4740     if test "$with_system_libwps" = "yes"; then
4741         AC_MSG_ERROR([--with-system-libwps conflicts with --enable-dbgutil])
4742     else
4743         with_system_libwps=no
4744     fi
4745 else
4746     ENABLE_DBGUTIL=""
4747     MSVC_USE_DEBUG_RUNTIME=""
4748     AC_MSG_RESULT([no])
4750 AC_SUBST(ENABLE_DBGUTIL)
4751 AC_SUBST(MSVC_USE_DEBUG_RUNTIME)
4753 dnl Set the ENABLE_DEBUG variable.
4754 dnl ===================================================================
4755 if test -n "$enable_debug" && test "$enable_debug" != "yes" && test "$enable_debug" != "no"; then
4756     AC_MSG_ERROR([--enable-debug now accepts only yes or no, use --enable-symbols])
4758 if test -n "$ENABLE_DBGUTIL" -a "$enable_debug" = "no"; then
4759     if test -z "$libo_fuzzed_enable_debug"; then
4760         AC_MSG_ERROR([--disable-debug cannot be used with --enable-dbgutil])
4761     else
4762         AC_MSG_NOTICE([Resetting --enable-debug=yes])
4763         enable_debug=yes
4764     fi
4767 AC_MSG_CHECKING([whether to do a debug build])
4768 if test -n "$ENABLE_DBGUTIL" -o \( -n "$enable_debug" -a "$enable_debug" != "no" \) ; then
4769     ENABLE_DEBUG="TRUE"
4770     if test -n "$ENABLE_DBGUTIL" ; then
4771         AC_MSG_RESULT([yes (dbgutil)])
4772     else
4773         AC_MSG_RESULT([yes])
4774     fi
4775 else
4776     ENABLE_DEBUG=""
4777     AC_MSG_RESULT([no])
4779 AC_SUBST(ENABLE_DEBUG)
4781 dnl ===================================================================
4782 dnl Select the linker to use (gold/lld/ld.bfd/mold).
4783 dnl This is done only after compiler checks (need to know if Clang is
4784 dnl used, for different defaults) and after checking if a debug build
4785 dnl is wanted (non-debug builds get the default linker if not explicitly
4786 dnl specified otherwise).
4787 dnl All checks for linker features/options should come after this.
4788 dnl ===================================================================
4789 check_use_ld()
4791     use_ld=-fuse-ld=${1%%:*}
4792     use_ld_path=${1#*:}
4793     if test "$use_ld_path" != "$1"; then
4794         if test "$COM_IS_CLANG" = TRUE; then
4795             if test "$CLANGVER" -ge 120000; then
4796                 use_ld="${use_ld} --ld-path=${use_ld_path}"
4797             else
4798                 use_ld="-fuse-ld=${use_ld_path}"
4799             fi
4800         else
4801             # I tried to use gcc's '-B<path>' and a directory + symlink setup in
4802             # $BUILDDIR, but libtool always filtered-out that option, so gcc wouldn't
4803             # pickup the alternative linker, when called by libtool for linking.
4804             # For mold, one can use LD_PRELOAD=/usr/lib/mold/mold-wrapper.so instead.
4805             AC_MSG_ERROR([A linker path is just supported with clang, because of libtool's -B filtering!])
4806         fi
4807     fi
4808     use_ld_fail_if_error=$2
4809     use_ld_ok=
4810     AC_MSG_CHECKING([for $use_ld linker support])
4811     use_ld_ldflags_save="$LDFLAGS"
4812     LDFLAGS="$LDFLAGS $use_ld"
4813     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4814 #include <stdio.h>
4815         ],[
4816 printf ("hello world\n");
4817         ])], USE_LD=$use_ld, [])
4818     if test -n "$USE_LD"; then
4819         AC_MSG_RESULT( yes )
4820         use_ld_ok=yes
4821     else
4822         if test -n "$use_ld_fail_if_error"; then
4823             AC_MSG_ERROR( no )
4824         else
4825             AC_MSG_RESULT( no )
4826         fi
4827     fi
4828     if test -n "$use_ld_ok"; then
4829         dnl keep the value of LDFLAGS
4830         return 0
4831     fi
4832     LDFLAGS="$use_ld_ldflags_save"
4833     return 1
4835 USE_LD=
4836 if test "$enable_ld" != "no"; then
4837     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
4838         if test -n "$enable_ld"; then
4839             check_use_ld "$enable_ld" fail_if_error
4840         elif test -z "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4841             dnl non-debug builds default to the default linker
4842             true
4843         elif test -n "$COM_IS_CLANG"; then
4844             check_use_ld lld
4845             if test $? -ne 0; then
4846                 check_use_ld gold
4847                 if test $? -ne 0; then
4848                     check_use_ld mold
4849                 fi
4850             fi
4851         else
4852             # For gcc first try gold, new versions also support lld/mold.
4853             check_use_ld gold
4854             if test $? -ne 0; then
4855                 check_use_ld lld
4856                 if test $? -ne 0; then
4857                     check_use_ld mold
4858                 fi
4859             fi
4860         fi
4861         ld_output=$(echo 'int main() { return 0; }' | $CC -Wl,-v -x c -o conftest.out - $CFLAGS $LDFLAGS 2>/dev/null)
4862         rm conftest.out
4863         ld_used=$(echo "$ld_output" | grep -E '(^GNU gold|^GNU ld|^LLD|^mold)')
4864         if test -z "$ld_used"; then
4865             ld_used="unknown"
4866         fi
4867         AC_MSG_CHECKING([for linker that is used])
4868         AC_MSG_RESULT([$ld_used])
4869         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4870             if echo "$ld_used" | grep -q "^GNU ld"; then
4871                 AC_MSG_WARN([The default GNU linker is slow, consider using LLD, mold or the GNU gold linker.])
4872                 add_warning "The default GNU linker is slow, consider using LLD, mold or the GNU gold linker."
4873             fi
4874         fi
4875     else
4876         if test "$enable_ld" = "yes"; then
4877             AC_MSG_ERROR([--enable-ld not supported])
4878         fi
4879     fi
4881 AC_SUBST(USE_LD)
4882 AC_SUBST(LD)
4884 HAVE_LD_BSYMBOLIC_FUNCTIONS=
4885 if test "$GCC" = "yes" -a "$_os" != Emscripten ; then
4886     AC_MSG_CHECKING([for -Bsymbolic-functions linker support])
4887     bsymbolic_functions_ldflags_save=$LDFLAGS
4888     LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
4889     AC_LINK_IFELSE([AC_LANG_PROGRAM([
4890 #include <stdio.h>
4891         ],[
4892 printf ("hello world\n");
4893         ])], HAVE_LD_BSYMBOLIC_FUNCTIONS=TRUE, [])
4894     if test "$HAVE_LD_BSYMBOLIC_FUNCTIONS" = "TRUE"; then
4895         AC_MSG_RESULT( found )
4896     else
4897         AC_MSG_RESULT( not found )
4898     fi
4899     LDFLAGS=$bsymbolic_functions_ldflags_save
4901 AC_SUBST(HAVE_LD_BSYMBOLIC_FUNCTIONS)
4903 LD_GC_SECTIONS=
4904 if test "$GCC" = "yes"; then
4905     for flag in "--gc-sections" "-dead_strip"; do
4906         AC_MSG_CHECKING([for $flag linker support])
4907         ldflags_save=$LDFLAGS
4908         LDFLAGS="$LDFLAGS -Wl,$flag"
4909         AC_LINK_IFELSE([AC_LANG_PROGRAM([
4910 #include <stdio.h>
4911             ],[
4912 printf ("hello world\n");
4913             ])],[
4914             LD_GC_SECTIONS="-Wl,$flag"
4915             AC_MSG_RESULT( found )
4916             ], [
4917             AC_MSG_RESULT( not found )
4918             ])
4919         LDFLAGS=$ldflags_save
4920         if test -n "$LD_GC_SECTIONS"; then
4921             break
4922         fi
4923     done
4925 AC_SUBST(LD_GC_SECTIONS)
4927 HAVE_EXTERNAL_DWARF=
4928 if test "$enable_split_debug" != no; then
4929     use_split_debug=
4930     if test -n "$ENABLE_LTO"; then
4931         : # Inherently incompatible, since no debug info is created while compiling, GCC complains.
4932     elif test "$enable_split_debug" = yes; then
4933         use_split_debug=1
4934     dnl Currently by default enabled only on Linux, feel free to set test_split_debug above also for other platforms.
4935     elif test "$test_split_debug" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
4936         use_split_debug=1
4937     fi
4938     if test -n "$use_split_debug"; then
4939         if test "$_os" = "Emscripten"; then
4940             TEST_CC_FLAG=-gseparate-dwarf
4941         else
4942             TEST_CC_FLAG=-gsplit-dwarf
4943         fi
4944         AC_MSG_CHECKING([whether $CC_BASE supports $TEST_CC_FLAG])
4945         save_CFLAGS=$CFLAGS
4946         CFLAGS="$CFLAGS -Werror $TEST_CC_FLAG"
4947         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_EXTERNAL_DWARF=TRUE ],[])
4948         CFLAGS=$save_CFLAGS
4949         if test "$HAVE_EXTERNAL_DWARF" = "TRUE"; then
4950             AC_MSG_RESULT([yes])
4951         else
4952             if test "$enable_split_debug" = yes; then
4953                 AC_MSG_ERROR([no])
4954             else
4955                 AC_MSG_RESULT([no])
4956             fi
4957         fi
4958     fi
4959     if test -z "$HAVE_EXTERNAL_DWARF" -a "$test_split_debug" = "yes" -a -n "$use_split_debug"; then
4960         AC_MSG_WARN([Compiler is not capable of creating split debug info, linking will require more time and disk space.])
4961         add_warning "Compiler is not capable of creating split debug info, linking will require more time and disk space."
4962     fi
4964 AC_SUBST(HAVE_EXTERNAL_DWARF)
4966 HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=
4967 AC_MSG_CHECKING([whether $CC_BASE supports -Xclang -debug-info-kind=constructor])
4968 save_CFLAGS=$CFLAGS
4969 CFLAGS="$CFLAGS -Werror -Xclang -debug-info-kind=constructor"
4970 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=TRUE ],[])
4971 CFLAGS=$save_CFLAGS
4972 if test "$HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR" = "TRUE"; then
4973     AC_MSG_RESULT([yes])
4974 else
4975     AC_MSG_RESULT([no])
4977 AC_SUBST(HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR)
4979 ENABLE_GDB_INDEX=
4980 if test "$enable_gdb_index" != "no"; then
4981     dnl Currently by default enabled only on Linux, feel free to set test_gdb_index above also for other platforms.
4982     if test "$enable_gdb_index" = yes -o \( "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL" \); then
4983         AC_MSG_CHECKING([whether $CC_BASE supports -ggnu-pubnames])
4984         save_CFLAGS=$CFLAGS
4985         CFLAGS="$CFLAGS -Werror -g -ggnu-pubnames"
4986         have_ggnu_pubnames=
4987         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[have_ggnu_pubnames=TRUE],[have_ggnu_pubnames=])
4988         if test "$have_ggnu_pubnames" != "TRUE"; then
4989             if test "$enable_gdb_index" = "yes"; then
4990                 AC_MSG_ERROR([no, --enable-gdb-index not supported])
4991             else
4992                 AC_MSG_RESULT( no )
4993             fi
4994         else
4995             AC_MSG_RESULT( yes )
4996             AC_MSG_CHECKING([whether $CC_BASE supports -Wl,--gdb-index])
4997             ldflags_save=$LDFLAGS
4998             LDFLAGS="$LDFLAGS -Wl,--gdb-index"
4999             AC_LINK_IFELSE([AC_LANG_PROGRAM([
5000 #include <stdio.h>
5001                 ],[
5002 printf ("hello world\n");
5003                 ])], ENABLE_GDB_INDEX=TRUE, [])
5004             if test "$ENABLE_GDB_INDEX" = "TRUE"; then
5005                 AC_MSG_RESULT( yes )
5006             else
5007                 if test "$enable_gdb_index" = "yes"; then
5008                     AC_MSG_ERROR( no )
5009                 else
5010                     AC_MSG_RESULT( no )
5011                 fi
5012             fi
5013             LDFLAGS=$ldflags_save
5014         fi
5015         CFLAGS=$save_CFLAGS
5016         fi
5017     if test -z "$ENABLE_GDB_INDEX" -a "$test_gdb_index" = "yes" -a -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5018         AC_MSG_WARN([Linker is not capable of creating gdb index, debugger startup will be slow.])
5019         add_warning "Linker is not capable of creating gdb index, debugger startup will be slow."
5020     fi
5022 AC_SUBST(ENABLE_GDB_INDEX)
5024 if test -z "$enable_sal_log" && test "$ENABLE_DEBUG" = TRUE; then
5025     enable_sal_log=yes
5027 if test "$enable_sal_log" = yes; then
5028     ENABLE_SAL_LOG=TRUE
5030 AC_SUBST(ENABLE_SAL_LOG)
5032 dnl Check for enable symbols option
5033 dnl ===================================================================
5034 AC_MSG_CHECKING([whether to generate debug information])
5035 if test -z "$enable_symbols"; then
5036     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5037         enable_symbols=yes
5038     else
5039         enable_symbols=no
5040     fi
5042 if test "$enable_symbols" = yes; then
5043     ENABLE_SYMBOLS_FOR=all
5044     AC_MSG_RESULT([yes])
5045 elif test "$enable_symbols" = no; then
5046     ENABLE_SYMBOLS_FOR=
5047     AC_MSG_RESULT([no])
5048 else
5049     # Selective debuginfo.
5050     ENABLE_SYMBOLS_FOR="$enable_symbols"
5051     AC_MSG_RESULT([for "$enable_symbols"])
5053 AC_SUBST(ENABLE_SYMBOLS_FOR)
5055 if test -n "$with_android_ndk" -a \( -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_SYMBOLS_FOR" = "all"; then
5056     # Building on Android with full symbols: without enough memory the linker never finishes currently.
5057     AC_MSG_CHECKING([whether enough memory is available for linking])
5058     mem_size=$(grep -o 'MemTotal: *.\+ kB' /proc/meminfo | sed 's/MemTotal: *\(.\+\) kB/\1/')
5059     # Check for 15GB, as Linux reports a bit less than the physical memory size.
5060     if test -n "$mem_size" -a $mem_size -lt 15728640; then
5061         AC_MSG_ERROR([building with full symbols and less than 16GB of memory is not supported])
5062     else
5063         AC_MSG_RESULT([yes])
5064     fi
5067 ENABLE_OPTIMIZED=
5068 ENABLE_OPTIMIZED_DEBUG=
5069 AC_MSG_CHECKING([whether to compile with optimization flags])
5070 if test -z "$enable_optimized"; then
5071     if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
5072         enable_optimized=no
5073     else
5074         enable_optimized=yes
5075     fi
5077 if test "$enable_optimized" = yes; then
5078     ENABLE_OPTIMIZED=TRUE
5079     AC_MSG_RESULT([yes])
5080 elif test "$enable_optimized" = debug; then
5081     ENABLE_OPTIMIZED_DEBUG=TRUE
5082     AC_MSG_RESULT([yes (debug)])
5083     HAVE_GCC_OG=
5084     if test "$GCC" = "yes" -a "$_os" != "Emscripten"; then
5085         AC_MSG_CHECKING([whether $CC_BASE supports -Og])
5086         save_CFLAGS=$CFLAGS
5087         CFLAGS="$CFLAGS -Werror -Og"
5088         AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_OG=TRUE ],[])
5089         CFLAGS=$save_CFLAGS
5090         if test "$HAVE_GCC_OG" = "TRUE"; then
5091             AC_MSG_RESULT([yes])
5092         else
5093             AC_MSG_RESULT([no])
5094         fi
5095     fi
5096     if test -z "$HAVE_GCC_OG" -a "$_os" != "Emscripten"; then
5097         AC_MSG_ERROR([The compiler does not support optimizations suitable for debugging.])
5098     fi
5099 else
5100     AC_MSG_RESULT([no])
5102 AC_SUBST(ENABLE_OPTIMIZED)
5103 AC_SUBST(ENABLE_OPTIMIZED_DEBUG)
5106 # determine CPUNAME, OS, ...
5108 case "$host_os" in
5110 cygwin*|wsl*)
5111     # Already handled
5112     ;;
5114 darwin*)
5115     COM=GCC
5116     OS=MACOSX
5117     RTL_OS=MacOSX
5118     P_SEP=:
5120     case "$host_cpu" in
5121     aarch64|arm64)
5122         if test "$enable_ios_simulator" = "yes"; then
5123             OS=iOS
5124         else
5125             CPUNAME=AARCH64
5126             RTL_ARCH=AARCH64
5127             PLATFORMID=macosx_aarch64
5128         fi
5129         ;;
5130     x86_64)
5131         if test "$enable_ios_simulator" = "yes"; then
5132             OS=iOS
5133         fi
5134         CPUNAME=X86_64
5135         RTL_ARCH=X86_64
5136         PLATFORMID=macosx_x86_64
5137         ;;
5138     *)
5139         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5140         ;;
5141     esac
5142     ;;
5144 ios*)
5145     COM=GCC
5146     OS=iOS
5147     RTL_OS=iOS
5148     P_SEP=:
5150     case "$host_cpu" in
5151     aarch64|arm64)
5152         if test "$enable_ios_simulator" = "yes"; then
5153             AC_MSG_ERROR([iOS simulator is only available in macOS not iOS])
5154         fi
5155         ;;
5156     *)
5157         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5158         ;;
5159     esac
5160     CPUNAME=AARCH64
5161     RTL_ARCH=AARCH64
5162     PLATFORMID=ios_arm64
5163     ;;
5165 dragonfly*)
5166     COM=GCC
5167     OS=DRAGONFLY
5168     RTL_OS=DragonFly
5169     P_SEP=:
5171     case "$host_cpu" in
5172     i*86)
5173         CPUNAME=INTEL
5174         RTL_ARCH=x86
5175         PLATFORMID=dragonfly_x86
5176         ;;
5177     x86_64)
5178         CPUNAME=X86_64
5179         RTL_ARCH=X86_64
5180         PLATFORMID=dragonfly_x86_64
5181         ;;
5182     *)
5183         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5184         ;;
5185     esac
5186     ;;
5188 freebsd*)
5189     COM=GCC
5190     RTL_OS=FreeBSD
5191     OS=FREEBSD
5192     P_SEP=:
5194     case "$host_cpu" in
5195     aarch64)
5196         CPUNAME=AARCH64
5197         PLATFORMID=freebsd_aarch64
5198         RTL_ARCH=AARCH64
5199         ;;
5200     i*86)
5201         CPUNAME=INTEL
5202         RTL_ARCH=x86
5203         PLATFORMID=freebsd_x86
5204         ;;
5205     x86_64|amd64)
5206         CPUNAME=X86_64
5207         RTL_ARCH=X86_64
5208         PLATFORMID=freebsd_x86_64
5209         ;;
5210     powerpc64)
5211         CPUNAME=POWERPC64
5212         RTL_ARCH=PowerPC_64
5213         PLATFORMID=freebsd_powerpc64
5214         ;;
5215     powerpc|powerpcspe)
5216         CPUNAME=POWERPC
5217         RTL_ARCH=PowerPC
5218         PLATFORMID=freebsd_powerpc
5219         ;;
5220     *)
5221         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5222         ;;
5223     esac
5224     ;;
5226 haiku*)
5227     COM=GCC
5228     GUIBASE=haiku
5229     RTL_OS=Haiku
5230     OS=HAIKU
5231     P_SEP=:
5233     case "$host_cpu" in
5234     i*86)
5235         CPUNAME=INTEL
5236         RTL_ARCH=x86
5237         PLATFORMID=haiku_x86
5238         ;;
5239     x86_64|amd64)
5240         CPUNAME=X86_64
5241         RTL_ARCH=X86_64
5242         PLATFORMID=haiku_x86_64
5243         ;;
5244     *)
5245         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5246         ;;
5247     esac
5248     ;;
5250 kfreebsd*)
5251     COM=GCC
5252     OS=LINUX
5253     RTL_OS=kFreeBSD
5254     P_SEP=:
5256     case "$host_cpu" in
5258     i*86)
5259         CPUNAME=INTEL
5260         RTL_ARCH=x86
5261         PLATFORMID=kfreebsd_x86
5262         ;;
5263     x86_64)
5264         CPUNAME=X86_64
5265         RTL_ARCH=X86_64
5266         PLATFORMID=kfreebsd_x86_64
5267         ;;
5268     *)
5269         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5270         ;;
5271     esac
5272     ;;
5274 linux-gnu*|linux-musl*)
5275     COM=GCC
5276     OS=LINUX
5277     RTL_OS=Linux
5278     P_SEP=:
5280     case "$host_cpu" in
5282     aarch64)
5283         CPUNAME=AARCH64
5284         PLATFORMID=linux_aarch64
5285         RTL_ARCH=AARCH64
5286         EPM_FLAGS="-a arm64"
5287         ;;
5288     alpha)
5289         CPUNAME=AXP
5290         RTL_ARCH=ALPHA
5291         PLATFORMID=linux_alpha
5292         ;;
5293     arm*)
5294         CPUNAME=ARM
5295         EPM_FLAGS="-a arm"
5296         RTL_ARCH=ARM_EABI
5297         PLATFORMID=linux_arm_eabi
5298         case "$host_cpu" in
5299         arm*-linux)
5300             RTL_ARCH=ARM_OABI
5301             PLATFORMID=linux_arm_oabi
5302             ;;
5303         esac
5304         ;;
5305     hppa)
5306         CPUNAME=HPPA
5307         RTL_ARCH=HPPA
5308         EPM_FLAGS="-a hppa"
5309         PLATFORMID=linux_hppa
5310         ;;
5311     i*86)
5312         CPUNAME=INTEL
5313         RTL_ARCH=x86
5314         PLATFORMID=linux_x86
5315         ;;
5316     ia64)
5317         CPUNAME=IA64
5318         RTL_ARCH=IA64
5319         PLATFORMID=linux_ia64
5320         ;;
5321     mips)
5322         CPUNAME=MIPS
5323         RTL_ARCH=MIPS_EB
5324         EPM_FLAGS="-a mips"
5325         PLATFORMID=linux_mips_eb
5326         ;;
5327     mips64)
5328         CPUNAME=MIPS64
5329         RTL_ARCH=MIPS64_EB
5330         EPM_FLAGS="-a mips64"
5331         PLATFORMID=linux_mips64_eb
5332         ;;
5333     mips64el)
5334         CPUNAME=MIPS64
5335         RTL_ARCH=MIPS64_EL
5336         EPM_FLAGS="-a mips64el"
5337         PLATFORMID=linux_mips64_el
5338         ;;
5339     mipsel)
5340         CPUNAME=MIPS
5341         RTL_ARCH=MIPS_EL
5342         EPM_FLAGS="-a mipsel"
5343         PLATFORMID=linux_mips_el
5344         ;;
5345     riscv64)
5346         CPUNAME=RISCV64
5347         RTL_ARCH=RISCV64
5348         EPM_FLAGS="-a riscv64"
5349         PLATFORMID=linux_riscv64
5350         ;;
5351     m68k)
5352         CPUNAME=M68K
5353         RTL_ARCH=M68K
5354         PLATFORMID=linux_m68k
5355         ;;
5356     powerpc)
5357         CPUNAME=POWERPC
5358         RTL_ARCH=PowerPC
5359         PLATFORMID=linux_powerpc
5360         ;;
5361     powerpc64)
5362         CPUNAME=POWERPC64
5363         RTL_ARCH=PowerPC_64
5364         PLATFORMID=linux_powerpc64
5365         ;;
5366     powerpc64le)
5367         CPUNAME=POWERPC64
5368         RTL_ARCH=PowerPC_64_LE
5369         PLATFORMID=linux_powerpc64_le
5370         ;;
5371     sparc)
5372         CPUNAME=SPARC
5373         RTL_ARCH=SPARC
5374         PLATFORMID=linux_sparc
5375         ;;
5376     sparc64)
5377         CPUNAME=SPARC64
5378         RTL_ARCH=SPARC64
5379         PLATFORMID=linux_sparc64
5380         ;;
5381     s390x)
5382         CPUNAME=S390X
5383         RTL_ARCH=S390x
5384         PLATFORMID=linux_s390x
5385         ;;
5386     x86_64)
5387         CPUNAME=X86_64
5388         RTL_ARCH=X86_64
5389         PLATFORMID=linux_x86_64
5390         ;;
5391     loongarch64)
5392         CPUNAME=LOONGARCH64
5393         RTL_ARCH=LOONGARCH64
5394         PLATFORMID=linux_loongarch64
5395         ;;
5396     *)
5397         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5398         ;;
5399     esac
5400     ;;
5402 linux-android*)
5403     COM=GCC
5404     OS=ANDROID
5405     RTL_OS=Android
5406     P_SEP=:
5408     case "$host_cpu" in
5410     arm|armel)
5411         CPUNAME=ARM
5412         RTL_ARCH=ARM_EABI
5413         PLATFORMID=android_arm_eabi
5414         ;;
5415     aarch64)
5416         CPUNAME=AARCH64
5417         RTL_ARCH=AARCH64
5418         PLATFORMID=android_aarch64
5419         ;;
5420     i*86)
5421         CPUNAME=INTEL
5422         RTL_ARCH=x86
5423         PLATFORMID=android_x86
5424         ;;
5425     x86_64)
5426         CPUNAME=X86_64
5427         RTL_ARCH=X86_64
5428         PLATFORMID=android_x86_64
5429         ;;
5430     *)
5431         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5432         ;;
5433     esac
5434     ;;
5436 *netbsd*)
5437     COM=GCC
5438     OS=NETBSD
5439     RTL_OS=NetBSD
5440     P_SEP=:
5442     case "$host_cpu" in
5443     i*86)
5444         CPUNAME=INTEL
5445         RTL_ARCH=x86
5446         PLATFORMID=netbsd_x86
5447         ;;
5448     powerpc)
5449         CPUNAME=POWERPC
5450         RTL_ARCH=PowerPC
5451         PLATFORMID=netbsd_powerpc
5452         ;;
5453     sparc)
5454         CPUNAME=SPARC
5455         RTL_ARCH=SPARC
5456         PLATFORMID=netbsd_sparc
5457         ;;
5458     x86_64)
5459         CPUNAME=X86_64
5460         RTL_ARCH=X86_64
5461         PLATFORMID=netbsd_x86_64
5462         ;;
5463     *)
5464         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5465         ;;
5466     esac
5467     ;;
5469 openbsd*)
5470     COM=GCC
5471     OS=OPENBSD
5472     RTL_OS=OpenBSD
5473     P_SEP=:
5475     case "$host_cpu" in
5476     i*86)
5477         CPUNAME=INTEL
5478         RTL_ARCH=x86
5479         PLATFORMID=openbsd_x86
5480         ;;
5481     x86_64)
5482         CPUNAME=X86_64
5483         RTL_ARCH=X86_64
5484         PLATFORMID=openbsd_x86_64
5485         ;;
5486     *)
5487         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5488         ;;
5489     esac
5490     SOLARINC="$SOLARINC -I/usr/local/include"
5491     ;;
5493 solaris*)
5494     COM=GCC
5495     OS=SOLARIS
5496     RTL_OS=Solaris
5497     P_SEP=:
5499     case "$host_cpu" in
5500     i*86)
5501         CPUNAME=INTEL
5502         RTL_ARCH=x86
5503         PLATFORMID=solaris_x86
5504         ;;
5505     sparc)
5506         CPUNAME=SPARC
5507         RTL_ARCH=SPARC
5508         PLATFORMID=solaris_sparc
5509         ;;
5510     sparc64)
5511         CPUNAME=SPARC64
5512         RTL_ARCH=SPARC64
5513         PLATFORMID=solaris_sparc64
5514         ;;
5515     *)
5516         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5517         ;;
5518     esac
5519     SOLARINC="$SOLARINC -I/usr/local/include"
5520     ;;
5522 emscripten*)
5523     COM=GCC
5524     OS=EMSCRIPTEN
5525     RTL_OS=Emscripten
5526     P_SEP=:
5528     case "$host_cpu" in
5529     wasm32|wasm64)
5530         ;;
5531     *)
5532         AC_MSG_ERROR([Unsupported host_cpu $host_cpu for host_os $host_os])
5533         ;;
5534     esac
5535     CPUNAME=INTEL
5536     RTL_ARCH=x86
5537     PLATFORMID=linux_x86
5538     ;;
5541     AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
5542     ;;
5543 esac
5545 DISABLE_GUI=""
5546 if test "$enable_gui" = "no"; then
5547     if test "$using_x11" != yes; then
5548         AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice with --disable-gui.])
5549     fi
5550     USING_X11=
5551     DISABLE_GUI=TRUE
5552     test_epoxy=no
5553 else
5554     AC_DEFINE(HAVE_FEATURE_UI)
5556 AC_SUBST(DISABLE_GUI)
5558 if test "$with_x" = "no"; then
5559     USING_X11=
5562 if test -z "$USING_X11" -a "$enable_qt5" = "yes" -a "$enable_gen" = "yes"; then
5563     AC_MSG_ERROR([Can't select gen VCL plugin, if --without-x is used!])
5566 if test "$using_x11" = yes; then
5567     if test "$USING_X11" = TRUE; then
5568         AC_DEFINE(USING_X11)
5569     else
5570         disable_x11_tests
5571         if test "$DISABLE_DYNLOADING" = TRUE; then
5572             test_qt5=yes
5573             test_qt6=yes
5574         fi
5575     fi
5576 else
5577     if test "$USING_X11" = TRUE; then
5578         AC_MSG_ERROR([Platform doesn't support X11 (\$using_x11), but \$USING_X11 is set!])
5579     fi
5582 WORKDIR="${BUILDDIR}/workdir"
5583 INSTDIR="${BUILDDIR}/instdir"
5584 INSTROOTBASE=${INSTDIR}${INSTROOTBASESUFFIX}
5585 INSTROOT=${INSTROOTBASE}${INSTROOTCONTENTSUFFIX}
5586 AC_SUBST(COM)
5587 AC_SUBST(CPUNAME)
5588 AC_SUBST(RTL_OS)
5589 AC_SUBST(RTL_ARCH)
5590 AC_SUBST(EPM_FLAGS)
5591 AC_SUBST(USING_X11)
5592 AC_SUBST([INSTDIR])
5593 AC_SUBST([INSTROOT])
5594 AC_SUBST([INSTROOTBASE])
5595 AC_SUBST(OS)
5596 AC_SUBST(P_SEP)
5597 AC_SUBST(WORKDIR)
5598 AC_SUBST(PLATFORMID)
5599 AC_SUBST(WINDOWS_X64)
5600 AC_DEFINE_UNQUOTED(SDKDIR, "$INSTDIR/$SDKDIRNAME")
5601 AC_DEFINE_UNQUOTED(WORKDIR,"$WORKDIR")
5603 if test "$OS" = WNT -a "$COM" = MSC; then
5604     case "$CPUNAME" in
5605     INTEL) CPPU_ENV=msci ;;
5606     X86_64) CPPU_ENV=mscx ;;
5607     AARCH64) CPPU_ENV=msca ;;
5608     *)
5609         AC_MSG_ERROR([Unknown \$CPUNAME '$CPUNAME' for $OS / $COM"])
5610         ;;
5611     esac
5612 else
5613     CPPU_ENV=gcc3
5615 AC_SUBST(CPPU_ENV)
5617 dnl ===================================================================
5618 dnl Test which package format to use
5619 dnl ===================================================================
5620 AC_MSG_CHECKING([which package format to use])
5621 if test -n "$with_package_format" -a "$with_package_format" != no; then
5622     for i in $with_package_format; do
5623         case "$i" in
5624         bsd | deb | pkg | rpm | archive | dmg | installed | msi)
5625             ;;
5626         *)
5627             AC_MSG_ERROR([unsupported format $i. Supported by EPM are:
5628 bsd - FreeBSD, NetBSD, or OpenBSD software distribution
5629 deb - Debian software distribution
5630 pkg - Solaris software distribution
5631 rpm - RedHat software distribution
5633 LibreOffice additionally supports:
5634 archive - .tar.gz or .zip
5635 dmg - macOS .dmg
5636 installed - installation tree
5637 msi - Windows .msi
5638         ])
5639             ;;
5640         esac
5641     done
5642     # fakeroot is needed to ensure correct file ownerships/permissions
5643     # inside deb packages and tar archives created on Linux and Solaris.
5644     if test "$OS" = "LINUX" || test "$OS" = "SOLARIS"; then
5645         AC_PATH_PROG(FAKEROOT, fakeroot, no)
5646         if test "$FAKEROOT" = "no"; then
5647             AC_MSG_ERROR(
5648                 [--with-package-format='$with_package_format' requires fakeroot. Install fakeroot.])
5649         fi
5650     fi
5651     PKGFORMAT="$with_package_format"
5652     AC_MSG_RESULT([$PKGFORMAT])
5653 else
5654     PKGFORMAT=
5655     AC_MSG_RESULT([none])
5657 AC_SUBST(PKGFORMAT)
5659 dnl ===================================================================
5660 dnl handle help related options
5662 dnl If you change help related options, please update README.help
5663 dnl ===================================================================
5665 ENABLE_HTMLHELP=
5666 HELP_OMINDEX_PAGE=
5667 HELP_ONLINE=
5668 WITH_HELPPACKS=
5670 AC_MSG_CHECKING([which help to build])
5671 if test -n "$with_help" -a "$with_help" != "no"; then
5672     GIT_NEEDED_SUBMODULES="helpcontent2 $GIT_NEEDED_SUBMODULES"
5673     BUILD_TYPE="$BUILD_TYPE HELP"
5674     case "$with_help" in
5675     "html")
5676         ENABLE_HTMLHELP=TRUE
5677         WITH_HELPPACKS=TRUE
5678         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5679         AC_MSG_RESULT([HTML (local)])
5680         ;;
5681     "online")
5682         ENABLE_HTMLHELP=TRUE
5683         HELP_ONLINE=TRUE
5684         AC_MSG_RESULT([HTML (online)])
5685         ;;
5686     yes)
5687         WITH_HELPPACKS=TRUE
5688         SCPDEFS="$SCPDEFS -DWITH_HELPPACKS"
5689         AC_MSG_RESULT([XML (local)])
5690         ;;
5691     *)
5692         AC_MSG_ERROR([Unknown --with-help=$with_help])
5693         ;;
5694     esac
5695 else
5696     AC_MSG_RESULT([no])
5699 AC_MSG_CHECKING([if we need to build the help index tooling])
5700 if test \( "$with_help" = yes -o "$enable_extension_integration" != no \) -a -z "$DISABLE_DYNLOADING"; then
5701     BUILD_TYPE="$BUILD_TYPE HELPTOOLS"
5702     test_clucene=yes
5703     AC_MSG_RESULT([yes])
5704 else
5705     AC_MSG_RESULT([no])
5708 AC_MSG_CHECKING([whether to enable xapian-omega support for online help])
5709 if test -n "$with_omindex" -a "$with_omindex" != "no"; then
5710     if test "$HELP_ONLINE" != TRUE; then
5711         AC_MSG_ERROR([Can't build xapian-omega index without --help=online])
5712     fi
5713     case "$with_omindex" in
5714     "server")
5715         HELP_OMINDEX_PAGE=TRUE
5716         AC_MSG_RESULT([SERVER])
5717         ;;
5718     "noxap")
5719         AC_MSG_RESULT([NOXAP])
5720         ;;
5721     *)
5722         AC_MSG_ERROR([Unknown --with-omindex=$with_omindex])
5723         ;;
5724     esac
5725 else
5726     AC_MSG_RESULT([no])
5729 AC_MSG_CHECKING([whether to include the XML-help support])
5730 if test "$enable_xmlhelp" = yes; then
5731     BUILD_TYPE="$BUILD_TYPE XMLHELP"
5732     test_clucene=yes
5733     AC_DEFINE(HAVE_FEATURE_XMLHELP)
5734     AC_MSG_RESULT([yes])
5735 else
5736     if test "$with_help" = yes; then
5737         add_warning "Building the XML help, but LO with disabled xmlhelp support. Generated help can't be accessed from this LO build!"
5738     fi
5739     AC_MSG_RESULT([no])
5742 dnl Test whether to integrate helppacks into the product's installer
5743 AC_MSG_CHECKING([for helppack integration])
5744 if test -z "$WITH_HELPPACKS" -o "$with_helppack_integration" = no; then
5745     AC_MSG_RESULT([no integration])
5746 else
5747     SCPDEFS="$SCPDEFS -DWITH_HELPPACK_INTEGRATION"
5748     AC_MSG_RESULT([integration])
5751 AC_SUBST([ENABLE_HTMLHELP])
5752 AC_SUBST([HELP_OMINDEX_PAGE])
5753 AC_SUBST([HELP_ONLINE])
5754 # WITH_HELPPACKS is used only in configure
5756 dnl ===================================================================
5757 dnl Set up a different compiler to produce tools to run on the build
5758 dnl machine when doing cross-compilation
5759 dnl ===================================================================
5761 m4_pattern_allow([PKG_CONFIG_FOR_BUILD])
5762 m4_pattern_allow([PKG_CONFIG_LIBDIR])
5763 if test "$cross_compiling" = "yes"; then
5764     AC_MSG_CHECKING([for BUILD platform configuration])
5765     echo
5766     rm -rf CONF-FOR-BUILD config_build.mk
5767     mkdir CONF-FOR-BUILD
5768     # Here must be listed all files needed when running the configure script. In particular, also
5769     # those expanded by the AC_CONFIG_FILES() call near the end of this configure.ac. For clarity,
5770     # keep them in the same order as there.
5771     (cd $SRC_ROOT && tar cf - \
5772         config.guess \
5773         bin/get_config_variables \
5774         solenv/bin/getcompver.awk \
5775         solenv/inc/langlist.mk \
5776         download.lst \
5777         config_host.mk.in \
5778         config_host_lang.mk.in \
5779         Makefile.in \
5780         bin/bffvalidator.sh.in \
5781         bin/odfvalidator.sh.in \
5782         bin/officeotron.sh.in \
5783         instsetoo_native/util/openoffice.lst.in \
5784         config_host/*.in \
5785         sysui/desktop/macosx/Info.plist.in \
5786         sysui/desktop/macosx/hardened_runtime.xcent.in \
5787         sysui/desktop/macosx/lo.xcent.in \
5788         .vscode/vs-code-template.code-workspace.in \
5789         solenv/lockfile/autoconf.h.in \
5790         ) \
5791     | (cd CONF-FOR-BUILD && tar xf -)
5792     cp configure CONF-FOR-BUILD
5793     test -d config_build && cp -p config_build/*.h CONF-FOR-BUILD/config_host 2>/dev/null
5794     (
5795     unset COM USING_X11 OS CPUNAME
5796     unset CC CXX SYSBASE CFLAGS
5797     unset AR LD NM OBJDUMP PKG_CONFIG RANLIB READELF STRIP
5798     unset CPPUNIT_CFLAGS CPPUNIT_LIBS
5799     unset LIBXML_CFLAGS LIBXML_LIBS LIBXSLT_CFLAGS LIBXSLT_LIBS XSLTPROC
5800     unset PKG_CONFIG_LIBDIR PKG_CONFIG_PATH
5801     if test -n "$CC_FOR_BUILD"; then
5802         export CC="$CC_FOR_BUILD"
5803         CC_BASE=`first_arg_basename "$CC"`
5804     fi
5805     if test -n "$CXX_FOR_BUILD"; then
5806         export CXX="$CXX_FOR_BUILD"
5807         CXX_BASE=`first_arg_basename "$CXX"`
5808     fi
5809     test -n "$PKG_CONFIG_FOR_BUILD" && export PKG_CONFIG="$PKG_CONFIG_FOR_BUILD"
5810     cd CONF-FOR-BUILD
5812     # Handle host configuration, which affects the cross-toolset too
5813     sub_conf_opts=""
5814     test -n "$enable_ccache" && sub_conf_opts="$sub_conf_opts --enable-ccache=$enable_ccache"
5815     test -n "$with_ant_home" && sub_conf_opts="$sub_conf_opts --with-ant-home=$with_ant_home"
5816     test "$with_junit" = "no" && sub_conf_opts="$sub_conf_opts --without-junit"
5817     # While we don't need scripting support, we don't have a PYTHON_FOR_BUILD Java equivalent, so must enable scripting for Java
5818     if test -n "$ENABLE_JAVA"; then
5819         case "$_os" in
5820         Android)
5821             # Hack for Android - the build doesn't need a host JDK, so just forward to build for convenience
5822             test -n "$with_jdk_home" && sub_conf_opts="$sub_conf_opts --with-jdk-home=$with_jdk_home"
5823             ;;
5824         *)
5825             if test -z "$with_jdk_home"; then
5826                 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.])
5827             fi
5828             ;;
5829         esac
5830     else
5831         sub_conf_opts="$sub_conf_opts --without-java"
5832     fi
5833     test -n "$TARFILE_LOCATION" && sub_conf_opts="$sub_conf_opts --with-external-tar=$TARFILE_LOCATION"
5834     test "$with_galleries" = "no" -o -z "$WITH_GALLERY_BUILD" && sub_conf_opts="$sub_conf_opts --with-galleries=no --disable-database-connectivity"
5835     test "$with_templates" = "no" -o -z "$WITH_TEMPLATES" && sub_conf_opts="$sub_conf_opts --with-templates=no"
5836     test -n "$with_help" -a "$with_help" != "no" && sub_conf_opts="$sub_conf_opts --with-help=$with_help"
5837     test "$enable_extensions" = yes || sub_conf_opts="$sub_conf_opts --disable-extensions"
5838     test "${enable_ld+set}" = set -a "$build_cpu" = "$host_cpu" && sub_conf_opts="$sub_conf_opts --enable-ld=${enable_ld}"
5839     test "${enable_pch+set}" = set && sub_conf_opts="$sub_conf_opts --enable-pch=${enable_pch}"
5840     test "$enable_wasm_strip" = "yes" && sub_conf_opts="$sub_conf_opts --enable-wasm-strip"
5841     test "${with_system_lockfile+set}" = set && sub_conf_opts="$sub_conf_opts --with-system-lockfile=${with_system_lockfile}"
5842     test "${enable_fuzzers}" = yes && sub_conf_opts="$sub_conf_opts --without-system-libxml"
5843     if test "$_os" = "Emscripten"; then
5844         sub_conf_opts="$sub_conf_opts --without-system-libxml --without-system-fontconfig --without-system-freetype --without-system-zlib"
5845         if test "${with_main_module+set}" = set; then
5846             sub_conf_opts="$sub_conf_opts --with-main-module=${with_main_module}"
5847         else
5848             sub_conf_opts="$sub_conf_opts --with-main-module=writer"
5849         fi
5850     fi
5851     # windows uses full-internal python and that in turn relies on openssl, so also enable openssl
5852     # when cross-compiling for aarch64, overriding the defaults below
5853     test "${PLATFORMID}" = "windows_aarch64" && sub_conf_opts="$sub_conf_opts --enable-openssl --with-tls=openssl"
5855     # Don't bother having configure look for stuff not needed for the build platform anyway
5856     # WARNING: any option with an argument containing spaces must be handled separately (see --with-theme)
5857     sub_conf_defaults=" \
5858         --build="$build_alias" \
5859         --disable-cairo-canvas \
5860         --disable-cups \
5861         --disable-customtarget-components \
5862         --disable-firebird-sdbc \
5863         --disable-gpgmepp \
5864         --disable-gstreamer-1-0 \
5865         --disable-gtk3 \
5866         --disable-gtk4 \
5867         --disable-libcmis \
5868         --disable-mariadb-sdbc \
5869         --disable-nss \
5870         --disable-online-update \
5871         --disable-opencl \
5872         --disable-openssl \
5873         --disable-pdfimport \
5874         --disable-postgresql-sdbc \
5875         --disable-skia \
5876         --disable-xmlhelp \
5877         --enable-dynamic-loading \
5878         --enable-icecream="$enable_icecream" \
5879         --without-doxygen \
5880         --without-tls \
5881         --without-webdav \
5882         --without-x \
5884     # single quotes added for better readability in case of spaces
5885     echo "    Running CONF-FOR-BUILD/configure" \
5886         $sub_conf_defaults \
5887         --with-parallelism="'$with_parallelism'" \
5888         --with-theme="'$with_theme'" \
5889         --with-vendor="'$with_vendor'" \
5890         $sub_conf_opts \
5891         $with_build_platform_configure_options \
5892         --srcdir=$srcdir
5894     ./configure \
5895         $sub_conf_defaults \
5896         --with-parallelism="$with_parallelism" \
5897         --with-theme="$with_theme" \
5898         "--with-vendor=$with_vendor" \
5899         $sub_conf_opts \
5900         $with_build_platform_configure_options \
5901         --srcdir=$srcdir \
5902         2>&1 | sed -e 's/^/    /'
5903     if test [${PIPESTATUS[0]}] -ne 0; then
5904         AC_MSG_ERROR([Running the configure script for BUILD side failed, see CONF-FOR-BUILD/config.log])
5905     fi
5907     # filter permitted build targets
5908     PERMITTED_BUILD_TARGETS="
5909         ARGON2
5910         AVMEDIA
5911         BOOST
5912         BZIP2
5913         CAIRO
5914         CLUCENE
5915         CURL
5916         DBCONNECTIVITY
5917         DESKTOP
5918         DRAGONBOX
5919         DYNLOADING
5920         EPOXY
5921         EXPAT
5922         FROZEN
5923         GLM
5924         GRAPHITE
5925         HARFBUZZ
5926         HELPTOOLS
5927         ICU
5928         LCMS2
5929         LIBJPEG_TURBO
5930         LIBLANGTAG
5931         LibO
5932         LIBFFI
5933         LIBPN
5934         LIBTIFF
5935         LIBWEBP
5936         LIBXML2
5937         LIBXSLT
5938         MDDS
5939         NATIVE
5940         OPENSSL
5941         ORCUS
5942         PYTHON
5943         REPORTBUILDER
5944         SCRIPTING
5945         ZLIB
5946         ZXCVBN
5948     # converts BUILD_TYPE and PERMITTED_BUILD_TARGETS into non-whitespace,
5949     # newlined lists, to use grep as a filter
5950     PERMITTED_BUILD_TARGETS=$(echo "$PERMITTED_BUILD_TARGETS" | sed -e '/^ *$/d' -e 's/ *//')
5951     BUILD_TARGETS="$(sed -n -e '/^export BUILD_TYPE=/ s/.*=//p' config_host.mk | tr ' ' '\n')"
5952     BUILD_TARGETS="$(echo "$BUILD_TARGETS" | grep -F "$PERMITTED_BUILD_TARGETS" | tr '\n' ' ')"
5953     sed -i -e "s/ BUILD_TYPE=.*$/ BUILD_TYPE=$BUILD_TARGETS/" config_host.mk
5955     cp config_host.mk ../config_build.mk
5956     cp config_host_lang.mk ../config_build_lang.mk
5957     mv config.log ../config.Build.log
5958     mkdir -p ../config_build
5959     mv config_host/*.h ../config_build
5960     test -f "$WARNINGS_FILE" && mv "$WARNINGS_FILE" "../$WARNINGS_FILE_FOR_BUILD"
5962     # all these will get a _FOR_BUILD postfix
5963     DIRECT_FOR_BUILD_SETTINGS="
5964         CC
5965         CPPU_ENV
5966         CXX
5967         ILIB
5968         JAVA_HOME
5969         JAVAIFLAGS
5970         JDK
5971         JDK_SECURITYMANAGER_DISALLOWED
5972         LIBO_BIN_FOLDER
5973         LIBO_LIB_FOLDER
5974         LIBO_URE_LIB_FOLDER
5975         LIBO_URE_MISC_FOLDER
5976         OS
5977         SDKDIRNAME
5978         SYSTEM_LIBXML
5979         SYSTEM_LIBXSLT
5981     # these overwrite host config with build config
5982     OVERWRITING_SETTINGS="
5983         ANT
5984         ANT_HOME
5985         ANT_LIB
5986         JAVA_SOURCE_VER
5987         JAVA_TARGET_VER
5988         JAVACFLAGS
5989         JAVACOMPILER
5990         JAVADOC
5991         JAVADOCISGJDOC
5992         LOCKFILE
5993         SYSTEM_GENBRK
5994         SYSTEM_GENCCODE
5995         SYSTEM_GENCMN
5997     # these need some special handling
5998     EXTRA_HANDLED_SETTINGS="
5999         INSTDIR
6000         INSTROOT
6001         PATH
6002         WORKDIR
6004     OLD_PATH=$PATH
6005     . ./bin/get_config_variables $DIRECT_FOR_BUILD_SETTINGS $OVERWRITING_SETTINGS $EXTRA_HANDLED_SETTINGS
6006     BUILD_PATH=$PATH
6007     PATH=$OLD_PATH
6009     line=`echo "LO_PATH_FOR_BUILD='${BUILD_PATH}'" | sed -e 's,/CONF-FOR-BUILD,,g'`
6010     echo "$line" >>build-config
6012     for V in $DIRECT_FOR_BUILD_SETTINGS; do
6013         VV='$'$V
6014         VV=`eval "echo $VV"`
6015         if test -n "$VV"; then
6016             line=${V}_FOR_BUILD='${'${V}_FOR_BUILD:-$VV'}'
6017             echo "$line" >>build-config
6018         fi
6019     done
6021     for V in $OVERWRITING_SETTINGS; do
6022         VV='$'$V
6023         VV=`eval "echo $VV"`
6024         if test -n "$VV"; then
6025             line=${V}='${'${V}:-$VV'}'
6026             echo "$line" >>build-config
6027         fi
6028     done
6030     for V in INSTDIR INSTROOT WORKDIR; do
6031         VV='$'$V
6032         VV=`eval "echo $VV"`
6033         VV=`echo $VV | sed -e "s,/CONF-FOR-BUILD/\([[a-z]]*\),/\1_for_build,g"`
6034         if test -n "$VV"; then
6035             line="${V}_FOR_BUILD='$VV'"
6036             echo "$line" >>build-config
6037         fi
6038     done
6040     )
6041     test -f CONF-FOR-BUILD/build-config || AC_MSG_ERROR([setup/configure for BUILD side failed, see CONF-FOR-BUILD/config.log])
6042     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])
6043     perl -pi -e 's,/(workdir|instdir)(/|$),/\1_for_build\2,g;' \
6044              -e 's,/CONF-FOR-BUILD,,g;' config_build.mk
6046     eval `cat CONF-FOR-BUILD/build-config`
6048     AC_MSG_RESULT([checking for BUILD platform configuration... done])
6050     rm -rf CONF-FOR-BUILD
6051 else
6052     OS_FOR_BUILD="$OS"
6053     CC_FOR_BUILD="$CC"
6054     CPPU_ENV_FOR_BUILD="$CPPU_ENV"
6055     CXX_FOR_BUILD="$CXX"
6056     INSTDIR_FOR_BUILD="$INSTDIR"
6057     INSTROOT_FOR_BUILD="$INSTROOT"
6058     LIBO_BIN_FOLDER_FOR_BUILD="$LIBO_BIN_FOLDER"
6059     LIBO_LIB_FOLDER_FOR_BUILD="$LIBO_LIB_FOLDER"
6060     LIBO_URE_LIB_FOLDER_FOR_BUILD="$LIBO_URE_LIB_FOLDER"
6061     LIBO_URE_MISC_FOLDER_FOR_BUILD="$LIBO_URE_MISC_FOLDER"
6062     SDKDIRNAME_FOR_BUILD="$SDKDIRNAME"
6063     WORKDIR_FOR_BUILD="$WORKDIR"
6065 AC_SUBST(OS_FOR_BUILD)
6066 AC_SUBST(INSTDIR_FOR_BUILD)
6067 AC_SUBST(INSTROOT_FOR_BUILD)
6068 AC_SUBST(LIBO_BIN_FOLDER_FOR_BUILD)
6069 AC_SUBST(LIBO_LIB_FOLDER_FOR_BUILD)
6070 AC_SUBST(LIBO_URE_LIB_FOLDER_FOR_BUILD)
6071 AC_SUBST(LIBO_URE_MISC_FOLDER_FOR_BUILD)
6072 AC_SUBST(SDKDIRNAME_FOR_BUILD)
6073 AC_SUBST(WORKDIR_FOR_BUILD)
6074 AC_SUBST(CC_FOR_BUILD)
6075 AC_SUBST(CXX_FOR_BUILD)
6076 AC_SUBST(CPPU_ENV_FOR_BUILD)
6078 dnl ===================================================================
6079 dnl Check for lockfile deps
6080 dnl ===================================================================
6081 if test -z "$CROSS_COMPILING"; then
6082     test -n "$LOCKFILE" -a "${with_system_lockfile+set}" != set && with_system_lockfile="$LOCKFILE"
6083     test "${with_system_lockfile+set}" = set || with_system_lockfile=no
6084     AC_MSG_CHECKING([which lockfile binary to use])
6085     case "$with_system_lockfile" in
6086     yes)
6087         AC_MSG_RESULT([external])
6088         AC_PATH_PROGS([LOCKFILE],[dotlockfile lockfile])
6089         ;;
6090     no)
6091         AC_MSG_RESULT([internal])
6092         ;;
6093     *)
6094         if test -x "$with_system_lockfile"; then
6095             LOCKFILE="$with_system_lockfile"
6096         else
6097             AC_MSG_ERROR(['$with_system_lockfile' is not executable.])
6098         fi
6099         AC_MSG_RESULT([$with_system_lockfile])
6100         ;;
6101     esac
6104 if test -n "$LOCKFILE" -a "$DISABLE_DYNLOADING" = TRUE; then
6105     add_warning "The default system lockfile has increasing poll intervals up to 60s, so linking executables may be delayed."
6108 AC_CHECK_HEADERS([getopt.h paths.h sys/param.h])
6109 AC_CHECK_FUNCS([utime utimes])
6110 AC_SUBST(LOCKFILE)
6112 dnl ===================================================================
6113 dnl Check for syslog header
6114 dnl ===================================================================
6115 AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG_H))
6117 dnl Set the ENABLE_WERROR variable. (Activate --enable-werror)
6118 dnl ===================================================================
6119 AC_MSG_CHECKING([whether to turn warnings to errors])
6120 if test -n "$enable_werror" -a "$enable_werror" != "no"; then
6121     ENABLE_WERROR="TRUE"
6122     PYTHONWARNINGS="error"
6123     AC_MSG_RESULT([yes])
6124 else
6125     if test -n "$LODE_HOME" -a -z "$enable_werror"; then
6126         ENABLE_WERROR="TRUE"
6127         PYTHONWARNINGS="error"
6128         AC_MSG_RESULT([yes])
6129     else
6130         AC_MSG_RESULT([no])
6131     fi
6133 AC_SUBST(ENABLE_WERROR)
6134 AC_SUBST(PYTHONWARNINGS)
6136 dnl Check for --enable-assert-always-abort, set ASSERT_ALWAYS_ABORT
6137 dnl ===================================================================
6138 AC_MSG_CHECKING([whether to have assert() failures abort even without --enable-debug])
6139 if test -z "$enable_assert_always_abort"; then
6140    if test "$ENABLE_DEBUG" = TRUE; then
6141        enable_assert_always_abort=yes
6142    else
6143        enable_assert_always_abort=no
6144    fi
6146 if test "$enable_assert_always_abort" = "yes"; then
6147     ASSERT_ALWAYS_ABORT="TRUE"
6148     AC_MSG_RESULT([yes])
6149 else
6150     ASSERT_ALWAYS_ABORT="FALSE"
6151     AC_MSG_RESULT([no])
6153 AC_SUBST(ASSERT_ALWAYS_ABORT)
6155 # Determine whether to use ooenv for the instdir installation
6156 # ===================================================================
6157 if test $_os != "WINNT" -a $_os != "Darwin"; then
6158     AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
6159     if test -z "$enable_ooenv"; then
6160         if test -n "$ENABLE_DEBUG$ENABLE_DBGUTIL"; then
6161             enable_ooenv=yes
6162         else
6163             enable_ooenv=no
6164         fi
6165     fi
6166     if test "$enable_ooenv" = "no"; then
6167         AC_MSG_RESULT([no])
6168     else
6169         ENABLE_OOENV="TRUE"
6170         AC_MSG_RESULT([yes])
6171     fi
6173 AC_SUBST(ENABLE_OOENV)
6175 if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then
6176     if test "$enable_qt5" = "no"; then
6177         AC_MSG_ERROR([KF5 support depends on QT5, so it conflicts with --disable-qt5])
6178     else
6179         enable_qt5=yes
6180     fi
6183 if test "$test_kf6" = "yes" -a "$enable_kf6" = "yes"; then
6184     if test "$enable_qt6" = "no"; then
6185         AC_MSG_ERROR([KF6 support depends on QT6, so it conflicts with --disable-qt6])
6186     else
6187         enable_qt6=yes
6188     fi
6192 AC_MSG_CHECKING([whether to build the pagein binaries for oosplash])
6193 if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then
6194     AC_MSG_RESULT([yes])
6195     ENABLE_PAGEIN=TRUE
6196     AC_DEFINE(HAVE_FEATURE_PAGEIN)
6197 else
6198     AC_MSG_RESULT([no])
6200 AC_SUBST(ENABLE_PAGEIN)
6202 dnl ===================================================================
6203 dnl check for cups support
6204 dnl ===================================================================
6206 AC_MSG_CHECKING([whether to enable CUPS support])
6207 if test "$test_cups" = yes -a "$enable_cups" != no; then
6208     ENABLE_CUPS=TRUE
6209     AC_MSG_RESULT([yes])
6211     AC_MSG_CHECKING([whether cups support is present])
6212     AC_CHECK_LIB([cups], [cupsPrintFiles], [:])
6213     AC_CHECK_HEADER(cups/cups.h, AC_DEFINE(HAVE_CUPS_H))
6214     if test "$ac_cv_lib_cups_cupsPrintFiles" != "yes" -o "$ac_cv_header_cups_cups_h" != "yes"; then
6215         AC_MSG_ERROR([Could not find CUPS. Install libcups2-dev or cups-devel.])
6216     fi
6217 else
6218     AC_MSG_RESULT([no])
6221 AC_SUBST(ENABLE_CUPS)
6223 libo_CHECK_SYSTEM_MODULE([fontconfig],[FONTCONFIG],[fontconfig >= 2.12.0],,system,TRUE)
6225 dnl whether to find & fetch external tarballs?
6226 dnl ===================================================================
6227 if test -z "$TARFILE_LOCATION" -a -n "$LODE_HOME" ; then
6228    if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
6229        TARFILE_LOCATION="`cygpath -m $LODE_HOME/ext_tar`"
6230    else
6231        TARFILE_LOCATION="$LODE_HOME/ext_tar"
6232    fi
6234 if test -z "$TARFILE_LOCATION"; then
6235     if test -d "$SRC_ROOT/src" ; then
6236         mv "$SRC_ROOT/src" "$SRC_ROOT/external/tarballs"
6237         ln -s "$SRC_ROOT/external/tarballs" "$SRC_ROOT/src"
6238     fi
6239     TARFILE_LOCATION="$SRC_ROOT/external/tarballs"
6240 else
6241     AbsolutePath "$TARFILE_LOCATION"
6242     PathFormat "${absolute_path}"
6243     TARFILE_LOCATION="${formatted_path_unix}"
6245 AC_SUBST(TARFILE_LOCATION)
6247 AC_MSG_CHECKING([whether we want to fetch tarballs])
6248 if test "$enable_fetch_external" != "no"; then
6249     if test "$with_all_tarballs" = "yes"; then
6250         AC_MSG_RESULT([yes, all of them])
6251         DO_FETCH_TARBALLS="ALL"
6252     else
6253         AC_MSG_RESULT([yes, if we use them])
6254         DO_FETCH_TARBALLS="TRUE"
6255     fi
6256 else
6257     AC_MSG_RESULT([no])
6258     DO_FETCH_TARBALLS=
6260 AC_SUBST(DO_FETCH_TARBALLS)
6262 dnl Test whether to include MySpell dictionaries
6263 dnl ===================================================================
6264 AC_MSG_CHECKING([whether to include MySpell dictionaries])
6265 if test "$with_myspell_dicts" = "yes"; then
6266     AC_MSG_RESULT([yes])
6267     WITH_MYSPELL_DICTS=TRUE
6268     BUILD_TYPE="$BUILD_TYPE DICTIONARIES"
6269     GIT_NEEDED_SUBMODULES="dictionaries $GIT_NEEDED_SUBMODULES"
6270 else
6271     AC_MSG_RESULT([no])
6272     WITH_MYSPELL_DICTS=
6274 AC_SUBST(WITH_MYSPELL_DICTS)
6276 # There are no "system" myspell, hyphen or mythes dictionaries on macOS, Windows, Android or iOS.
6277 if test $_os = Darwin -o $_os = WINNT -o $_os = iOS -o $_os = Android; then
6278     if test "$with_system_dicts" = yes; then
6279         AC_MSG_ERROR([There are no system dicts on this OS in the formats the 3rd-party libs we use expect]);
6280     fi
6281     with_system_dicts=no
6284 AC_MSG_CHECKING([whether to use dicts from external paths])
6285 if test -z "$with_system_dicts" -o "$with_system_dicts" != "no"; then
6286     AC_MSG_RESULT([yes])
6287     SYSTEM_DICTS=TRUE
6288     AC_MSG_CHECKING([for spelling dictionary directory])
6289     if test -n "$with_external_dict_dir"; then
6290         DICT_SYSTEM_DIR=file://$with_external_dict_dir
6291     else
6292         DICT_SYSTEM_DIR=file:///usr/share/hunspell
6293         if test ! -d /usr/share/hunspell -a -d /usr/share/myspell; then
6294             DICT_SYSTEM_DIR=file:///usr/share/myspell
6295         fi
6296     fi
6297     AC_MSG_RESULT([$DICT_SYSTEM_DIR])
6298     AC_MSG_CHECKING([for hyphenation patterns directory])
6299     if test -n "$with_external_hyph_dir"; then
6300         HYPH_SYSTEM_DIR=file://$with_external_hyph_dir
6301     else
6302         HYPH_SYSTEM_DIR=file:///usr/share/hyphen
6303     fi
6304     AC_MSG_RESULT([$HYPH_SYSTEM_DIR])
6305     AC_MSG_CHECKING([for thesaurus directory])
6306     if test -n "$with_external_thes_dir"; then
6307         THES_SYSTEM_DIR=file://$with_external_thes_dir
6308     else
6309         THES_SYSTEM_DIR=file:///usr/share/mythes
6310     fi
6311     AC_MSG_RESULT([$THES_SYSTEM_DIR])
6312 else
6313     AC_MSG_RESULT([no])
6314     SYSTEM_DICTS=
6316 AC_SUBST(SYSTEM_DICTS)
6317 AC_SUBST(DICT_SYSTEM_DIR)
6318 AC_SUBST(HYPH_SYSTEM_DIR)
6319 AC_SUBST(THES_SYSTEM_DIR)
6321 dnl ===================================================================
6322 dnl Precompiled headers.
6323 ENABLE_PCH=""
6324 AC_MSG_CHECKING([whether to enable pch feature])
6325 if test -z "$enable_pch"; then
6326     if test "$_os" = "WINNT"; then
6327         # Enabled by default on Windows.
6328         enable_pch=yes
6329         # never use sccache on auto-enabled PCH builds, except if requested explicitly
6330         if test -z "$enable_ccache" -a "$SCCACHE"; then
6331             CCACHE=""
6332         fi
6333     else
6334         enable_pch=no
6335     fi
6337 if test "$enable_pch" != no -a "$_os" = Emscripten -a "$ENABLE_WASM_EXCEPTIONS" = TRUE; then
6338     AC_MSG_ERROR([PCH currently isn't supported for Emscripten with native EH (nEH) because of missing Sj/Lj support with nEH in clang.])
6340 if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then
6341     AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler])
6343 if test "$enable_pch" = "system"; then
6344     ENABLE_PCH="1"
6345     AC_MSG_RESULT([yes (system headers)])
6346 elif test "$enable_pch" = "base"; then
6347     ENABLE_PCH="2"
6348     AC_MSG_RESULT([yes (system and base headers)])
6349 elif test "$enable_pch" = "normal"; then
6350     ENABLE_PCH="3"
6351     AC_MSG_RESULT([yes (normal)])
6352 elif test "$enable_pch" = "full"; then
6353     ENABLE_PCH="4"
6354     AC_MSG_RESULT([yes (full)])
6355 elif test "$enable_pch" = "yes"; then
6356     # Pick a suitable default.
6357     if test "$GCC" = "yes"; then
6358         # With Clang and GCC higher levels do not seem to make a noticeable improvement,
6359         # while making the PCHs larger and rebuilds more likely.
6360         ENABLE_PCH="2"
6361         AC_MSG_RESULT([yes (system and base headers)])
6362     else
6363         # With MSVC the highest level makes a significant difference,
6364         # and it was the default when there used to be no PCH levels.
6365         ENABLE_PCH="4"
6366         AC_MSG_RESULT([yes (full)])
6367     fi
6368 elif test "$enable_pch" = "no"; then
6369     AC_MSG_RESULT([no])
6370 else
6371     AC_MSG_ERROR([Unknown value for --enable-pch])
6373 AC_SUBST(ENABLE_PCH)
6374 # ccache 3.7.1 and older do not properly detect/handle -include .gch in CCACHE_DEPEND mode
6375 if test -n "$ENABLE_PCH" -a -n "$CCACHE_DEPEND_MODE" -a "$GCC" = "yes" -a "$COM_IS_CLANG" != "TRUE"; then
6376     AC_PATH_PROG([CCACHE_BIN],[ccache],[not found])
6377     if test "$CCACHE_BIN" != "not found"; then
6378         AC_MSG_CHECKING([ccache version])
6379         CCACHE_VERSION=`"$CCACHE_BIN" -V | "$AWK" '/^ccache version/{print $3}'`
6380         CCACHE_NUMVER=`echo $CCACHE_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6381         AC_MSG_RESULT([$CCACHE_VERSION])
6382         AC_MSG_CHECKING([whether ccache depend mode works properly with GCC PCH])
6383         if test "$CCACHE_NUMVER" -gt "030701"; then
6384             AC_MSG_RESULT([yes])
6385         else
6386             AC_MSG_RESULT([no (not newer than 3.7.1)])
6387             CCACHE_DEPEND_MODE=
6388         fi
6389     fi
6392 PCH_INSTANTIATE_TEMPLATES=
6393 if test -n "$ENABLE_PCH"; then
6394     AC_MSG_CHECKING([whether $CC supports -fpch-instantiate-templates])
6395     save_CFLAGS=$CFLAGS
6396     CFLAGS="$CFLAGS -Werror -fpch-instantiate-templates"
6397     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_INSTANTIATE_TEMPLATES="-fpch-instantiate-templates" ],[])
6398     CFLAGS=$save_CFLAGS
6399     if test -n "$PCH_INSTANTIATE_TEMPLATES"; then
6400         AC_MSG_RESULT(yes)
6401     else
6402         AC_MSG_RESULT(no)
6403     fi
6405 AC_SUBST(PCH_INSTANTIATE_TEMPLATES)
6407 BUILDING_PCH_WITH_OBJ=
6408 if test -n "$ENABLE_PCH"; then
6409     AC_MSG_CHECKING([whether $CC supports -Xclang -building-pch-with-obj])
6410     save_CFLAGS=$CFLAGS
6411     CFLAGS="$CFLAGS -Werror -Xclang -building-pch-with-obj"
6412     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ BUILDING_PCH_WITH_OBJ="-Xclang -building-pch-with-obj" ],[])
6413     CFLAGS=$save_CFLAGS
6414     if test -n "$BUILDING_PCH_WITH_OBJ"; then
6415         AC_MSG_RESULT(yes)
6416     else
6417         AC_MSG_RESULT(no)
6418     fi
6420 AC_SUBST(BUILDING_PCH_WITH_OBJ)
6422 PCH_CODEGEN=
6423 PCH_NO_CODEGEN=
6424 fpch_prefix=
6425 if test "$COM" = MSC; then
6426     fpch_prefix="-Xclang "
6428 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6429     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-codegen])
6430     save_CFLAGS=$CFLAGS
6431     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-codegen"
6432     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6433         [ PCH_CODEGEN="${fpch_prefix}-fpch-codegen" ],[])
6434     CFLAGS=$save_CFLAGS
6435     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fno-pch-codegen"
6436     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],
6437         [ PCH_NO_CODEGEN="${fpch_prefix}-fno-pch-codegen" ],[])
6438     CFLAGS=$save_CFLAGS
6439     if test -n "$PCH_CODEGEN"; then
6440         AC_MSG_RESULT(yes)
6441     else
6442         AC_MSG_RESULT(no)
6443     fi
6445 AC_SUBST(PCH_CODEGEN)
6446 AC_SUBST(PCH_NO_CODEGEN)
6447 PCH_DEBUGINFO=
6448 if test -n "$BUILDING_PCH_WITH_OBJ"; then
6449     AC_MSG_CHECKING([whether $CC supports ${fpch_prefix}-fpch-debuginfo])
6450     save_CFLAGS=$CFLAGS
6451     CFLAGS="$CFLAGS -Werror ${fpch_prefix}-fpch-debuginfo"
6452     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ PCH_DEBUGINFO="${fpch_prefix}-fpch-debuginfo" ],[])
6453     CFLAGS=$save_CFLAGS
6454     if test -n "$PCH_DEBUGINFO"; then
6455         AC_MSG_RESULT(yes)
6456     else
6457         AC_MSG_RESULT(no)
6458     fi
6460 AC_SUBST(PCH_DEBUGINFO)
6462 TAB=`printf '\t'`
6464 AC_MSG_CHECKING([the GNU Make version])
6465 _make_version=`$GNUMAKE --version | grep GNU | $GREP -v GPL | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
6466 _make_longver=`echo $_make_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
6467 if test "$_make_longver" -ge "040000"; then
6468     AC_MSG_RESULT([$GNUMAKE $_make_version])
6469 else
6470     AC_MSG_ERROR([failed ($GNUMAKE version >= 4.0 needed)])
6473 _make_ver_check=`$GNUMAKE --version | grep "Built for Windows"`
6474 STALE_MAKE=
6475 if test "$_make_ver_check" = ""; then
6476    STALE_MAKE=TRUE
6479 HAVE_LD_HASH_STYLE=FALSE
6480 WITH_LINKER_HASH_STYLE=
6481 AC_MSG_CHECKING([for --hash-style gcc linker support])
6482 if test "$GCC" = "yes"; then
6483     if test -z "$with_linker_hash_style" -o "$with_linker_hash_style" = "yes"; then
6484         hash_styles="gnu sysv"
6485     elif test "$with_linker_hash_style" = "no"; then
6486         hash_styles=
6487     else
6488         hash_styles="$with_linker_hash_style"
6489     fi
6491     for hash_style in $hash_styles; do
6492         test "$HAVE_LD_HASH_STYLE" = "TRUE" && continue
6493         hash_style_ldflags_save=$LDFLAGS
6494         LDFLAGS="$LDFLAGS -Wl,--hash-style=$hash_style"
6496         AC_RUN_IFELSE([AC_LANG_PROGRAM(
6497             [
6498 #include <stdio.h>
6499             ],[
6500 printf ("");
6501             ])],
6502             [
6503                   HAVE_LD_HASH_STYLE=TRUE
6504                   WITH_LINKER_HASH_STYLE=$hash_style
6505             ],
6506             [HAVE_LD_HASH_STYLE=FALSE],
6507             [HAVE_LD_HASH_STYLE=FALSE])
6508         LDFLAGS=$hash_style_ldflags_save
6509     done
6511     if test "$HAVE_LD_HASH_STYLE" = "TRUE"; then
6512         AC_MSG_RESULT( $WITH_LINKER_HASH_STYLE )
6513     else
6514         AC_MSG_RESULT( no )
6515     fi
6516     LDFLAGS=$hash_style_ldflags_save
6517 else
6518     AC_MSG_RESULT( no )
6520 AC_SUBST(HAVE_LD_HASH_STYLE)
6521 AC_SUBST(WITH_LINKER_HASH_STYLE)
6523 dnl ===================================================================
6524 dnl Check whether there's a Perl version available.
6525 dnl ===================================================================
6526 if test -z "$with_perl_home"; then
6527     AC_PATH_PROG(PERL, perl)
6528 else
6529     test "$build_os" = "cygwin" && with_perl_home=`cygpath -u "$with_perl_home"`
6530     _perl_path="$with_perl_home/bin/perl"
6531     if test -x "$_perl_path"; then
6532         PERL=$_perl_path
6533     else
6534         AC_MSG_ERROR([$_perl_path not found])
6535     fi
6538 dnl ===================================================================
6539 dnl Testing for Perl version 5 or greater.
6540 dnl $] is the Perl version variable, it is returned as an integer
6541 dnl ===================================================================
6542 if test "$PERL"; then
6543     AC_MSG_CHECKING([the Perl version])
6544     ${PERL} -e "exit($]);"
6545     _perl_version=$?
6546     if test "$_perl_version" -lt 5; then
6547         AC_MSG_ERROR([found Perl $_perl_version, use Perl 5])
6548     fi
6549     AC_MSG_RESULT([Perl $_perl_version])
6550 else
6551     AC_MSG_ERROR([Perl not found, install Perl 5])
6554 dnl ===================================================================
6555 dnl Testing for required Perl modules
6556 dnl ===================================================================
6558 AC_MSG_CHECKING([for required Perl modules])
6559 perl_use_string="use Cwd ; use Digest::MD5"
6560 if test "$_os" = "WINNT"; then
6561     if test -n "$PKGFORMAT"; then
6562         for i in $PKGFORMAT; do
6563             case "$i" in
6564             msi)
6565                 # for getting fonts versions to use in MSI
6566                 perl_use_string="$perl_use_string ; use Font::TTF::Font"
6567                 ;;
6568             esac
6569         done
6570     fi
6572 if test "$with_system_hsqldb" = "yes"; then
6573     perl_use_string="$perl_use_string ; use Archive::Zip"
6575 if test "$enable_openssl" = "yes" -a "$with_system_openssl" != "yes"; then
6576     # OpenSSL needs that to build
6577     perl_use_string="$perl_use_string ; use FindBin"
6579 if $PERL -e "$perl_use_string">/dev/null 2>&1; then
6580     AC_MSG_RESULT([all modules found])
6581 else
6582     AC_MSG_RESULT([failed to find some modules])
6583     # Find out which modules are missing.
6584     for i in $perl_use_string; do
6585         if test "$i" != "use" -a "$i" != ";"; then
6586             if ! $PERL -e "use $i;">/dev/null 2>&1; then
6587                 missing_perl_modules="$missing_perl_modules $i"
6588             fi
6589         fi
6590     done
6591     AC_MSG_ERROR([
6592     The missing Perl modules are: $missing_perl_modules
6593     Install them as superuser/administrator with "cpan -i $missing_perl_modules"])
6596 dnl ===================================================================
6597 dnl Check for pkg-config
6598 dnl ===================================================================
6599 if test "$_os" != "WINNT"; then
6600     PKG_PROG_PKG_CONFIG
6602 AC_SUBST(PKG_CONFIG)
6603 AC_SUBST(PKG_CONFIG_PATH)
6604 AC_SUBST(PKG_CONFIG_LIBDIR)
6606 if test "$_os" != "WINNT"; then
6608     # If you use CC=/path/to/compiler/foo-gcc or even CC="ccache
6609     # /path/to/compiler/foo-gcc" you need to set the AR etc env vars
6610     # explicitly. Or put /path/to/compiler in PATH yourself.
6612     toolprefix=gcc
6613     if test "$COM_IS_CLANG" = "TRUE"; then
6614         toolprefix=llvm
6615     fi
6616     AC_CHECK_TOOLS(AR,$toolprefix-ar ar)
6617     AC_CHECK_TOOLS(NM,$toolprefix-nm nm)
6618     AC_CHECK_TOOLS(RANLIB,$toolprefix-ranlib ranlib)
6619     AC_CHECK_TOOLS(OBJDUMP,$toolprefix-objdump objdump)
6620     AC_CHECK_TOOLS(READELF,$toolprefix-readelf readelf)
6621     AC_CHECK_TOOLS(STRIP,$toolprefix-strip strip)
6623 AC_SUBST(AR)
6624 AC_SUBST(NM)
6625 AC_SUBST(OBJDUMP)
6626 AC_SUBST(RANLIB)
6627 AC_SUBST(READELF)
6628 AC_SUBST(STRIP)
6630 dnl ===================================================================
6631 dnl pkg-config checks on macOS
6632 dnl ===================================================================
6634 if test $_os = Darwin; then
6635     AC_MSG_CHECKING([for bogus pkg-config])
6636     if test -n "$PKG_CONFIG"; then
6637         if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then
6638             AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG])
6639         else
6640             if test "$enable_bogus_pkg_config" = "yes"; then
6641                 AC_MSG_RESULT([yes, user-approved from unknown origin.])
6642             else
6643                 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.])
6644             fi
6645         fi
6646     else
6647         AC_MSG_RESULT([no, good])
6648     fi
6651 find_csc()
6653     # Return value: $csctest
6655     unset csctest
6657     reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client" "InstallPath"
6658     if test -n "$regvalue"; then
6659         csctest=$regvalue
6660         return
6661     fi
6664 find_al()
6666     # Return value: $altest
6668     unset altest
6670     # We need this check to detect 4.6.1 or above.
6671     for ver in 4.8.1 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1; do
6672         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver/WinSDK-NetFx40Tools" "InstallationFolder"
6673         PathFormat "$regvalue"
6674         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6675             altest=$regvalue
6676             return
6677         fi
6678     done
6680     reg_list_values_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows"
6681     for x in $reglist; do
6682         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/$x/WinSDK-NetFx40Tools" "InstallationFolder"
6683         PathFormat "$regvalue"
6684         if test -n "$regvalue" -a \( -f "$formatted_path_unix/al.exe" -o -f "$formatted_path_unix/bin/al.exe" \); then
6685             altest=$regvalue
6686             return
6687         fi
6688     done
6691 find_dotnetsdk()
6693     unset frametest
6695     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
6696         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/NETFXSDK/$ver" "KitsInstallationFolder"
6697         if test -n "$regvalue"; then
6698             frametest=$regvalue
6699             return
6700         fi
6701     done
6702     AC_MSG_ERROR([The Windows NET SDK (minimum 4.6) not found, check the installation])
6705 find_winsdk_version()
6707     # Args: $1 : SDK version as in "8.0", "8.1A" etc
6708     # Return values: $winsdktest, $winsdkbinsubdir, $winsdklibsubdir
6710     unset winsdktest winsdkbinsubdir winsdklibsubdir
6712     case "$1" in
6713     8.0|8.0A)
6714         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots" "KitsRoot"
6715         if test -n "$regvalue"; then
6716             winsdktest=$regvalue
6717             winsdklibsubdir=win8
6718             return
6719         fi
6720         ;;
6721     8.1|8.1A)
6722         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots" "KitsRoot81"
6723         if test -n "$regvalue"; then
6724             winsdktest=$regvalue
6725             winsdklibsubdir=winv6.3
6726             return
6727         fi
6728         ;;
6729     10.0)
6730         reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}" "InstallationFolder"
6731         if test -n "$regvalue"; then
6732             winsdktest=$regvalue
6733             reg_get_value_32 "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SDKs/Windows/v${1}" "ProductVersion"
6734             if test -n "$regvalue"; then
6735                 winsdkbinsubdir="$regvalue".0
6736                 winsdklibsubdir=$winsdkbinsubdir
6737                 local tmppath="$winsdktest\\Include\\$winsdklibsubdir"
6738                 PathFormat "$tmppath"
6739                 local tmppath_unix=$formatted_path_unix
6740                 # test exist the SDK path
6741                 if test ! -d "$tmppath_unix"; then
6742                    AC_MSG_ERROR([The Windows SDK not found, check the installation])
6743                 fi
6744             fi
6745             return
6746         fi
6747         ;;
6748     esac
6751 find_winsdk()
6753     # Return value: From find_winsdk_version
6755     unset winsdktest
6757     for ver in $WINDOWS_SDK_ACCEPTABLE_VERSIONS; do
6758         find_winsdk_version $ver
6759         if test -n "$winsdktest"; then
6760             return
6761         fi
6762     done
6765 find_msms()
6767     # Return value: $msmdir
6768     local version="$1"
6770     AC_MSG_CHECKING([for MSVC $version merge modules directory])
6771     local my_msm_file="Microsoft_VC${version}_CRT_x86.msm"
6772     local my_msm_dir
6774     echo "$as_me:$LINENO: searching for $my_msm_file" >&5
6776     msmdir=
6777     case "$VCVER" in
6778     16.0 | 17.0 | 17.10)
6779         for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6780             my_msm_dir="$VC_PRODUCT_DIR/redist/MSVC/$l/MergeModules/"
6781             echo "$as_me:$LINENO: looking for $my_msm_dir${my_msm_file}])" >&5
6782             if test -e "$my_msm_dir${my_msm_file}"; then
6783                 msmdir=$my_msm_dir
6784             fi
6785         done
6786         ;;
6787     esac
6789     if test -n "$msmdir"; then
6790         msmdir=`cygpath -m "$msmdir"`
6791         AC_MSG_RESULT([$msmdir])
6792     else
6793         if test "$ENABLE_RELEASE_BUILD" = "TRUE" ; then
6794             AC_MSG_FAILURE([not found])
6795         else
6796             AC_MSG_WARN([not found (check config.log)])
6797             add_warning "MSM ${my_msm_file} not found"
6798         fi
6799     fi
6802 find_msvc_x64_dlls()
6804     # Return value: $msvcdllpath, $msvcdlls
6806     AC_MSG_CHECKING([for MSVC x64 DLL path])
6808     dnl Order crtver in increasing order. Then check the directories returned by
6809     dnl ls in an inner loop; assuming they are also ordered in increasing order,
6810     dnl the result will be the highest CRT version found in the highest directory.
6812     msvcdllpath="$VC_PRODUCT_DIR/redist/x64/Microsoft.VC${VCVER}.CRT"
6813     case "$VCVER" in
6814     16.0 | 17.0 | 17.10)
6815         for crtver in 141 142 143; do
6816             for l in `ls -1 $VC_PRODUCT_DIR/redist/MSVC/`; do
6817                 echo "$as_me:$LINENO: testing $VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT" >&5
6818                 if test -d "$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"; then
6819                     msvcdllpath="$VC_PRODUCT_DIR/redist/MSVC/$l/x64/Microsoft.VC$crtver.CRT"
6820                 fi
6821             done
6822         done
6823         ;;
6824     esac
6825     AC_MSG_RESULT([$msvcdllpath])
6826     AC_MSG_CHECKING([for MSVC x64 DLLs])
6827     msvcdlls="msvcp140.dll vcruntime140.dll"
6828     for dll in $msvcdlls; do
6829         if ! test -f "$msvcdllpath/$dll"; then
6830             AC_MSG_FAILURE([missing $dll])
6831         fi
6832     done
6833     AC_MSG_RESULT([found all ($msvcdlls)])
6836 dnl =========================================
6837 dnl Check for the Windows  SDK.
6838 dnl =========================================
6839 if test "$_os" = "WINNT"; then
6840     AC_MSG_CHECKING([for Windows SDK])
6841     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6842         find_winsdk
6843         WINDOWS_SDK_HOME=$winsdktest
6845         # normalize if found
6846         if test -n "$WINDOWS_SDK_HOME"; then
6847             PathFormat "$WINDOWS_SDK_HOME"
6848             WINDOWS_SDK_HOME=$formatted_path_unix
6849         fi
6851         WINDOWS_SDK_LIB_SUBDIR=$winsdklibsubdir
6852         # The variable also contains the Windows SDK version
6853         echo $WINDOWS_SDK_LIB_SUBDIR
6854         IFS='.' read -r SDK_v1 SDK_v2 SDK_v3 SDK_v4 <<< "$WINDOWS_SDK_LIB_SUBDIR"
6855         # Assuming maximum of 5 digits for each part and ignoring last part
6856         SDK_NORMALIZED_VER=$((SDK_v1 * 10000000000 + SDK_v2 * 100000 + SDK_v3))
6857         # 10.0.20348.0 is the minimum required version
6858         if test "$SDK_NORMALIZED_VER" -lt 100000020348; then
6859             AC_MSG_ERROR([You need Windows SDK greater than or equal 10.0.20348.0])
6860         fi
6861     fi
6863     if test -n "$WINDOWS_SDK_HOME"; then
6864         # Remove a possible trailing backslash
6865         WINDOWS_SDK_HOME=`echo $WINDOWS_SDK_HOME | $SED 's/\/$//'`
6867         if test -f "$WINDOWS_SDK_HOME/Include/adoint.h" \
6868              -a -f "$WINDOWS_SDK_HOME/Include/SqlUcode.h" \
6869              -a -f "$WINDOWS_SDK_HOME/Include/usp10.h"; then
6870             have_windows_sdk_headers=yes
6871         elif test -f "$WINDOWS_SDK_HOME/Include/um/adoint.h" \
6872              -a -f "$WINDOWS_SDK_HOME/Include/um/SqlUcode.h" \
6873              -a -f "$WINDOWS_SDK_HOME/Include/um/usp10.h"; then
6874             have_windows_sdk_headers=yes
6875         elif test -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/adoint.h" \
6876              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/SqlUcode.h" \
6877              -a -f "$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um/usp10.h"; then
6878             have_windows_sdk_headers=yes
6879         else
6880             have_windows_sdk_headers=no
6881         fi
6883         if test -f "$WINDOWS_SDK_HOME/lib/user32.lib"; then
6884             have_windows_sdk_libs=yes
6885         elif test -f "$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/user32.lib"; then
6886             have_windows_sdk_libs=yes
6887         else
6888             have_windows_sdk_libs=no
6889         fi
6891         if test $have_windows_sdk_headers = no -o $have_windows_sdk_libs = no; then
6892             AC_MSG_ERROR([Some (all?) Windows SDK files not found, please check if all needed parts of
6893 the  Windows SDK are installed.])
6894         fi
6895     fi
6897     if test -z "$WINDOWS_SDK_HOME"; then
6898         AC_MSG_RESULT([no, hoping the necessary headers and libraries will be found anyway!?])
6899     elif echo $WINDOWS_SDK_HOME | grep "8.0" >/dev/null 2>/dev/null; then
6900         WINDOWS_SDK_VERSION=80
6901         AC_MSG_RESULT([found Windows SDK 8.0 ($WINDOWS_SDK_HOME)])
6902     elif echo $WINDOWS_SDK_HOME | grep "8.1" >/dev/null 2>/dev/null; then
6903         WINDOWS_SDK_VERSION=81
6904         AC_MSG_RESULT([found Windows SDK 8.1 ($WINDOWS_SDK_HOME)])
6905     elif echo $WINDOWS_SDK_HOME | grep "/10" >/dev/null 2>/dev/null; then
6906         WINDOWS_SDK_VERSION=10
6907         AC_MSG_RESULT([found Windows SDK 10.0 ($WINDOWS_SDK_HOME)])
6908     else
6909         AC_MSG_ERROR([Found legacy Windows Platform SDK ($WINDOWS_SDK_HOME)])
6910     fi
6911     PathFormat "$WINDOWS_SDK_HOME"
6912     WINDOWS_SDK_HOME="$formatted_path"
6913     WINDOWS_SDK_HOME_unix="$formatted_path_unix"
6914     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6915         SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include -I$COMPATH/Include"
6916         if test -d "$WINDOWS_SDK_HOME_unix/include/um"; then
6917             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/include/um -I$WINDOWS_SDK_HOME/include/shared"
6918         elif test -d "$WINDOWS_SDK_HOME_unix/Include/$winsdklibsubdir/um"; then
6919             SOLARINC="$SOLARINC -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/um -I$WINDOWS_SDK_HOME/Include/$winsdklibsubdir/shared"
6920         fi
6921     fi
6923     dnl TODO: solenv/bin/modules/installer/windows/msiglobal.pm wants to use a
6924     dnl WiLangId.vbs that is included only in some SDKs (e.g., included in v7.1
6925     dnl but not in v8.0), so allow this to be overridden with a
6926     dnl WINDOWS_SDK_WILANGID for now; a full-blown --with-windows-sdk-wilangid
6927     dnl and configuration error if no WiLangId.vbs is found would arguably be
6928     dnl better, but I do not know under which conditions exactly it is needed by
6929     dnl msiglobal.pm:
6930     if test -z "$WINDOWS_SDK_WILANGID" -a -n "$WINDOWS_SDK_HOME"; then
6931         WINDOWS_SDK_WILANGID_unix=$WINDOWS_SDK_HOME_unix/Samples/sysmgmt/msi/scripts/WiLangId.vbs
6932         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6933             WINDOWS_SDK_WILANGID_unix="${WINDOWS_SDK_HOME_unix}/bin/${WINDOWS_SDK_LIB_SUBDIR}/${WIN_BUILD_ARCH}/WiLangId.vbs"
6934         fi
6935         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6936             WINDOWS_SDK_WILANGID_unix=$WINDOWS_SDK_HOME_unix/bin/$WIN_BUILD_ARCH/WiLangId.vbs
6937         fi
6938         if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6939             WINDOWS_SDK_WILANGID_unix="C:/Program Files (x86)/Windows Kits/8.1/bin/$WIN_BUILD_ARCH/WiLangId.vbs"
6940         fi
6941         PathFormat "$WINDOWS_SDK_WILANGID_unix"
6942         WINDOWS_SDK_WILANGID="$formatted_path"
6943     fi
6944     if test -n "$with_lang" -a "$with_lang" != "en-US"; then
6945         if test -n "$with_package_format" -a "$with_package_format" != no; then
6946             for i in "$with_package_format"; do
6947                 if test "$i" = "msi"; then
6948                     if ! test -e "$WINDOWS_SDK_WILANGID_unix" ; then
6949                         AC_MSG_ERROR([WiLangId.vbs not found - building translated packages will fail])
6950                     fi
6951                 fi
6952             done
6953         fi
6954     fi
6956 AC_SUBST(WINDOWS_SDK_HOME)
6957 AC_SUBST(WINDOWS_SDK_LIB_SUBDIR)
6958 AC_SUBST(WINDOWS_SDK_VERSION)
6959 AC_SUBST(WINDOWS_SDK_WILANGID)
6961 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
6962     dnl Check midl.exe; this being the first check for a tool in the SDK bin
6963     dnl dir, it also determines that dir's path w/o an arch segment if any,
6964     dnl WINDOWS_SDK_BINDIR_NO_ARCH:
6965     AC_MSG_CHECKING([for midl.exe])
6967     find_winsdk
6968     PathFormat "$winsdktest"
6969     winsdktest_unix="$formatted_path_unix"
6971     if test -n "$winsdkbinsubdir" \
6972         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/midl.exe"
6973     then
6974         MIDL_PATH=$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH
6975         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin/$winsdkbinsubdir
6976     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/midl.exe"; then
6977         MIDL_PATH=$winsdktest_unix/Bin/$WIN_BUILD_ARCH
6978         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6979     elif test -f "$winsdktest_unix/Bin/midl.exe"; then
6980         MIDL_PATH=$winsdktest_unix/Bin
6981         WINDOWS_SDK_BINDIR_NO_ARCH=$WINDOWS_SDK_HOME_unix/Bin
6982     fi
6983     PathFormat "$MIDL_PATH"
6984     if test ! -f "$formatted_path_unix/midl.exe"; then
6985         AC_MSG_ERROR([midl.exe not found in $winsdktest/Bin/$WIN_BUILD_ARCH, Windows SDK installation broken?])
6986     else
6987         AC_MSG_RESULT([$MIDL_PATH/midl.exe])
6988     fi
6990     # Convert to posix path with 8.3 filename restrictions ( No spaces )
6991     MIDL_PATH=`win_short_path_for_make "$MIDL_PATH"`
6993     if test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msiinfo.exe" \
6994          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msidb.exe" \
6995          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/uuidgen.exe" \
6996          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/msitran.exe"; then :
6997     elif test -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msiinfo.exe" \
6998          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msidb.exe" \
6999          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
7000          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/msitran.exe"; then :
7001     elif test -f "$WINDOWS_SDK_HOME/bin/x86/msiinfo.exe" \
7002          -a -f "$WINDOWS_SDK_HOME/bin/x86/msidb.exe" \
7003          -a -f "$WINDOWS_SDK_BINDIR_NO_ARCH/x86/uuidgen.exe" \
7004          -a -f "$WINDOWS_SDK_HOME/bin/x86/msitran.exe"; then :
7005     else
7006         AC_MSG_ERROR([Some (all?) Windows Installer tools in the Windows SDK are missing, please install.])
7007     fi
7009     dnl Check csc.exe
7010     AC_MSG_CHECKING([for csc.exe])
7011     find_csc
7012     PathFormat "$csctest"
7013     csctest_unix="$formatted_path_unix"
7014     if test -f "$csctest_unix/csc.exe"; then
7015         CSC_PATH="$csctest"
7016     fi
7017     if test ! -f "$csctest_unix/csc.exe"; then
7018         AC_MSG_ERROR([csc.exe not found as $CSC_PATH/csc.exe])
7019     else
7020         AC_MSG_RESULT([$CSC_PATH/csc.exe])
7021     fi
7023     CSC_PATH=`win_short_path_for_make "$CSC_PATH"`
7025     dnl Check al.exe
7026     AC_MSG_CHECKING([for al.exe])
7027     if test -n "$winsdkbinsubdir" \
7028         -a -f "$winsdktest_unix/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH/al.exe"
7029     then
7030         AL_PATH="$winsdktest/Bin/$winsdkbinsubdir/$WIN_BUILD_ARCH"
7031     elif test -f "$winsdktest_unix/Bin/$WIN_BUILD_ARCH/al.exe"; then
7032         AL_PATH="$winsdktest/Bin/$WIN_BUILD_ARCH"
7033     elif test -f "$winsdktest_unix/Bin/al.exe"; then
7034         AL_PATH="$winsdktest/Bin"
7035     fi
7037     if test -z "$AL_PATH"; then
7038         find_al
7039         PathFormat "$altest"
7040         altest_unix="$formatted_path_unix"
7041         if test -f "$altest_unix/bin/al.exe"; then
7042             AL_PATH="$altest/bin"
7043         elif test -f "$altest_unix/al.exe"; then
7044             AL_PATH="$altest"
7045         fi
7046     fi
7047     PathFormat "$AL_PATH"
7048     if test ! -f "$formatted_path_unix/al.exe"; then
7049         AC_MSG_ERROR([al.exe not found as $AL_PATH/al.exe])
7050     else
7051         AC_MSG_RESULT([$AL_PATH/al.exe])
7052     fi
7054     AL_PATH=`win_short_path_for_make "$AL_PATH"`
7056     dnl Check mscoree.lib / .NET Framework dir
7057     AC_MSG_CHECKING(.NET Framework)
7058     find_dotnetsdk
7059     PathFormat "$frametest"
7060     frametest="$formatted_path_unix"
7061     if test -f "$frametest/Lib/um/$WIN_BUILD_ARCH/mscoree.lib"; then
7062         DOTNET_FRAMEWORK_HOME="$frametest"
7063     else
7064         if test -f "$winsdktest_unix/lib/mscoree.lib" -o -f "$winsdktest_unix/lib/$winsdklibsubdir/um/$WIN_BUILD_ARCH/mscoree.lib"; then
7065             DOTNET_FRAMEWORK_HOME="$winsdktest"
7066         fi
7067     fi
7068     PathFormat "$DOTNET_FRAMEWORK_HOME"
7069     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
7070         AC_MSG_ERROR([mscoree.lib not found])
7071     fi
7072     AC_MSG_RESULT([found: $DOTNET_FRAMEWORK_HOME])
7074     PathFormat "$MIDL_PATH"
7075     MIDL_PATH="$formatted_path"
7077     PathFormat "$AL_PATH"
7078     AL_PATH="$formatted_path"
7080     PathFormat "$DOTNET_FRAMEWORK_HOME"
7081     DOTNET_FRAMEWORK_HOME="$formatted_path"
7083     PathFormat "$CSC_PATH"
7084     CSC_PATH="$formatted_path"
7087 dnl ===================================================================
7088 dnl Testing for C++ compiler and version...
7089 dnl ===================================================================
7091 if test "$_os" != "WINNT"; then
7092     # AC_PROG_CXX sets CXXFLAGS to -g -O2 if not set, avoid that (and avoid -O2 during AC_PROG_CXX,
7093     # see AC_PROG_CC above):
7094     save_CXXFLAGS=$CXXFLAGS
7095     CXXFLAGS=-g
7096     AC_PROG_CXX
7097     CXXFLAGS=$save_CXXFLAGS
7098     if test -z "$CXX_BASE"; then
7099         CXX_BASE=`first_arg_basename "$CXX"`
7100     fi
7103 dnl check for GNU C++ compiler version
7104 if test "$GXX" = "yes" -a -z "$COM_IS_CLANG"; then
7105     AC_MSG_CHECKING([the GNU C++ compiler version])
7107     _gpp_version=`$CXX -dumpversion`
7108     _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
7110     if test "$_gpp_majmin" -lt "700"; then
7111         AC_MSG_ERROR([You need to use GNU C++ compiler version >= 7.0 to build LibreOffice, you have $_gpp_version.])
7112     else
7113         AC_MSG_RESULT([ok (g++ $_gpp_version)])
7114     fi
7116     dnl see https://issuetracker.google.com/issues/36962819
7117         glibcxx_threads=no
7118         AC_LANG_PUSH([C++])
7119         AC_REQUIRE_CPP
7120         AC_MSG_CHECKING([whether $CXX_BASE is broken with boost.thread])
7121         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
7122             #include <bits/c++config.h>]],[[
7123             #if !defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
7124             && !defined(_GLIBCXX__PTHREADS) \
7125             && !defined(_GLIBCXX_HAS_GTHREADS)
7126             choke me
7127             #endif
7128         ]])],[AC_MSG_RESULT([yes])
7129         glibcxx_threads=yes],[AC_MSG_RESULT([no])])
7130         AC_LANG_POP([C++])
7131         if test $glibcxx_threads = yes; then
7132             BOOST_CXXFLAGS="-D_GLIBCXX_HAS_GTHREADS"
7133         fi
7135 AC_SUBST(BOOST_CXXFLAGS)
7138 # prefx CXX with ccache if needed
7140 if test "$CCACHE" != ""; then
7141     AC_MSG_CHECKING([whether $CXX_BASE is already ccached])
7142     AC_LANG_PUSH([C++])
7143     save_CXXFLAGS=$CXXFLAGS
7144     CXXFLAGS="$CXXFLAGS --ccache-skip -O2"
7145     # msvc does not fail on unknown options, check stdout
7146     if test "$COM" = MSC; then
7147         CXXFLAGS="$CXXFLAGS -nologo"
7148     fi
7149     save_ac_cxx_werror_flag=$ac_cxx_werror_flag
7150     ac_cxx_werror_flag=yes
7151     dnl an empty program will do, we're checking the compiler flags
7152     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
7153                       [use_ccache=yes], [use_ccache=no])
7154     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
7155         AC_MSG_RESULT([yes])
7156     else
7157         CXX="$CCACHE $CXX"
7158         CXX_BASE="ccache $CXX_BASE"
7159         AC_MSG_RESULT([no])
7160     fi
7161     CXXFLAGS=$save_CXXFLAGS
7162     ac_cxx_werror_flag=$save_ac_cxx_werror_flag
7163     AC_LANG_POP([C++])
7166 dnl ===================================================================
7167 dnl Find pre-processors.(should do that _after_ messing with CC/CXX)
7168 dnl ===================================================================
7170 if test "$_os" != "WINNT"; then
7171     AC_PROG_CXXCPP
7173     dnl Check whether there's a C pre-processor.
7174     AC_PROG_CPP
7178 dnl ===================================================================
7179 dnl Find integral type sizes and alignments
7180 dnl ===================================================================
7182 if test "$_os" != "WINNT"; then
7184     AC_CHECK_SIZEOF(long)
7185     AC_CHECK_SIZEOF(short)
7186     AC_CHECK_SIZEOF(int)
7187     AC_CHECK_SIZEOF(long long)
7188     AC_CHECK_SIZEOF(double)
7189     AC_CHECK_SIZEOF(void*)
7190     AC_CHECK_SIZEOF(size_t)
7192     SAL_TYPES_SIZEOFSHORT=$ac_cv_sizeof_short
7193     SAL_TYPES_SIZEOFINT=$ac_cv_sizeof_int
7194     SAL_TYPES_SIZEOFLONG=$ac_cv_sizeof_long
7195     SAL_TYPES_SIZEOFLONGLONG=$ac_cv_sizeof_long_long
7196     SAL_TYPES_SIZEOFPOINTER=$ac_cv_sizeof_voidp
7197     SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
7199     dnl Allow build without AC_CHECK_ALIGNOF, grrr
7200     m4_pattern_allow([AC_CHECK_ALIGNOF])
7201     m4_ifdef([AC_CHECK_ALIGNOF],
7202         [
7203             AC_CHECK_ALIGNOF(short,[#include <stddef.h>])
7204             AC_CHECK_ALIGNOF(int,[#include <stddef.h>])
7205             AC_CHECK_ALIGNOF(long,[#include <stddef.h>])
7206             AC_CHECK_ALIGNOF(double,[#include <stddef.h>])
7207         ],
7208         [
7209             case "$_os-$host_cpu" in
7210             Linux-i686)
7211                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7212                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7213                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=4
7214                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=4
7215                 ;;
7216             Linux-x86_64)
7217                 test -z "$ac_cv_alignof_short" && ac_cv_alignof_short=2
7218                 test -z "$ac_cv_alignof_int" && ac_cv_alignof_int=4
7219                 test -z "$ac_cv_alignof_long" && ac_cv_alignof_long=8
7220                 test -z "$ac_cv_alignof_double" && ac_cv_alignof_double=8
7221                 ;;
7222             *)
7223                 if test -z "$ac_cv_alignof_short" -o \
7224                         -z "$ac_cv_alignof_int" -o \
7225                         -z "$ac_cv_alignof_long" -o \
7226                         -z "$ac_cv_alignof_double"; then
7227                    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.])
7228                 fi
7229                 ;;
7230             esac
7231         ])
7233     SAL_TYPES_ALIGNMENT2=$ac_cv_alignof_short
7234     SAL_TYPES_ALIGNMENT4=$ac_cv_alignof_int
7235     if test $ac_cv_sizeof_long -eq 8; then
7236         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_long
7237     elif test $ac_cv_sizeof_double -eq 8; then
7238         SAL_TYPES_ALIGNMENT8=$ac_cv_alignof_double
7239     else
7240         AC_MSG_ERROR([Cannot find alignment of 8 byte types.])
7241     fi
7243     dnl Check for large file support
7244     AC_SYS_LARGEFILE
7245     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
7246         LFS_CFLAGS="$ac_cv_sys_largefile_opts"
7247     elif test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" != "no"; then
7248         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
7249     fi
7250     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; then
7251         LFS_CFLAGS="$LFS_CFLAGS -D_LARGE_FILES"
7252     fi
7253 else
7254     # Hardcode for MSVC
7255     SAL_TYPES_SIZEOFSHORT=2
7256     SAL_TYPES_SIZEOFINT=4
7257     SAL_TYPES_SIZEOFLONG=4
7258     SAL_TYPES_SIZEOFLONGLONG=8
7259     if test $WIN_HOST_BITS -eq 32; then
7260         SAL_TYPES_SIZEOFPOINTER=4
7261         SIZEOF_SIZE_T=4
7262     else
7263         SAL_TYPES_SIZEOFPOINTER=8
7264         SIZEOF_SIZE_T=8
7265     fi
7266     SAL_TYPES_ALIGNMENT2=2
7267     SAL_TYPES_ALIGNMENT4=4
7268     SAL_TYPES_ALIGNMENT8=8
7269     LFS_CFLAGS=''
7271 AC_SUBST(LFS_CFLAGS)
7272 AC_SUBST(SIZEOF_SIZE_T)
7274 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFSHORT,$SAL_TYPES_SIZEOFSHORT)
7275 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFINT,$SAL_TYPES_SIZEOFINT)
7276 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONG,$SAL_TYPES_SIZEOFLONG)
7277 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFLONGLONG,$SAL_TYPES_SIZEOFLONGLONG)
7278 AC_DEFINE_UNQUOTED(SAL_TYPES_SIZEOFPOINTER,$SAL_TYPES_SIZEOFPOINTER)
7279 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT2,$SAL_TYPES_ALIGNMENT2)
7280 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
7281 AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
7283 dnl Calc jumbo sheets (1m+ rows) depend on 64 bit tools::Long .
7284 AC_MSG_CHECKING([whether jumbo sheets are supported])
7285 if test "$_os" != "WINNT"; then
7286     if test $SAL_TYPES_SIZEOFLONG -gt 4; then
7287         AC_MSG_RESULT([yes])
7288         ENABLE_JUMBO_SHEETS=TRUE
7289         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7290     else
7291         AC_MSG_RESULT([no])
7292     fi
7293 else
7294     if test $WIN_HOST_BITS -gt 32; then
7295         # 64bit windows is special-cased for tools::Long because long is 32bit
7296         AC_MSG_RESULT([yes])
7297         ENABLE_JUMBO_SHEETS=TRUE
7298         AC_DEFINE(HAVE_FEATURE_JUMBO_SHEETS)
7299     else
7300         AC_MSG_RESULT([no])
7301     fi
7303 AC_SUBST(ENABLE_JUMBO_SHEETS)
7305 dnl ===================================================================
7306 dnl Check whether to enable runtime optimizations
7307 dnl ===================================================================
7308 ENABLE_RUNTIME_OPTIMIZATIONS=
7309 AC_MSG_CHECKING([whether to enable runtime optimizations])
7310 if test -z "$enable_runtime_optimizations"; then
7311     for i in $CC; do
7312         case $i in
7313         -fsanitize=*)
7314             enable_runtime_optimizations=no
7315             break
7316             ;;
7317         esac
7318     done
7320 if test "$enable_runtime_optimizations" != no; then
7321     ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
7322     AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
7323     AC_MSG_RESULT([yes])
7324 else
7325     AC_MSG_RESULT([no])
7327 AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
7329 dnl ===================================================================
7330 dnl Check if valgrind headers are available
7331 dnl ===================================================================
7332 ENABLE_VALGRIND=
7333 if test "$cross_compiling" != yes -a "$with_valgrind" != no; then
7334     prev_cppflags=$CPPFLAGS
7335     # Is VALGRIND_CFLAGS something one is supposed to have in the environment,
7336     # or where does it come from?
7337     CPPFLAGS="$CPPFLAGS $VALGRIND_CFLAGS"
7338     AC_CHECK_HEADER([valgrind/valgrind.h],
7339         [ENABLE_VALGRIND=TRUE])
7340     CPPFLAGS=$prev_cppflags
7342 AC_SUBST([ENABLE_VALGRIND])
7343 if test -z "$ENABLE_VALGRIND"; then
7344     if test "$with_valgrind" = yes; then
7345         AC_MSG_ERROR([--with-valgrind specified but no Valgrind headers found])
7346     fi
7347     VALGRIND_CFLAGS=
7349 AC_SUBST([VALGRIND_CFLAGS])
7352 dnl ===================================================================
7353 dnl Check if SDT probes (for systemtap, gdb, dtrace) are available
7354 dnl ===================================================================
7356 # We need at least the sys/sdt.h include header.
7357 AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='TRUE'], [SDT_H_FOUND='FALSE'])
7358 if test "$SDT_H_FOUND" = "TRUE"; then
7359     # Found sys/sdt.h header, now make sure the c++ compiler works.
7360     # Old g++ versions had problems with probes in constructors/destructors.
7361     AC_MSG_CHECKING([working sys/sdt.h and c++ support])
7362     AC_LANG_PUSH([C++])
7363     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7364     #include <sys/sdt.h>
7365     class ProbeClass
7366     {
7367     private:
7368       int& ref;
7369       const char *name;
7371     public:
7372       ProbeClass(int& v, const char *n) : ref(v), name(n)
7373       {
7374         DTRACE_PROBE2(_test_, cons, name, ref);
7375       }
7377       void method(int min)
7378       {
7379         DTRACE_PROBE3(_test_, meth, name, ref, min);
7380         ref -= min;
7381       }
7383       ~ProbeClass()
7384       {
7385         DTRACE_PROBE2(_test_, dest, name, ref);
7386       }
7387     };
7388     ]],[[
7389     int i = 64;
7390     DTRACE_PROBE1(_test_, call, i);
7391     ProbeClass inst = ProbeClass(i, "call");
7392     inst.method(24);
7393     ]])], [AC_MSG_RESULT([yes]); AC_DEFINE([USE_SDT_PROBES])],
7394           [AC_MSG_RESULT([no, sdt.h or c++ compiler too old])])
7395     AC_LANG_POP([C++])
7397 AC_CONFIG_HEADERS([config_host/config_probes.h])
7399 dnl ===================================================================
7400 dnl GCC features
7401 dnl ===================================================================
7402 HAVE_GCC_STACK_CLASH_PROTECTION=
7403 HARDENING_CFLAGS=
7404 HARDENING_OPT_CFLAGS=
7405 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7406     AC_MSG_CHECKING([whether $CC_BASE supports -grecord-gcc-switches])
7407     save_CFLAGS=$CFLAGS
7408     CFLAGS="$CFLAGS -Werror -grecord-gcc-switches"
7409     AC_LINK_IFELSE(
7410         [AC_LANG_PROGRAM(, [[return 0;]])],
7411         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -grecord-gcc-switches"],
7412         [AC_MSG_RESULT([no])])
7413     CFLAGS=$save_CFLAGS
7415     AC_MSG_CHECKING([whether $CC_BASE supports -D_FORTIFY_SOURCE=2])
7416     save_CFLAGS=$CFLAGS
7417     CFLAGS="$CFLAGS -Werror -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"
7418     if test "$ENABLE_OPTIMIZED" = TRUE; then
7419         CFLAGS="$CFLAGS -O2"
7420     fi
7421     AC_LINK_IFELSE(
7422         [AC_LANG_PROGRAM([[#include <string.h>]], [[return 0;]])],
7423         [AC_MSG_RESULT([yes]); HARDENING_OPT_CFLAGS="$HARDENING_OPT_CFLAGS -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"],
7424         [AC_MSG_RESULT([no])])
7425     CFLAGS=$save_CFLAGS
7427     AC_MSG_CHECKING([whether $CC_BASE supports -D_GLIBCXX_ASSERTIONS])
7428     save_CFLAGS=$CFLAGS
7429     CFLAGS="$CFLAGS -Werror -Wp,-D_GLIBCXX_ASSERTIONS"
7430     AC_LINK_IFELSE(
7431         [AC_LANG_PROGRAM(, [[return 0;]])],
7432         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"],
7433         [AC_MSG_RESULT([no])])
7434     CFLAGS=$save_CFLAGS
7436     AC_MSG_CHECKING([whether $CC_BASE supports -fstack-clash-protection])
7437     save_CFLAGS=$CFLAGS
7438     CFLAGS="$CFLAGS -Werror -fstack-clash-protection"
7439     AC_LINK_IFELSE(
7440         [AC_LANG_PROGRAM(, [[return 0;]])],
7441         [AC_MSG_RESULT([yes]); HAVE_GCC_STACK_CLASH_PROTECTION=TRUE; HARDENING_CFLAGS="$HARDENING_CFLAGS -fstack-clash-protection"],
7442         [AC_MSG_RESULT([no])])
7443     CFLAGS=$save_CFLAGS
7445     AC_MSG_CHECKING([whether $CC_BASE supports -fcf-protection])
7446     save_CFLAGS=$CFLAGS
7447     CFLAGS="$CFLAGS -Werror -fcf-protection"
7448     AC_LINK_IFELSE(
7449         [AC_LANG_PROGRAM(, [[return 0;]])],
7450         [AC_MSG_RESULT([yes]); HARDENING_CFLAGS="$HARDENING_CFLAGS -fcf-protection"],
7451         [AC_MSG_RESULT([no])])
7452     CFLAGS=$save_CFLAGS
7454     AC_MSG_CHECKING([whether $CC_BASE supports -mno-avx])
7455     save_CFLAGS=$CFLAGS
7456     CFLAGS="$CFLAGS -Werror -mno-avx"
7457     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_AVX=TRUE ],[])
7458     CFLAGS=$save_CFLAGS
7459     if test "$HAVE_GCC_AVX" = "TRUE"; then
7460         AC_MSG_RESULT([yes])
7461     else
7462         AC_MSG_RESULT([no])
7463     fi
7465     AC_MSG_CHECKING([whether $CC_BASE supports atomic functions])
7466     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
7467     int v = 0;
7468     if (__sync_add_and_fetch(&v, 1) != 1 ||
7469         __sync_sub_and_fetch(&v, 1) != 0)
7470         return 1;
7471     __sync_synchronize();
7472     if (__sync_val_compare_and_swap(&v, 0, 1) != 0 ||
7473         v != 1)
7474         return 1;
7475     return 0;
7476 ]])],[HAVE_GCC_BUILTIN_ATOMIC=TRUE],[])
7477     if test "$HAVE_GCC_BUILTIN_ATOMIC" = "TRUE"; then
7478         AC_MSG_RESULT([yes])
7479         AC_DEFINE(HAVE_GCC_BUILTIN_ATOMIC)
7480     else
7481         AC_MSG_RESULT([no])
7482     fi
7484     AC_MSG_CHECKING([whether $CXX_BASE defines __base_class_type_info in cxxabi.h])
7485     AC_LANG_PUSH([C++])
7486     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7487             #include <cstddef>
7488             #include <cxxabi.h>
7489             std::size_t f() { return sizeof(__cxxabiv1::__base_class_type_info); }
7490         ])], [
7491             AC_DEFINE([HAVE_CXXABI_H_BASE_CLASS_TYPE_INFO],[1])
7492             AC_MSG_RESULT([yes])
7493         ], [AC_MSG_RESULT([no])])
7494     AC_LANG_POP([C++])
7496     AC_MSG_CHECKING([whether $CXX_BASE defines __class_type_info in cxxabi.h])
7497     AC_LANG_PUSH([C++])
7498     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7499             #include <cstddef>
7500             #include <cxxabi.h>
7501             std::size_t f() { return sizeof(__cxxabiv1::__class_type_info); }
7502         ])], [
7503             AC_DEFINE([HAVE_CXXABI_H_CLASS_TYPE_INFO],[1])
7504             AC_MSG_RESULT([yes])
7505         ], [AC_MSG_RESULT([no])])
7506     AC_LANG_POP([C++])
7508     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_allocate_exception in cxxabi.h])
7509     AC_LANG_PUSH([C++])
7510     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7511             #include <cxxabi.h>
7512             void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
7513         ])], [
7514             AC_DEFINE([HAVE_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
7515             AC_MSG_RESULT([yes])
7516         ], [AC_MSG_RESULT([no])])
7517     AC_LANG_POP([C++])
7519     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_eh_globals in cxxabi.h])
7520     AC_LANG_PUSH([C++])
7521     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7522             #include <cstddef>
7523             #include <cxxabi.h>
7524             std::size_t f() { return sizeof(__cxxabiv1::__cxa_eh_globals); }
7525         ])], [
7526             AC_DEFINE([HAVE_CXXABI_H_CXA_EH_GLOBALS],[1])
7527             AC_MSG_RESULT([yes])
7528         ], [AC_MSG_RESULT([no])])
7529     AC_LANG_POP([C++])
7531     AC_MSG_CHECKING([whether $CXX_BASE defines __cxa_exception in cxxabi.h])
7532     AC_LANG_PUSH([C++])
7533     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7534             #include <cstddef>
7535             #include <cxxabi.h>
7536             std::size_t f() { return sizeof(__cxxabiv1::__cxa_exception); }
7537         ])], [
7538             AC_DEFINE([HAVE_CXXABI_H_CXA_EXCEPTION],[1])
7539             AC_MSG_RESULT([yes])
7540         ], [AC_MSG_RESULT([no])])
7541     AC_LANG_POP([C++])
7543     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_get_globals in cxxabi.h])
7544     AC_LANG_PUSH([C++])
7545     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7546             #include <cxxabi.h>
7547             void * f() { return __cxxabiv1::__cxa_get_globals(); }
7548         ])], [
7549             AC_DEFINE([HAVE_CXXABI_H_CXA_GET_GLOBALS],[1])
7550             AC_MSG_RESULT([yes])
7551         ], [AC_MSG_RESULT([no])])
7552     AC_LANG_POP([C++])
7554     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_current_exception_type in cxxabi.h])
7555     AC_LANG_PUSH([C++])
7556     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7557             #include <cxxabi.h>
7558             void * f() { return __cxxabiv1::__cxa_current_exception_type(); }
7559         ])], [
7560             AC_DEFINE([HAVE_CXXABI_H_CXA_CURRENT_EXCEPTION_TYPE],[1])
7561             AC_MSG_RESULT([yes])
7562         ], [AC_MSG_RESULT([no])])
7563     AC_LANG_POP([C++])
7565     AC_MSG_CHECKING([whether $CXX_BASE declares __cxa_throw in cxxabi.h])
7566     AC_LANG_PUSH([C++])
7567     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7568             #include <cxxabi.h>
7569             void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
7570         ])], [
7571             AC_DEFINE([HAVE_CXXABI_H_CXA_THROW],[1])
7572             AC_MSG_RESULT([yes])
7573         ], [AC_MSG_RESULT([no])])
7574     AC_LANG_POP([C++])
7576     AC_MSG_CHECKING([whether $CXX_BASE defines __si_class_type_info in cxxabi.h])
7577     AC_LANG_PUSH([C++])
7578     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7579             #include <cstddef>
7580             #include <cxxabi.h>
7581             std::size_t f() { return sizeof(__cxxabiv1::__si_class_type_info); }
7582         ])], [
7583             AC_DEFINE([HAVE_CXXABI_H_SI_CLASS_TYPE_INFO],[1])
7584             AC_MSG_RESULT([yes])
7585         ], [AC_MSG_RESULT([no])])
7586     AC_LANG_POP([C++])
7588     AC_MSG_CHECKING([whether $CXX_BASE defines __vmi_class_type_info in cxxabi.h])
7589     AC_LANG_PUSH([C++])
7590     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7591             #include <cstddef>
7592             #include <cxxabi.h>
7593             std::size_t f() { return sizeof(__cxxabiv1::__vmi_class_type_info); }
7594         ])], [
7595             AC_DEFINE([HAVE_CXXABI_H_VMI_CLASS_TYPE_INFO],[1])
7596             AC_MSG_RESULT([yes])
7597         ], [AC_MSG_RESULT([no])])
7598     AC_LANG_POP([C++])
7601 AC_SUBST(HAVE_GCC_AVX)
7602 AC_SUBST(HAVE_GCC_BUILTIN_ATOMIC)
7603 AC_SUBST(HAVE_GCC_STACK_CLASH_PROTECTION)
7604 AC_SUBST(HARDENING_CFLAGS)
7605 AC_SUBST(HARDENING_OPT_CFLAGS)
7607 dnl ===================================================================
7608 dnl Identify the C++ library
7609 dnl ===================================================================
7611 AC_MSG_CHECKING([what the C++ library is])
7612 HAVE_LIBSTDCPP=
7613 HAVE_LIBCPP=
7614 AC_LANG_PUSH([C++])
7615 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7616 #include <utility>
7617 #ifndef __GLIBCXX__
7618 foo bar
7619 #endif
7620 ]])],
7621     [CPP_LIBRARY=GLIBCXX
7622      cpp_library_name="GNU libstdc++"
7623      HAVE_LIBSTDCPP=TRUE
7624     ],
7625     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7626 #include <utility>
7627 #ifndef _LIBCPP_VERSION
7628 foo bar
7629 #endif
7630 ]])],
7631     [CPP_LIBRARY=LIBCPP
7632      cpp_library_name="LLVM libc++"
7633      AC_DEFINE([HAVE_LIBCPP])
7634      HAVE_LIBCPP=TRUE
7635     ],
7636     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7637 #include <utility>
7638 #ifndef _MSC_VER
7639 foo bar
7640 #endif
7641 ]])],
7642     [CPP_LIBRARY=MSVCRT
7643      cpp_library_name="Microsoft"
7644     ],
7645     AC_MSG_ERROR([Could not figure out what C++ library this is]))))
7646 AC_MSG_RESULT([$cpp_library_name])
7647 AC_LANG_POP([C++])
7648 AC_SUBST([HAVE_LIBSTDCPP])
7649 AC_SUBST([HAVE_LIBCPP])
7651 if test -z "${LIBCPP_DEBUG+x}" -a -z "$CROSS_COMPILING" -a -n "$HAVE_LIBCPP" -a -n "$ENABLE_DBGUTIL"
7652 then
7653     # Libc++ has two levels of debug mode, assertions mode enabled with -D_LIBCPP_DEBUG=0,
7654     # and actual debug mode enabled with -D_LIBCPP_DEBUG=1 (and starting with LLVM15
7655     # assertions mode will be separate and controlled by -D_LIBCPP_ENABLE_ASSERTIONS=1,
7656     # although there will be backwards compatibility).
7657     # Debug mode is supported by libc++ only if built for it, e.g. Mac libc++ isn't,
7658     # and there would be undefined references to debug functions.
7659     # Moreover std::to_string() has a bug (https://reviews.llvm.org/D125184).
7660     # So check if debug mode can be used and disable or downgrade it to assertions
7661     # if needed.
7662     AC_MSG_CHECKING([if libc++ has a usable debug mode])
7663     AC_LANG_PUSH([C++])
7664     libcpp_debug_links=
7665     AC_LINK_IFELSE([AC_LANG_SOURCE([[
7666 #define _LIBCPP_DEBUG 0 // only assertions
7667 #include <vector>
7668 int main()
7670     std::vector<int> v;
7671     v.push_back( 1 );
7672     return v[ 3 ];
7674 ]])], [libcpp_debug_links=1])
7675     if test -n "$libcpp_debug_links"; then
7676         # we can use at least assertions, check if debug mode works
7677         AC_RUN_IFELSE([AC_LANG_SOURCE([[
7678 #define _LIBCPP_DEBUG 1 // debug mode
7679 #include <string>
7680 #include <vector>
7681 int foo(const std::vector<int>& v) { return *v.begin(); }
7682 int main()
7684     std::vector<int> v;
7685     v.push_back( 1 );
7686     std::string s = "xxxxxxxxxxxxxxxxxxxxxxxxx" + std::to_string(10);
7687     return (foo(v) + s.size()) != 0 ? 0 : 1;
7689 ]])],
7690         [AC_MSG_RESULT(yes)
7691          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=1
7692         ],
7693         [AC_MSG_RESULT(no, using only assertions)
7694          LIBCPP_DEBUG=-D_LIBCPP_DEBUG=0
7695         ]
7696         )
7697     else
7698         AC_MSG_RESULT(no)
7699     fi
7700     AC_LANG_POP([C++])
7702 AC_SUBST([LIBCPP_DEBUG])
7704 dnl ===================================================================
7705 dnl Check for gperf
7706 dnl ===================================================================
7707 AC_PATH_PROG(GPERF, gperf)
7708 if test -z "$GPERF"; then
7709     AC_MSG_ERROR([gperf not found but needed. Install it.])
7711 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
7712     GPERF=`cygpath -m $GPERF`
7714 AC_MSG_CHECKING([whether gperf is new enough])
7715 my_gperf_ver1=$($GPERF --version | head -n 1)
7716 my_gperf_ver2=${my_gperf_ver1#GNU gperf }
7717 my_gperf_ver3=$(printf %s "$my_gperf_ver2" | $AWK -F. '{ print $1*100+($2<100?$2:99) }')
7718 if test "$my_gperf_ver3" -ge 301; then
7719     AC_MSG_RESULT([yes ($my_gperf_ver2)])
7720 else
7721     AC_MSG_ERROR(["$my_gperf_ver1" is too old or unrecognized, must be at least gperf 3.1])
7723 AC_SUBST(GPERF)
7725 dnl ===================================================================
7726 dnl Check for system libcmis
7727 dnl ===================================================================
7728 libo_CHECK_SYSTEM_MODULE([libcmis],[LIBCMIS],[libcmis-0.6 >= 0.6.1],enabled)
7730 dnl ===================================================================
7731 dnl C++11
7732 dnl ===================================================================
7734 if test -z "${CXXFLAGS_CXX11+x}"; then
7735     AC_MSG_CHECKING([whether $CXX_BASE supports C++20])
7736     if test "$COM" = MSC -a "$COM_IS_CLANG" != TRUE; then
7737         if test "$with_latest_c__" = yes; then
7738             CXXFLAGS_CXX11=-std:c++latest
7739         else
7740             CXXFLAGS_CXX11=-std:c++20
7741         fi
7742         CXXFLAGS_CXX11="$CXXFLAGS_CXX11 -permissive- -Zc:__cplusplus,preprocessor"
7743     elif test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
7744         my_flags='-std=c++20 -std=c++2a'
7745         if test "$with_latest_c__" = yes; then
7746             my_flags="-std=c++26 -std=c++2c -std=c++23 -std=c++2b $my_flags"
7747         fi
7748         for flag in $my_flags; do
7749             if test "$COM" = MSC; then
7750                 flag="-Xclang $flag"
7751             fi
7752             save_CXXFLAGS=$CXXFLAGS
7753             CXXFLAGS="$CXXFLAGS $flag -Werror"
7754             AC_LANG_PUSH([C++])
7755             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7756                 #include <algorithm>
7757                 #include <functional>
7758                 #include <vector>
7760                 void f(std::vector<int> & v, std::function<bool(int, int)> fn) {
7761                     std::sort(v.begin(), v.end(), fn);
7762                 }
7763                 ]])],[CXXFLAGS_CXX11=$flag])
7764             AC_LANG_POP([C++])
7765             CXXFLAGS=$save_CXXFLAGS
7766             if test -n "$CXXFLAGS_CXX11"; then
7767                 break
7768             fi
7769         done
7770     fi
7771     if test -n "$CXXFLAGS_CXX11"; then
7772         AC_MSG_RESULT([yes ($CXXFLAGS_CXX11)])
7773     else
7774         AC_MSG_ERROR(no)
7775     fi
7777 AC_SUBST(CXXFLAGS_CXX11)
7779 if test "$GCC" = "yes"; then
7780     save_CXXFLAGS=$CXXFLAGS
7781     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7782     CHECK_L_ATOMIC
7783     CXXFLAGS=$save_CXXFLAGS
7784     AC_SUBST(ATOMIC_LIB)
7787 AC_MSG_CHECKING([whether $CXX_BASE supports C++11 without Language Defect 757])
7788 save_CXXFLAGS=$CXXFLAGS
7789 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7790 AC_LANG_PUSH([C++])
7792 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
7793 #include <stddef.h>
7795 template <typename T, size_t S> char (&sal_n_array_size( T(&)[S] ))[S];
7797 namespace
7799         struct b
7800         {
7801                 int i;
7802                 int j;
7803         };
7805 ]], [[
7806 struct a
7808         int i;
7809         int j;
7811 a thinga[]={{0,0}, {1,1}};
7812 b thingb[]={{0,0}, {1,1}};
7813 size_t i = sizeof(sal_n_array_size(thinga));
7814 size_t j = sizeof(sal_n_array_size(thingb));
7815 return !(i != 0 && j != 0);
7817     ], [ AC_MSG_RESULT(yes) ],
7818     [ AC_MSG_ERROR(no)])
7819 AC_LANG_POP([C++])
7820 CXXFLAGS=$save_CXXFLAGS
7822 HAVE_GCC_FNO_SIZED_DEALLOCATION=
7823 if test "$GCC" = yes; then
7824     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-sized-deallocation])
7825     AC_LANG_PUSH([C++])
7826     save_CXXFLAGS=$CXXFLAGS
7827     CXXFLAGS="$CXXFLAGS -fno-sized-deallocation"
7828     AC_LINK_IFELSE([AC_LANG_PROGRAM()],[HAVE_GCC_FNO_SIZED_DEALLOCATION=TRUE])
7829     CXXFLAGS=$save_CXXFLAGS
7830     AC_LANG_POP([C++])
7831     if test "$HAVE_GCC_FNO_SIZED_DEALLOCATION" = TRUE; then
7832         AC_MSG_RESULT([yes])
7833     else
7834         AC_MSG_RESULT([no])
7835     fi
7837 AC_SUBST([HAVE_GCC_FNO_SIZED_DEALLOCATION])
7839 AC_MSG_CHECKING([whether $CXX_BASE supports C++2a constinit sorted vectors])
7840 AC_LANG_PUSH([C++])
7841 save_CXXFLAGS=$CXXFLAGS
7842 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7843 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7844         #include <algorithm>
7845         #include <initializer_list>
7846         #include <vector>
7847         template<typename T> class S {
7848         private:
7849             std::vector<T> v_;
7850         public:
7851             constexpr S(std::initializer_list<T> i): v_(i) { std::sort(v_.begin(), v_.end()); }
7852         };
7853         constinit S<int> s{3, 2, 1};
7854     ])], [
7855         AC_DEFINE([HAVE_CPP_CONSTINIT_SORTED_VECTOR],[1])
7856         AC_MSG_RESULT([yes])
7857     ], [AC_MSG_RESULT([no])])
7858 CXXFLAGS=$save_CXXFLAGS
7859 AC_LANG_POP([C++])
7861 AC_MSG_CHECKING([whether $CXX_BASE implements C++ DR P1155R3])
7862 AC_LANG_PUSH([C++])
7863 save_CXXFLAGS=$CXXFLAGS
7864 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7865 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7866         struct S1 { S1(S1 &&); };
7867         struct S2: S1 {};
7868         S1 f(S2 s) { return s; }
7869     ])], [
7870         AC_DEFINE([HAVE_P1155R3],[1])
7871         AC_MSG_RESULT([yes])
7872     ], [AC_MSG_RESULT([no])])
7873 CXXFLAGS=$save_CXXFLAGS
7874 AC_LANG_POP([C++])
7876 AC_MSG_CHECKING([whether $CXX_BASE supports C++20 std::atomic_ref])
7877 HAVE_CXX20_ATOMIC_REF=
7878 AC_LANG_PUSH([C++])
7879 save_CXXFLAGS=$CXXFLAGS
7880 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
7881 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
7882         #include <atomic>
7883         int x;
7884         std::atomic_ref<int> y(x);
7885     ])], [
7886         HAVE_CXX20_ATOMIC_REF=TRUE
7887         AC_MSG_RESULT([yes])
7888     ], [AC_MSG_RESULT([no])])
7889 CXXFLAGS=$save_CXXFLAGS
7890 AC_LANG_POP([C++])
7891 AC_SUBST([HAVE_CXX20_ATOMIC_REF])
7893 dnl Supported since GCC 9 and Clang 10 (which each also started to support -Wdeprecated-copy, but
7894 dnl which is included in -Wextra anyway):
7895 HAVE_WDEPRECATED_COPY_DTOR=
7896 if test "$GCC" = yes; then
7897     AC_MSG_CHECKING([whether $CXX_BASE supports -Wdeprecated-copy-dtor])
7898     AC_LANG_PUSH([C++])
7899     save_CXXFLAGS=$CXXFLAGS
7900     CXXFLAGS="$CXXFLAGS -Werror -Wdeprecated-copy-dtor"
7901     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
7902             HAVE_WDEPRECATED_COPY_DTOR=TRUE
7903             AC_MSG_RESULT([yes])
7904         ], [AC_MSG_RESULT([no])])
7905     CXXFLAGS=$save_CXXFLAGS
7906     AC_LANG_POP([C++])
7908 AC_SUBST([HAVE_WDEPRECATED_COPY_DTOR])
7910 dnl At least GCC 8.2 with -O2 (i.e., --enable-optimized) causes a false-positive -Wmaybe-
7911 dnl uninitialized warning for code like
7913 dnl   OString f();
7914 dnl   boost::optional<OString> * g(bool b) {
7915 dnl       boost::optional<OString> o;
7916 dnl       if (b) o = f();
7917 dnl       return new boost::optional<OString>(o);
7918 dnl   }
7920 dnl (as is e.g. present, in a slightly more elaborate form, in
7921 dnl librdf_TypeConverter::extractNode_NoLock in unoxml/source/rdf/librdf_repository.cxx); the below
7922 dnl code is meant to be a faithfully stripped-down and self-contained version of the above code:
7923 HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=
7924 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7925     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=maybe-uninitialized])
7926     AC_LANG_PUSH([C++])
7927     save_CXXFLAGS=$CXXFLAGS
7928     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wmaybe-uninitialized"
7929     if test "$ENABLE_OPTIMIZED" = TRUE; then
7930         CXXFLAGS="$CXXFLAGS -O2"
7931     else
7932         CXXFLAGS="$CXXFLAGS -O0"
7933     fi
7934     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7935             #include <new>
7936             void f1(int);
7937             struct S1 {
7938                 ~S1() { f1(n); }
7939                 int n = 0;
7940             };
7941             struct S2 {
7942                 S2() {}
7943                 S2(S2 const & s) { if (s.init) set(*reinterpret_cast<S1 const *>(s.stg)); }
7944                 ~S2() { if (init) reinterpret_cast<S1 *>(stg)->S1::~S1(); }
7945                 void set(S1 s) {
7946                     new (stg) S1(s);
7947                     init = true;
7948                 }
7949                 bool init = false;
7950                 char stg[sizeof (S1)];
7951             } ;
7952             S1 f2();
7953             S2 * f3(bool b) {
7954                 S2 o;
7955                 if (b) o.set(f2());
7956                 return new S2(o);
7957             }
7958         ]])], [AC_MSG_RESULT([no])], [
7959             HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=TRUE
7960             AC_MSG_RESULT([yes])
7961         ])
7962     CXXFLAGS=$save_CXXFLAGS
7963     AC_LANG_POP([C++])
7965 AC_SUBST([HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED])
7967 dnl Check for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c5> "[8/9/10/11 Regression]
7968 dnl -Wstringop-overflow false positive due to using MEM_REF type of &MEM" (fixed in GCC 11), which
7969 dnl hits us e.g. with GCC 10 and --enable-optimized at
7971 dnl   In file included from include/rtl/string.hxx:49,
7972 dnl                    from include/rtl/ustring.hxx:43,
7973 dnl                    from include/osl/file.hxx:35,
7974 dnl                    from include/codemaker/global.hxx:28,
7975 dnl                    from include/codemaker/options.hxx:23,
7976 dnl                    from codemaker/source/commoncpp/commoncpp.cxx:24:
7977 dnl   In function â€˜char* rtl::addDataHelper(char*, const char*, std::size_t)’,
7978 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,
7979 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,
7980 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,
7981 dnl       inlined from â€˜rtl::OString codemaker::cpp::scopedCppName(const rtl::OString&, bool)’ at codemaker/source/commoncpp/commoncpp.cxx:53:55:
7982 dnl   include/rtl/stringconcat.hxx:78:15: error: writing 2 bytes into a region of size 1 [-Werror=stringop-overflow=]
7983 dnl      78 |         memcpy( buffer, data, length );
7984 dnl         |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
7985 HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=
7986 if test "$GCC" = yes && test "$COM_IS_CLANG" != TRUE; then
7987     AC_MSG_CHECKING([whether $CXX_BASE might report false -Werror=stringop-overflow=])
7988     AC_LANG_PUSH([C++])
7989     save_CXXFLAGS=$CXXFLAGS
7990     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 -Werror -Wstringop-overflow"
7991     if test "$ENABLE_OPTIMIZED" = TRUE; then
7992         CXXFLAGS="$CXXFLAGS -O2"
7993     else
7994         CXXFLAGS="$CXXFLAGS -O0"
7995     fi
7996     dnl Test code taken from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87296#c0>:
7997     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
7998             void fill(char const * begin, char const * end, char c);
7999             struct q {
8000                 char ids[4];
8001                 char username[6];
8002             };
8003             void test(q & c) {
8004                 fill(c.ids, c.ids + sizeof(c.ids), '\0');
8005                 __builtin_strncpy(c.username, "root", sizeof(c.username));
8006             }
8007         ]])], [AC_MSG_RESULT([no])], [
8008             HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW=TRUE
8009             AC_MSG_RESULT([yes])
8010         ])
8011     CXXFLAGS=$save_CXXFLAGS
8012     AC_LANG_POP([C++])
8014 AC_SUBST([HAVE_BROKEN_GCC_WSTRINGOP_OVERFLOW])
8016 HAVE_DLLEXPORTINLINES=
8017 if test "$_os" = "WINNT"; then
8018     AC_MSG_CHECKING([whether $CXX_BASE supports -Zc:dllexportInlines-])
8019     AC_LANG_PUSH([C++])
8020     save_CXXFLAGS=$CXXFLAGS
8021     CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
8022     AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
8023             HAVE_DLLEXPORTINLINES=TRUE
8024             AC_MSG_RESULT([yes])
8025         ], [AC_MSG_RESULT([no])])
8026     CXXFLAGS=$save_CXXFLAGS
8027     AC_LANG_POP([C++])
8029 AC_SUBST([HAVE_DLLEXPORTINLINES])
8031 dnl ===================================================================
8032 dnl CPU Intrinsics support - SSE, AVX
8033 dnl ===================================================================
8035 CXXFLAGS_INTRINSICS_SSE2=
8036 CXXFLAGS_INTRINSICS_SSSE3=
8037 CXXFLAGS_INTRINSICS_SSE41=
8038 CXXFLAGS_INTRINSICS_SSE42=
8039 CXXFLAGS_INTRINSICS_AVX=
8040 CXXFLAGS_INTRINSICS_AVX2=
8041 CXXFLAGS_INTRINSICS_AVX512=
8042 CXXFLAGS_INTRINSICS_AVX512F=
8043 CXXFLAGS_INTRINSICS_F16C=
8044 CXXFLAGS_INTRINSICS_FMA=
8046 if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then
8047     # GCC, Clang or Clang-cl (clang-cl + MSVC's -arch options don't work well together)
8048     flag_sse2=-msse2
8049     flag_ssse3=-mssse3
8050     flag_sse41=-msse4.1
8051     flag_sse42=-msse4.2
8052     flag_avx=-mavx
8053     flag_avx2=-mavx2
8054     flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
8055     flag_avx512f=-mavx512f
8056     flag_f16c=-mf16c
8057     flag_fma=-mfma
8058 else
8059     # With MSVC using -arch is in fact not necessary for being able
8060     # to use CPU intrinsics, code using AVX512F intrinsics will compile
8061     # even if compiled with -arch:AVX, the -arch option really only affects
8062     # instructions generated for C/C++ code.
8063     # So use the matching same (or lower) -arch options, but only in order
8064     # to generate the best matching instructions for the C++ code surrounding
8065     # the intrinsics.
8066     # SSE2 is the default for x86/x64, so no need to specify the option.
8067     flag_sse2=
8068     # No specific options for these, use the next lower.
8069     flag_ssse3="$flag_sse2"
8070     flag_sse41="$flag_sse2"
8071     flag_sse42="$flag_sse2"
8072     flag_avx=-arch:AVX
8073     flag_avx2=-arch:AVX2
8074     flag_avx512=-arch:AVX512
8075     # Using -arch:AVX512 would enable more than just AVX512F, so use only AVX2.
8076     flag_avx512f=-arch:AVX2
8077     # No MSVC options for these.
8078     flag_f16c="$flag_sse2"
8079     flag_fma="$flag_sse2"
8082 AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
8083 AC_LANG_PUSH([C++])
8084 save_CXXFLAGS=$CXXFLAGS
8085 CXXFLAGS="$CXXFLAGS $flag_sse2"
8086 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8087     #include <emmintrin.h>
8088     int main () {
8089         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8090         c = _mm_xor_si128 (a, b);
8091         return 0;
8092     }
8093     ])],
8094     [can_compile_sse2=yes],
8095     [can_compile_sse2=no])
8096 AC_LANG_POP([C++])
8097 CXXFLAGS=$save_CXXFLAGS
8098 AC_MSG_RESULT([${can_compile_sse2}])
8099 if test "${can_compile_sse2}" = "yes" ; then
8100     CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
8103 AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
8104 AC_LANG_PUSH([C++])
8105 save_CXXFLAGS=$CXXFLAGS
8106 CXXFLAGS="$CXXFLAGS $flag_ssse3"
8107 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8108     #include <tmmintrin.h>
8109     int main () {
8110         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8111         c = _mm_maddubs_epi16 (a, b);
8112         return 0;
8113     }
8114     ])],
8115     [can_compile_ssse3=yes],
8116     [can_compile_ssse3=no])
8117 AC_LANG_POP([C++])
8118 CXXFLAGS=$save_CXXFLAGS
8119 AC_MSG_RESULT([${can_compile_ssse3}])
8120 if test "${can_compile_ssse3}" = "yes" ; then
8121     CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
8124 AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
8125 AC_LANG_PUSH([C++])
8126 save_CXXFLAGS=$CXXFLAGS
8127 CXXFLAGS="$CXXFLAGS $flag_sse41"
8128 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8129     #include <smmintrin.h>
8130     int main () {
8131         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8132         c = _mm_cmpeq_epi64 (a, b);
8133         return 0;
8134     }
8135     ])],
8136     [can_compile_sse41=yes],
8137     [can_compile_sse41=no])
8138 AC_LANG_POP([C++])
8139 CXXFLAGS=$save_CXXFLAGS
8140 AC_MSG_RESULT([${can_compile_sse41}])
8141 if test "${can_compile_sse41}" = "yes" ; then
8142     CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
8145 AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
8146 AC_LANG_PUSH([C++])
8147 save_CXXFLAGS=$CXXFLAGS
8148 CXXFLAGS="$CXXFLAGS $flag_sse42"
8149 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8150     #include <nmmintrin.h>
8151     int main () {
8152         __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
8153         c = _mm_cmpgt_epi64 (a, b);
8154         return 0;
8155     }
8156     ])],
8157     [can_compile_sse42=yes],
8158     [can_compile_sse42=no])
8159 AC_LANG_POP([C++])
8160 CXXFLAGS=$save_CXXFLAGS
8161 AC_MSG_RESULT([${can_compile_sse42}])
8162 if test "${can_compile_sse42}" = "yes" ; then
8163     CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
8166 AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
8167 AC_LANG_PUSH([C++])
8168 save_CXXFLAGS=$CXXFLAGS
8169 CXXFLAGS="$CXXFLAGS $flag_avx"
8170 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8171     #include <immintrin.h>
8172     int main () {
8173         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
8174         c = _mm256_xor_ps(a, b);
8175         return 0;
8176     }
8177     ])],
8178     [can_compile_avx=yes],
8179     [can_compile_avx=no])
8180 AC_LANG_POP([C++])
8181 CXXFLAGS=$save_CXXFLAGS
8182 AC_MSG_RESULT([${can_compile_avx}])
8183 if test "${can_compile_avx}" = "yes" ; then
8184     CXXFLAGS_INTRINSICS_AVX="$flag_avx"
8187 AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
8188 AC_LANG_PUSH([C++])
8189 save_CXXFLAGS=$CXXFLAGS
8190 CXXFLAGS="$CXXFLAGS $flag_avx2"
8191 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8192     #include <immintrin.h>
8193     int main () {
8194         __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
8195         c = _mm256_maddubs_epi16(a, b);
8196         return 0;
8197     }
8198     ])],
8199     [can_compile_avx2=yes],
8200     [can_compile_avx2=no])
8201 AC_LANG_POP([C++])
8202 CXXFLAGS=$save_CXXFLAGS
8203 AC_MSG_RESULT([${can_compile_avx2}])
8204 if test "${can_compile_avx2}" = "yes" ; then
8205     CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
8208 AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
8209 AC_LANG_PUSH([C++])
8210 save_CXXFLAGS=$CXXFLAGS
8211 CXXFLAGS="$CXXFLAGS $flag_avx512"
8212 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8213     #include <immintrin.h>
8214     int main () {
8215         __m512i a = _mm512_loadu_si512(0);
8216         __m512d v1 = _mm512_load_pd(0);
8217         // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
8218         __m512d v2 = _mm512_abs_pd(v1);
8219         return 0;
8220     }
8221     ])],
8222     [can_compile_avx512=yes],
8223     [can_compile_avx512=no])
8224 AC_LANG_POP([C++])
8225 CXXFLAGS=$save_CXXFLAGS
8226 AC_MSG_RESULT([${can_compile_avx512}])
8227 if test "${can_compile_avx512}" = "yes" ; then
8228     CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
8229     CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
8232 AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
8233 AC_LANG_PUSH([C++])
8234 save_CXXFLAGS=$CXXFLAGS
8235 CXXFLAGS="$CXXFLAGS $flag_f16c"
8236 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8237     #include <immintrin.h>
8238     int main () {
8239         __m128i a = _mm_set1_epi32 (0);
8240         __m128 c;
8241         c = _mm_cvtph_ps(a);
8242         return 0;
8243     }
8244     ])],
8245     [can_compile_f16c=yes],
8246     [can_compile_f16c=no])
8247 AC_LANG_POP([C++])
8248 CXXFLAGS=$save_CXXFLAGS
8249 AC_MSG_RESULT([${can_compile_f16c}])
8250 if test "${can_compile_f16c}" = "yes" ; then
8251     CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
8254 AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
8255 AC_LANG_PUSH([C++])
8256 save_CXXFLAGS=$CXXFLAGS
8257 CXXFLAGS="$CXXFLAGS $flag_fma"
8258 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
8259     #include <immintrin.h>
8260     int main () {
8261         __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
8262         d = _mm256_fmadd_ps(a, b, c);
8263         return 0;
8264     }
8265     ])],
8266     [can_compile_fma=yes],
8267     [can_compile_fma=no])
8268 AC_LANG_POP([C++])
8269 CXXFLAGS=$save_CXXFLAGS
8270 AC_MSG_RESULT([${can_compile_fma}])
8271 if test "${can_compile_fma}" = "yes" ; then
8272     CXXFLAGS_INTRINSICS_FMA="$flag_fma"
8275 AC_SUBST([CXXFLAGS_INTRINSICS_SSE2])
8276 AC_SUBST([CXXFLAGS_INTRINSICS_SSSE3])
8277 AC_SUBST([CXXFLAGS_INTRINSICS_SSE41])
8278 AC_SUBST([CXXFLAGS_INTRINSICS_SSE42])
8279 AC_SUBST([CXXFLAGS_INTRINSICS_AVX])
8280 AC_SUBST([CXXFLAGS_INTRINSICS_AVX2])
8281 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512])
8282 AC_SUBST([CXXFLAGS_INTRINSICS_AVX512F])
8283 AC_SUBST([CXXFLAGS_INTRINSICS_F16C])
8284 AC_SUBST([CXXFLAGS_INTRINSICS_FMA])
8286 dnl ===================================================================
8287 dnl system stl sanity tests
8288 dnl ===================================================================
8289 if test "$_os" != "WINNT"; then
8291     AC_LANG_PUSH([C++])
8293     save_CPPFLAGS="$CPPFLAGS"
8294     if test -n "$MACOSX_SDK_PATH"; then
8295         CPPFLAGS="-isysroot $MACOSX_SDK_PATH $CPPFLAGS"
8296     fi
8298     # Assume visibility is not broken with libc++. The below test is very much designed for libstdc++
8299     # only.
8300     if test "$CPP_LIBRARY" = GLIBCXX; then
8301         dnl gcc#19664, gcc#22482, rhbz#162935
8302         AC_MSG_CHECKING([if STL headers are visibility safe (GCC bug 22482)])
8303         AC_EGREP_HEADER(visibility push, string, stlvisok=yes, stlvisok=no)
8304         AC_MSG_RESULT([$stlvisok])
8305         if test "$stlvisok" = "no"; then
8306             AC_MSG_ERROR([Your libstdc++ headers are not visibility safe. This is no longer supported.])
8307         fi
8308     fi
8310     # As the below test checks things when linking self-compiled dynamic libraries, it presumably is irrelevant
8311     # when we don't make any dynamic libraries?
8312     if test "$DISABLE_DYNLOADING" = ""; then
8313         AC_MSG_CHECKING([if $CXX_BASE is -fvisibility-inlines-hidden safe (Clang bug 11250)])
8314         cat > conftestlib1.cc <<_ACEOF
8315 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8316 struct S2: S1<int> { virtual ~S2(); };
8317 S2::~S2() {}
8318 _ACEOF
8319         cat > conftestlib2.cc <<_ACEOF
8320 template<typename T> struct S1 { virtual ~S1() {} virtual void f() {} };
8321 struct S2: S1<int> { virtual ~S2(); };
8322 struct S3: S2 { virtual ~S3(); }; S3::~S3() {}
8323 _ACEOF
8324         gccvisinlineshiddenok=yes
8325         if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib1.cc -o libconftest1$DLLPOST >/dev/null 2>&5; then
8326             gccvisinlineshiddenok=no
8327         else
8328             dnl At least Clang -fsanitize=address and -fsanitize=undefined are
8329             dnl known to not work with -z defs (unsetting which makes the test
8330             dnl moot, though):
8331             my_linkflagsnoundefs=$LINKFLAGSNOUNDEFS
8332             if test "$COM_IS_CLANG" = TRUE; then
8333                 for i in $CXX $CXXFLAGS; do
8334                     case $i in
8335                     -fsanitize=*)
8336                         my_linkflagsnoundefs=
8337                         break
8338                         ;;
8339                     esac
8340                 done
8341             fi
8342             if ! $CXX $CXXFLAGS $CPPFLAGS $LINKFLAGSSHL -fPIC -fvisibility-inlines-hidden conftestlib2.cc -L. -lconftest1 $my_linkflagsnoundefs -o libconftest2$DLLPOST >/dev/null 2>&5; then
8343                 gccvisinlineshiddenok=no
8344             fi
8345         fi
8347         rm -fr libconftest*
8348         AC_MSG_RESULT([$gccvisinlineshiddenok])
8349         if test "$gccvisinlineshiddenok" = "no"; then
8350             AC_MSG_ERROR([Your gcc/clang is not -fvisibility-inlines-hidden safe. This is no longer supported.])
8351         fi
8352     fi
8354    AC_MSG_CHECKING([if $CXX_BASE has a visibility bug with class-level attributes (GCC bug 26905)])
8355     cat >visibility.cxx <<_ACEOF
8356 #pragma GCC visibility push(hidden)
8357 struct __attribute__ ((visibility ("default"))) TestStruct {
8358   static void Init();
8360 __attribute__ ((visibility ("default"))) void TestFunc() {
8361   TestStruct::Init();
8363 _ACEOF
8364     if ! $CXX $CXXFLAGS $CPPFLAGS -fpic -S visibility.cxx; then
8365         gccvisbroken=yes
8366     else
8367         case "$host_cpu" in
8368         i?86|x86_64)
8369             if test "$_os" = "Darwin" -o "$_os" = "iOS"; then
8370                 gccvisbroken=no
8371             else
8372                 if $EGREP -q '@PLT|@GOT' visibility.s || test "$ENABLE_LTO" = "TRUE"; then
8373                     gccvisbroken=no
8374                 else
8375                     gccvisbroken=yes
8376                 fi
8377             fi
8378             ;;
8379         *)
8380             gccvisbroken=no
8381             ;;
8382         esac
8383     fi
8384     rm -f visibility.s visibility.cxx
8386     AC_MSG_RESULT([$gccvisbroken])
8387     if test "$gccvisbroken" = "yes"; then
8388         AC_MSG_ERROR([Your gcc is not -fvisibility=hidden safe. This is no longer supported.])
8389     fi
8391     CPPFLAGS="$save_CPPFLAGS"
8393     AC_MSG_CHECKING([if CET endbranch is recognized])
8394 cat > endbr.s <<_ACEOF
8395 endbr32
8396 _ACEOF
8397     HAVE_ASM_END_BRANCH_INS_SUPPORT=
8398     if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
8399         AC_MSG_RESULT([yes])
8400         HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
8401     else
8402         AC_MSG_RESULT([no])
8403     fi
8404     rm -f endbr.s endbr.o
8405     AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
8407     AC_LANG_POP([C++])
8410 dnl ===================================================================
8411 dnl  Clang++ tests
8412 dnl ===================================================================
8414 HAVE_GCC_FNO_ENFORCE_EH_SPECS=
8415 if test "$GCC" = "yes"; then
8416     AC_MSG_CHECKING([whether $CXX_BASE supports -fno-enforce-eh-specs])
8417     AC_LANG_PUSH([C++])
8418     save_CXXFLAGS=$CXXFLAGS
8419     CXXFLAGS="$CFLAGS -Werror -fno-enforce-eh-specs"
8420     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ return 0; ]])],[ HAVE_GCC_FNO_ENFORCE_EH_SPECS=TRUE ],[])
8421     CXXFLAGS=$save_CXXFLAGS
8422     AC_LANG_POP([C++])
8423     if test "$HAVE_GCC_FNO_ENFORCE_EH_SPECS" = "TRUE"; then
8424         AC_MSG_RESULT([yes])
8425     else
8426         AC_MSG_RESULT([no])
8427     fi
8429 AC_SUBST(HAVE_GCC_FNO_ENFORCE_EH_SPECS)
8431 dnl ===================================================================
8432 dnl Compiler plugins
8433 dnl ===================================================================
8435 COMPILER_PLUGINS=
8436 # currently only Clang
8438 if test "$COM_IS_CLANG" != "TRUE"; then
8439     if test "$libo_fuzzed_enable_compiler_plugins" = yes -a "$enable_compiler_plugins" = yes; then
8440         AC_MSG_NOTICE([Resetting --enable-compiler-plugins=no])
8441         enable_compiler_plugins=no
8442     fi
8445 COMPILER_PLUGINS_COM_IS_CLANG=
8446 if test "$COM_IS_CLANG" = "TRUE"; then
8447     if test -n "$enable_compiler_plugins"; then
8448         compiler_plugins="$enable_compiler_plugins"
8449     elif test -n "$ENABLE_DBGUTIL"; then
8450         compiler_plugins=test
8451     else
8452         compiler_plugins=no
8453     fi
8454     if test "$compiler_plugins" != no -a "$my_apple_clang" != yes; then
8455         if test "$CLANGVER" -lt 120001; then
8456             if test "$compiler_plugins" = yes; then
8457                 AC_MSG_ERROR(
8458                     [Clang $CLANGVER is too old to build compiler plugins; need >= 12.0.1.])
8459             else
8460                 compiler_plugins=no
8461             fi
8462         fi
8463     fi
8464     if test "$compiler_plugins" != "no"; then
8465         dnl The prefix where Clang resides, override to where Clang resides if
8466         dnl using a source build:
8467         if test -z "$CLANGDIR"; then
8468             CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $(printf '%s\n' $CXX | grep clang | head -n 1)))))
8469         fi
8470         # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
8471         if test -z "$COMPILER_PLUGINS_CXX"; then
8472             COMPILER_PLUGINS_CXX=[$(echo $CXX | sed -e 's/-fsanitize=[^ ]*//g')]
8473         fi
8474         clangbindir=$CLANGDIR/bin
8475         if test "$build_os" = "cygwin"; then
8476             clangbindir=$(cygpath -u "$clangbindir")
8477         fi
8478         AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],"$clangbindir" $PATH)
8479         if test -n "$LLVM_CONFIG"; then
8480             COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
8481             COMPILER_PLUGINS_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
8482             if test -z "$CLANGLIBDIR"; then
8483                 CLANGLIBDIR=$($LLVM_CONFIG --libdir)
8484             fi
8485             # Try if clang is built from source (in which case its includes are not together with llvm includes).
8486             # src-root is [llvm-toplevel-src-dir]/llvm, clang is [llvm-toplevel-src-dir]/clang
8487             if $LLVM_CONFIG --src-root >/dev/null 2>&1; then
8488                 clangsrcdir=$(dirname $($LLVM_CONFIG --src-root))
8489                 if test -n "$clangsrcdir" -a -d "$clangsrcdir" -a -d "$clangsrcdir/clang/include"; then
8490                     COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangsrcdir/clang/include"
8491                 fi
8492             fi
8493             # obj-root is [llvm-toplevel-obj-dir]/, clang is [llvm-toplevel-obj-dir]/tools/clang
8494             clangobjdir=$($LLVM_CONFIG --obj-root)
8495             if test -n "$clangobjdir" -a -d "$clangobjdir" -a -d "$clangobjdir/tools/clang/include"; then
8496                 COMPILER_PLUGINS_CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS -I$clangobjdir/tools/clang/include"
8497             fi
8498         fi
8499         AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
8500         AC_LANG_PUSH([C++])
8501         save_CXX=$CXX
8502         save_CXXCPP=$CXXCPP
8503         save_CPPFLAGS=$CPPFLAGS
8504         save_CXXFLAGS=$CXXFLAGS
8505         save_LDFLAGS=$LDFLAGS
8506         save_LIBS=$LIBS
8507         CXX=$COMPILER_PLUGINS_CXX
8508         CXXCPP="$COMPILER_PLUGINS_CXX -E"
8509         CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8510         CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
8511         AC_CHECK_HEADER(clang/Basic/SourceLocation.h,
8512             [COMPILER_PLUGINS=TRUE],
8513             [
8514             if test "$compiler_plugins" = "yes"; then
8515                 AC_MSG_ERROR([Cannot find Clang headers to build compiler plugins.])
8516             else
8517                 AC_MSG_WARN([Cannot find Clang headers to build compiler plugins, plugins disabled])
8518                 add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
8519             fi
8520             ])
8521         dnl TODO: Windows doesn't use LO_CLANG_SHARED_PLUGINS for now, see corresponding TODO
8522         dnl comment in compilerplugins/Makefile-clang.mk:
8523         if test -n "$COMPILER_PLUGINS" && test "$_os" != "WINNT"; then
8524             LDFLAGS=""
8525             AC_MSG_CHECKING([for clang libraries to use])
8526             if test -z "$CLANGTOOLLIBS"; then
8527                 LIBS="-lclang-cpp $COMPILER_PLUGINS_LINKFLAGS"
8528                 AC_LINK_IFELSE([
8529                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8530                         [[ clang::FullSourceLoc().dump(); ]])
8531                 ],[CLANGTOOLLIBS="$LIBS"],[])
8532             fi
8533             dnl If the above check for the combined -lclang-cpp failed, fall back to a hand-curated
8534             dnl list of individual -lclang* (but note that that list can become outdated over time,
8535             dnl see e.g. the since-reverted 5078591de9a0e65ca560a4f1913e90dfe95f66bf "CLANGTOOLLIBS
8536             dnl needs to include -lclangSupport now"):
8537             if test -z "$CLANGTOOLLIBS"; then
8538                 LIBS="-lclangTooling -lclangFrontend -lclangDriver -lclangParse -lclangSema -lclangEdit \
8539  -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_LINKFLAGS"
8540                 AC_LINK_IFELSE([
8541                     AC_LANG_PROGRAM([[#include "clang/Basic/SourceLocation.h"]],
8542                         [[ clang::FullSourceLoc().dump(); ]])
8543                 ],[CLANGTOOLLIBS="$LIBS"],[])
8544             fi
8545             AC_MSG_RESULT([$CLANGTOOLLIBS])
8546             if test -z "$CLANGTOOLLIBS"; then
8547                 if test "$compiler_plugins" = "yes"; then
8548                     AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
8549                 else
8550                     AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
8551                     add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
8552                 fi
8553                 COMPILER_PLUGINS=
8554             fi
8555             if test -n "$COMPILER_PLUGINS"; then
8556                 if test -z "$CLANGSYSINCLUDE"; then
8557                     if test -n "$LLVM_CONFIG"; then
8558                         # Path to the clang system headers (no idea if there's a better way to get it).
8559                         CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/git\|svn//')/include
8560                     fi
8561                 fi
8562             fi
8563         fi
8564         CXX=$save_CXX
8565         CXXCPP=$save_CXXCPP
8566         CPPFLAGS=$save_CPPFLAGS
8567         CXXFLAGS=$save_CXXFLAGS
8568         LDFLAGS=$save_LDFLAGS
8569         LIBS="$save_LIBS"
8570         AC_LANG_POP([C++])
8572         AC_MSG_CHECKING([whether the compiler for building compilerplugins is actually Clang])
8573         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
8574             #ifndef __clang__
8575             you lose
8576             #endif
8577             int foo=42;
8578             ]])],
8579             [AC_MSG_RESULT([yes])
8580              COMPILER_PLUGINS_COM_IS_CLANG=TRUE],
8581             [AC_MSG_RESULT([no])])
8582         AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8583     fi
8584 else
8585     if test "$enable_compiler_plugins" = "yes"; then
8586         AC_MSG_ERROR([Compiler plugins are currently supported only with the Clang compiler.])
8587     fi
8589 COMPILER_PLUGINS_ANALYZER_PCH=
8590 if test "$enable_compiler_plugins_analyzer_pch" != no; then
8591     COMPILER_PLUGINS_ANALYZER_PCH=TRUE
8593 AC_SUBST(COMPILER_PLUGINS)
8594 AC_SUBST(COMPILER_PLUGINS_ANALYZER_PCH)
8595 AC_SUBST(COMPILER_PLUGINS_COM_IS_CLANG)
8596 AC_SUBST(COMPILER_PLUGINS_CXX)
8597 AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
8598 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
8599 AC_SUBST(COMPILER_PLUGINS_DEBUG)
8600 AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
8601 AC_SUBST(CLANGDIR)
8602 AC_SUBST(CLANGLIBDIR)
8603 AC_SUBST(CLANGTOOLLIBS)
8604 AC_SUBST(CLANGSYSINCLUDE)
8606 # Plugin to help linker.
8607 # Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.
8608 # This makes --enable-lto build with clang work.
8609 AC_SUBST(LD_PLUGIN)
8611 AC_CHECK_FUNCS(posix_fallocate, HAVE_POSIX_FALLOCATE=YES, [HAVE_POSIX_FALLOCATE=NO])
8612 AC_SUBST(HAVE_POSIX_FALLOCATE)
8614 JITC_PROCESSOR_TYPE=""
8615 if test "$_os" = "Linux" -a "$host_cpu" = "powerpc"; then
8616     # IBMs JDK needs this...
8617     JITC_PROCESSOR_TYPE=6
8618     export JITC_PROCESSOR_TYPE
8620 AC_SUBST([JITC_PROCESSOR_TYPE])
8622 # Misc Windows Stuff
8623 AC_ARG_WITH(ucrt-dir,
8624     AS_HELP_STRING([--with-ucrt-dir],
8625         [path to the directory with the arch-specific MSU packages of the Windows Universal CRT redistributables
8626         (MS KB 2999226) for packaging into the installsets (without those the target system needs to install
8627         the UCRT or Visual C++ Runtimes manually). The directory must contain the following 6 files:
8628             Windows6.1-KB2999226-x64.msu
8629             Windows6.1-KB2999226-x86.msu
8630             Windows8.1-KB2999226-x64.msu
8631             Windows8.1-KB2999226-x86.msu
8632             Windows8-RT-KB2999226-x64.msu
8633             Windows8-RT-KB2999226-x86.msu
8634         A zip archive including those files is available from Microsoft site:
8635         https://www.microsoft.com/en-us/download/details.aspx?id=48234]),
8638 UCRT_REDISTDIR="$with_ucrt_dir"
8639 if test $_os = "WINNT"; then
8640     find_msvc_x64_dlls
8641     MSVC_DLL_PATH=`win_short_path_for_make "$msvcdllpath"`
8642     MSVC_DLLS="$msvcdlls"
8643     if echo "$msvcdllpath" | grep -q "VC143.CRT$"; then
8644         with_redist=143
8645     elif echo "$msvcdllpath" | grep -q "VC142.CRT$"; then
8646         with_redist=142
8647     elif echo "$msvcdllpath" | grep -q "VC141.CRT$"; then
8648         with_redist=141
8649     fi
8650     for i in $PKGFORMAT; do
8651         if test "$i" = msi; then
8652             find_msms "$with_redist"
8653             if test -n "$msmdir"; then
8654                 MSM_PATH=`win_short_path_for_make "$msmdir"`
8655                 SCPDEFS="$SCPDEFS -DWITH_VC_REDIST=$with_redist"
8656             fi
8657             break
8658         fi
8659     done
8661     if test "$UCRT_REDISTDIR" = "no"; then
8662         dnl explicitly disabled
8663         UCRT_REDISTDIR=""
8664     else
8665         PathFormat "$UCRT_REDISTDIR"
8666         UCRT_REDISTDIR="$formatted_path"
8667         UCRT_REDISTDIR_unix="$formatted_path_unix"
8668         if ! test -f "$UCRT_REDISTDIR_unix/Windows6.1-KB2999226-x64.msu" -a \
8669                   -f "$UCRT_REDISTDIR_unix/Windows6.1-KB2999226-x86.msu" -a \
8670                   -f "$UCRT_REDISTDIR_unix/Windows8.1-KB2999226-x64.msu" -a \
8671                   -f "$UCRT_REDISTDIR_unix/Windows8.1-KB2999226-x86.msu" -a \
8672                   -f "$UCRT_REDISTDIR_unix/Windows8-RT-KB2999226-x64.msu" -a \
8673                   -f "$UCRT_REDISTDIR_unix/Windows8-RT-KB2999226-x86.msu"; then
8674             UCRT_REDISTDIR=""
8675             if test -n "$PKGFORMAT"; then
8676                for i in $PKGFORMAT; do
8677                    case "$i" in
8678                    msi)
8679                        AC_MSG_WARN([--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency])
8680                        add_warning "--without-ucrt-dir not specified or MSUs not found - installer will have runtime dependency"
8681                        ;;
8682                    esac
8683                done
8684             fi
8685         fi
8686     fi
8689 AC_SUBST(UCRT_REDISTDIR)
8690 AC_SUBST(MSVC_DLL_PATH)
8691 AC_SUBST(MSVC_DLLS)
8692 AC_SUBST(MSM_PATH)
8695 dnl ===================================================================
8696 dnl Checks for Java
8697 dnl ===================================================================
8698 if test "$ENABLE_JAVA" != ""; then
8700     # Windows-specific tests
8701     if test "$build_os" = "cygwin"; then
8702         if test -z "$with_jdk_home"; then
8703             dnl See <https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-EEED398E-AE37-4D12-
8704             dnl AB10-49F82F720027> section "Windows Registry Key Changes":
8705             reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK" "CurrentVersion"
8706             if test -n "$regvalue"; then
8707                 ver=$regvalue
8708                 reg_get_value "$WIN_HOST_BITS" "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JDK/$ver" "JavaHome"
8709                 with_jdk_home=$regvalue
8710             fi
8711             howfound="found automatically"
8712         else
8713             howfound="you passed"
8714         fi
8715         PathFormat "$with_jdk_home"
8716         with_jdk_home="$formatted_path_unix"
8718         if ! test -f "$with_jdk_home/lib/jvm.lib" -a -f "$with_jdk_home/bin/java.exe"; then
8719             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])
8720         fi
8721         with_java="java.exe"
8722         javacompiler="javac.exe"
8723         javadoc="javadoc.exe"
8724     fi
8726     # 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.
8727     # /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java, but /usr does not contain the JDK libraries
8728     if test -z "$with_jdk_home" -a "$_os" = "Darwin" -a -x /usr/libexec/java_home; then
8729         with_jdk_home=`/usr/libexec/java_home`
8730     fi
8732     JAVA_HOME=; export JAVA_HOME
8733     if test -z "$with_jdk_home"; then
8734         AC_PATH_PROG(JAVAINTERPRETER, $with_java)
8735     else
8736         _java_path="$with_jdk_home/bin/$with_java"
8737         dnl Check if there is a Java interpreter at all.
8738         if test -x "$_java_path"; then
8739             JAVAINTERPRETER=$_java_path
8740         else
8741             AC_MSG_ERROR([$_java_path not found, pass --with-jdk-home])
8742         fi
8743     fi
8745     dnl Check that the JDK found is correct architecture (at least 2 reasons to
8746     dnl check: officebean needs to link -ljawt, and libjpipe.so needs to be
8747     dnl loaded by java to run JunitTests:
8748     if test "$build_os" = "cygwin" -a "$cross_compiling" != "yes"; then
8749         shortjdkhome=`cygpath -d "$with_jdk_home"`
8750         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
8751             AC_MSG_WARN([You are building 64-bit binaries but the JDK $howfound is 32-bit])
8752             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8753         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
8754             AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8755             AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8756         fi
8758         if test x`echo "$JAVAINTERPRETER" | $GREP -i '\.exe$'` = x; then
8759             JAVAINTERPRETER="${JAVAINTERPRETER}.exe"
8760         fi
8761         JAVAINTERPRETER=`win_short_path_for_make "$JAVAINTERPRETER"`
8762     elif test "$cross_compiling" != "yes"; then
8763         case $CPUNAME in
8764             AARCH64|AXP|X86_64|IA64|POWERPC64|S390X|SPARC64|MIPS64|RISCV64|LOONGARCH64)
8765                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" = "" >/dev/null; then
8766                     AC_MSG_WARN([You are building 64-bit binaries but the JDK $JAVAINTERPRETER is 32-bit])
8767                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a 64-bit JDK])
8768                 fi
8769                 ;;
8770             *) # assumption: everything else 32-bit
8771                 if test -f "$JAVAINTERPRETER" -a "`$JAVAINTERPRETER -version 2>&1 | $GREP -i 64-bit`" != ""  >/dev/null; then
8772                     AC_MSG_WARN([You are building 32-bit binaries but the JDK $howfound is 64-bit])
8773                     AC_MSG_ERROR([You should pass the --with-jdk-home option pointing to a (32-bit) JDK])
8774                 fi
8775                 ;;
8776         esac
8777     fi
8780 dnl ===================================================================
8781 dnl Checks for JDK.
8782 dnl ===================================================================
8784 # Whether all the complexity here actually is needed any more or not, no idea.
8786 JDK_SECURITYMANAGER_DISALLOWED=
8787 MODULAR_JAVA=
8788 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8789     _gij_longver=0
8790     AC_MSG_CHECKING([the installed JDK])
8791     if test -n "$JAVAINTERPRETER"; then
8792         dnl java -version sends output to stderr!
8793         if test `$JAVAINTERPRETER -version 2>&1 | $GREP -c "Kaffe"` -gt 0; then
8794             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8795         elif test `$JAVAINTERPRETER --version 2>&1 | $GREP -c "GNU libgcj"` -gt 0; then
8796             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8797         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "BEA"` -gt 0; then
8798             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8799         elif test `$JAVAINTERPRETER -version 2>&1 | $AWK '{ print }' | $GREP -c "IBM"` -gt 0; then
8800             AC_MSG_ERROR([No valid check available. Please check the block for your desired java in configure.ac])
8801         else
8802             JDK=sun
8804             dnl Sun JDK specific tests
8805             _jdk=`$JAVAINTERPRETER -version 2>&1 | $AWK -F'"' '{ print \$2 }' | $SED '/^$/d' | $SED s/[[-A-Za-z]]*//`
8806             _jdk_ver=`echo "$_jdk" | $AWK -F. '{ print (($1 * 100) + $2) * 100 + $3;}'`
8808             if test "$_jdk_ver" -lt 10800; then
8809                 AC_MSG_ERROR([JDK is too old, you need at least 8 ($_jdk_ver < 10800)])
8810             fi
8811             dnl TODO: Presumably, the Security Manager will not merely be disallowed, but be
8812             dnl completely removed in some Java version > 18 (see
8813             dnl <https://openjdk.java.net/jeps/411> "Deprecate the Security Manager for Removal"):
8814             if test "$_jdk_ver" -ge 180000; then
8815                 JDK_SECURITYMANAGER_DISALLOWED=TRUE
8816             fi
8818             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*java,,p"`
8819             if test "$_os" = "WINNT"; then
8820                 JAVA_HOME=`echo $JAVA_HOME | $SED "s,\.[[eE]][[xX]][[eE]]$,,"`
8821             fi
8822             AC_MSG_RESULT([found $JAVA_HOME (JDK $_jdk)])
8824             dnl Check whether the build Java supports modules
8825             if test "$_jdk_ver" -ge 90000; then
8826                 MODULAR_JAVA=TRUE
8827             else
8828                 AC_MSG_WARN([Modular jars will not be built. They need at least Java 9 ($_jdk_ver < 90000)])
8829                 add_warning "Modular jars will not be built. They need at least Java 9 ($_jdk_ver < 90000)"
8830             fi
8832             # set to limit VM usage for JunitTests
8833             JAVAIFLAGS=-Xmx64M
8834             # set to limit VM usage for javac
8835             JAVACFLAGS=-J-Xmx128M
8836         fi
8837     else
8838         AC_MSG_ERROR([Java not found. You need at least JDK 8])
8839     fi
8840 else
8841     if test -z "$ENABLE_JAVA"; then
8842         dnl Java disabled
8843         JAVA_HOME=
8844         export JAVA_HOME
8845     elif test "$cross_compiling" = "yes"; then
8846         # Just assume compatibility of build and host JDK
8847         JDK=$JDK_FOR_BUILD
8848         JAVAIFLAGS=$JAVAIFLAGS_FOR_BUILD
8849     fi
8852 dnl ===================================================================
8853 dnl Checks for javac
8854 dnl ===================================================================
8855 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8856     : ${JAVA_SOURCE_VER=8}
8857     : ${JAVA_TARGET_VER=8}
8858     if test -z "$with_jdk_home"; then
8859         AC_PATH_PROG(JAVACOMPILER, $javacompiler)
8860     else
8861         _javac_path="$with_jdk_home/bin/$javacompiler"
8862         dnl Check if there is a Java compiler at all.
8863         if test -x "$_javac_path"; then
8864             JAVACOMPILER=$_javac_path
8865         fi
8866     fi
8867     if test -z "$JAVACOMPILER"; then
8868         AC_MSG_ERROR([$javacompiler not found set with_jdk_home])
8869     fi
8870     if test "$build_os" = "cygwin"; then
8871         if test x`echo "$JAVACOMPILER" | $GREP -i '\.exe$'` = x; then
8872             JAVACOMPILER="${JAVACOMPILER}.exe"
8873         fi
8874         JAVACOMPILER=`win_short_path_for_make "$JAVACOMPILER"`
8875     fi
8878 dnl ===================================================================
8879 dnl Checks for javadoc
8880 dnl ===================================================================
8881 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
8882     if test -z "$with_jdk_home"; then
8883         AC_PATH_PROG(JAVADOC, $javadoc)
8884     else
8885         _javadoc_path="$with_jdk_home/bin/$javadoc"
8886         dnl Check if there is a javadoc at all.
8887         if test -x "$_javadoc_path"; then
8888             JAVADOC=$_javadoc_path
8889         else
8890             AC_PATH_PROG(JAVADOC, $javadoc)
8891         fi
8892     fi
8893     if test -z "$JAVADOC"; then
8894         AC_MSG_ERROR([$_javadoc_path not found set with_jdk_home])
8895     fi
8896     if test "$build_os" = "cygwin"; then
8897         if test x`echo "$JAVADOC" | $GREP -i '\.exe$'` = x; then
8898             JAVADOC="${JAVADOC}.exe"
8899         fi
8900         JAVADOC=`win_short_path_for_make "$JAVADOC"`
8901     fi
8903     if test `$JAVADOC --version 2>&1 | $GREP -c "gjdoc"` -gt 0; then
8904     JAVADOCISGJDOC="yes"
8905     fi
8907 AC_SUBST(JAVADOC)
8908 AC_SUBST(JAVADOCISGJDOC)
8910 if test "$ENABLE_JAVA" != "" -a \( "$cross_compiling" != "yes" -o -n "$with_jdk_home" \); then
8911     # check if JAVA_HOME was (maybe incorrectly?) set automatically to /usr
8912     if test "$JAVA_HOME" = "/usr" -a "x$with_jdk_home" = "x"; then
8913         if basename $(readlink $(readlink $JAVACOMPILER)) >/dev/null 2>/dev/null; then
8914            # try to recover first by looking whether we have an alternative
8915            # system as in Debian or newer SuSEs where following /usr/bin/javac
8916            # over /etc/alternatives/javac leads to the right bindir where we
8917            # just need to strip a bit away to get a valid JAVA_HOME
8918            JAVA_HOME=$(readlink $(readlink $JAVACOMPILER))
8919         elif readlink $JAVACOMPILER >/dev/null 2>/dev/null; then
8920             # maybe only one level of symlink (e.g. on Mac)
8921             JAVA_HOME=$(readlink $JAVACOMPILER)
8922             if test "$(dirname $JAVA_HOME)" = "."; then
8923                 # we've got no path to trim back
8924                 JAVA_HOME=""
8925             fi
8926         else
8927             # else warn
8928             AC_MSG_WARN([JAVA_HOME is set to /usr - this is very likely to be incorrect])
8929             AC_MSG_WARN([if this is the case, please inform the correct JAVA_HOME with --with-jdk-home])
8930             add_warning "JAVA_HOME is set to /usr - this is very likely to be incorrect"
8931             add_warning "if this is the case, please inform the correct JAVA_HOME with --with-jdk-home"
8932         fi
8933         dnl now that we probably have the path to the real javac, make a JAVA_HOME out of it...
8934         if test "$JAVA_HOME" != "/usr"; then
8935             if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8936                 dnl Leopard returns a non-suitable path with readlink - points to "Current" only
8937                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/Current/Commands/javac$,/CurrentJDK/Home,)
8938                 dnl Tiger already returns a JDK path...
8939                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/CurrentJDK/Commands/javac$,/CurrentJDK/Home,)
8940             else
8941                 JAVA_HOME=$(echo $JAVA_HOME | $SED -e s,/bin/javac$,,)
8942                 dnl check that we have a directory as certain distros eg gentoo substitute javac for a script
8943                 dnl that checks which version to run
8944                 if test -f "$JAVA_HOME"; then
8945                     JAVA_HOME=""; # set JAVA_HOME to null if it's a file
8946                 fi
8947             fi
8948         fi
8949     fi
8950     # as we drop out of this, JAVA_HOME may have been set to the empty string by readlink
8952     dnl now if JAVA_HOME has been set to empty, then call findhome to find it
8953     if test -z "$JAVA_HOME"; then
8954         if test "x$with_jdk_home" = "x"; then
8955             cat > findhome.java <<_ACEOF
8956 [import java.io.File;
8958 class findhome
8960     public static void main(String args[])
8961     {
8962         String jrelocation = System.getProperty("java.home");
8963         File jre = new File(jrelocation);
8964         System.out.println(jre.getParent());
8965     }
8967 _ACEOF
8968             AC_MSG_CHECKING([if javac works])
8969             javac_cmd="$JAVACOMPILER findhome.java 1>&2"
8970             AC_TRY_EVAL(javac_cmd)
8971             if test $? = 0 -a -f ./findhome.class; then
8972                 AC_MSG_RESULT([javac works])
8973             else
8974                 echo "configure: javac test failed" >&5
8975                 cat findhome.java >&5
8976                 AC_MSG_ERROR([javac does not work - java projects will not build!])
8977             fi
8978             AC_MSG_CHECKING([if gij knows its java.home])
8979             JAVA_HOME=`$JAVAINTERPRETER findhome`
8980             if test $? = 0 -a "$JAVA_HOME" != ""; then
8981                 AC_MSG_RESULT([$JAVA_HOME])
8982             else
8983                 echo "configure: java test failed" >&5
8984                 cat findhome.java >&5
8985                 AC_MSG_ERROR([gij does not know its java.home - use --with-jdk-home])
8986             fi
8987             # clean-up after ourselves
8988             rm -f ./findhome.java ./findhome.class
8989         else
8990             JAVA_HOME=`echo $JAVAINTERPRETER | $SED -n "s,//*bin//*$with_java,,p"`
8991         fi
8992     fi
8994     # now check if $JAVA_HOME is really valid
8995     if test "$_os" = "Darwin" -o "$OS_FOR_BUILD" = MACOSX; then
8996         if test ! -f "$JAVA_HOME/lib/jvm.cfg" -a "x$with_jdk_home" = "x"; then
8997             AC_MSG_WARN([JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script])
8998             AC_MSG_WARN([attempted to find JAVA_HOME automatically, but apparently it failed])
8999             AC_MSG_WARN([in case JAVA_HOME is incorrectly set, some projects will not be built correctly])
9000             add_warning "JAVA_HOME was not explicitly informed with --with-jdk-home. the configure script"
9001             add_warning "attempted to find JAVA_HOME automatically, but apparently it failed"
9002             add_warning "in case JAVA_HOME is incorrectly set, some projects will not be built correctly"
9003         fi
9004     fi
9005     PathFormat "$JAVA_HOME"
9006     JAVA_HOME="$formatted_path"
9009 if test -z "$JAWTLIB" -a -n "$ENABLE_JAVA" -a "$_os" != Android -a \
9010     "$_os" != Darwin
9011 then
9012     AC_MSG_CHECKING([for JAWT lib])
9013     if test "$_os" = WINNT; then
9014         # The path to $JAVA_HOME/lib/$JAWTLIB is part of $ILIB:
9015         JAWTLIB=jawt.lib
9016     else
9017         case "$host_cpu" in
9018         arm*)
9019             AS_IF([test -e "$JAVA_HOME/jre/lib/aarch32/libjawt.so"], [my_java_arch=aarch32], [my_java_arch=arm])
9020             JAVA_ARCH=$my_java_arch
9021             ;;
9022         i*86)
9023             my_java_arch=i386
9024             ;;
9025         m68k)
9026             my_java_arch=m68k
9027             ;;
9028         powerpc)
9029             my_java_arch=ppc
9030             ;;
9031         powerpc64)
9032             my_java_arch=ppc64
9033             ;;
9034         powerpc64le)
9035             AS_IF([test -e "$JAVA_HOME/jre/lib/ppc64le/libjawt.so"], [my_java_arch=ppc64le], [my_java_arch=ppc64])
9036             JAVA_ARCH=$my_java_arch
9037             ;;
9038         sparc64)
9039             my_java_arch=sparcv9
9040             ;;
9041         x86_64)
9042             my_java_arch=amd64
9043             ;;
9044         *)
9045             my_java_arch=$host_cpu
9046             ;;
9047         esac
9048         # This is where JDK9 puts the library
9049         if test -e "$JAVA_HOME/lib/libjawt.so"; then
9050             JAWTLIB="-L$JAVA_HOME/lib/ -ljawt"
9051         else
9052             JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt"
9053         fi
9054         AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])])
9055     fi
9056     AC_MSG_RESULT([$JAWTLIB])
9058 AC_SUBST(JAWTLIB)
9060 if test -n "$ENABLE_JAVA" -a -z "$JAVAINC"; then
9061     case "$host_os" in
9063     cygwin*|wsl*)
9064         JAVAINC="-I$JAVA_HOME/include/win32"
9065         JAVAINC="$JAVAINC -I$JAVA_HOME/include"
9066         ;;
9068     darwin*)
9069         if test -d "$JAVA_HOME/include/darwin"; then
9070             JAVAINC="-I$JAVA_HOME/include  -I$JAVA_HOME/include/darwin"
9071         else
9072             JAVAINC=${ISYSTEM}$FRAMEWORKSHOME/JavaVM.framework/Versions/Current/Headers
9073         fi
9074         ;;
9076     dragonfly*)
9077         JAVAINC="-I$JAVA_HOME/include"
9078         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9079         ;;
9081     freebsd*)
9082         JAVAINC="-I$JAVA_HOME/include"
9083         JAVAINC="$JAVAINC -I$JAVA_HOME/include/freebsd"
9084         JAVAINC="$JAVAINC -I$JAVA_HOME/include/bsd"
9085         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9086         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9087         ;;
9089     k*bsd*-gnu*)
9090         JAVAINC="-I$JAVA_HOME/include"
9091         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9092         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9093         ;;
9095     linux-gnu*)
9096         JAVAINC="-I$JAVA_HOME/include"
9097         JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
9098         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9099         ;;
9101     *netbsd*)
9102         JAVAINC="-I$JAVA_HOME/include"
9103         JAVAINC="$JAVAINC -I$JAVA_HOME/include/netbsd"
9104         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9105        ;;
9107     openbsd*)
9108         JAVAINC="-I$JAVA_HOME/include"
9109         JAVAINC="$JAVAINC -I$JAVA_HOME/include/openbsd"
9110         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9111         ;;
9113     solaris*)
9114         JAVAINC="-I$JAVA_HOME/include"
9115         JAVAINC="$JAVAINC -I$JAVA_HOME/include/solaris"
9116         test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
9117         ;;
9118     esac
9120 SOLARINC="$SOLARINC $JAVAINC"
9122 if test "$ENABLE_JAVA" != "" -a "$cross_compiling" != "yes"; then
9123     JAVA_HOME_FOR_BUILD=$JAVA_HOME
9124     JAVAIFLAGS_FOR_BUILD=$JAVAIFLAGS
9125     JDK_FOR_BUILD=$JDK
9126     JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD=$JDK_SECURITYMANAGER_DISALLOWED
9129 AC_SUBST(JAVACFLAGS)
9130 AC_SUBST(JAVACOMPILER)
9131 AC_SUBST(JAVAINTERPRETER)
9132 AC_SUBST(JAVAIFLAGS)
9133 AC_SUBST(JAVAIFLAGS_FOR_BUILD)
9134 AC_SUBST(JAVA_HOME)
9135 AC_SUBST(JAVA_HOME_FOR_BUILD)
9136 AC_SUBST(JDK)
9137 AC_SUBST(JDK_FOR_BUILD)
9138 AC_SUBST(JDK_SECURITYMANAGER_DISALLOWED_FOR_BUILD)
9139 AC_SUBST(JAVA_SOURCE_VER)
9140 AC_SUBST(JAVA_TARGET_VER)
9141 AC_SUBST(MODULAR_JAVA)
9144 dnl ===================================================================
9145 dnl Export file validation
9146 dnl ===================================================================
9147 AC_MSG_CHECKING([whether to enable export file validation])
9148 if test "$with_export_validation" != "no"; then
9149     if test -z "$ENABLE_JAVA"; then
9150         if test "$with_export_validation" = "yes"; then
9151             AC_MSG_ERROR([requested, but Java is disabled])
9152         else
9153             AC_MSG_RESULT([no, as Java is disabled])
9154         fi
9155     elif ! test -d "${SRC_ROOT}/schema"; then
9156         if test "$with_export_validation" = "yes"; then
9157             AC_MSG_ERROR([requested, but schema directory is missing (it is excluded from tarballs)])
9158         else
9159             AC_MSG_RESULT([no, schema directory is missing (it is excluded from tarballs)])
9160         fi
9161     else
9162         AC_MSG_RESULT([yes])
9163         AC_DEFINE(HAVE_EXPORT_VALIDATION)
9165         AC_PATH_PROGS(ODFVALIDATOR, odfvalidator)
9166         if test -z "$ODFVALIDATOR"; then
9167             # remember to download the ODF toolkit with validator later
9168             AC_MSG_NOTICE([no odfvalidator found, will download it])
9169             BUILD_TYPE="$BUILD_TYPE ODFVALIDATOR"
9170             ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
9172             # and fetch name of odfvalidator jar name from download.lst
9173             ODFVALIDATOR_JAR=`$SED -n -e "s/^ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9174             AC_SUBST(ODFVALIDATOR_JAR)
9176             if test -z "$ODFVALIDATOR_JAR"; then
9177                 AC_MSG_ERROR([cannot determine odfvalidator jar location (--with-export-validation)])
9178             fi
9179         fi
9180         if test "$build_os" = "cygwin"; then
9181             # In case of Cygwin it will be executed from Windows,
9182             # so we need to run bash and absolute path to validator
9183             # so instead of "odfvalidator" it will be
9184             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9185             ODFVALIDATOR="bash.exe `cygpath -m "$ODFVALIDATOR"`"
9186         else
9187             ODFVALIDATOR="sh $ODFVALIDATOR"
9188         fi
9189         AC_SUBST(ODFVALIDATOR)
9192         AC_PATH_PROGS(OFFICEOTRON, officeotron)
9193         if test -z "$OFFICEOTRON"; then
9194             # remember to download the officeotron with validator later
9195             AC_MSG_NOTICE([no officeotron found, will download it])
9196             BUILD_TYPE="$BUILD_TYPE OFFICEOTRON"
9197             OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
9199             # and fetch name of officeotron jar name from download.lst
9200             OFFICEOTRON_JAR=`$SED -n -e "s/^OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
9201             AC_SUBST(OFFICEOTRON_JAR)
9203             if test -z "$OFFICEOTRON_JAR"; then
9204                 AC_MSG_ERROR([cannot determine officeotron jar location (--with-export-validation)])
9205             fi
9206         else
9207             # check version of existing officeotron
9208             OFFICEOTRON_VER=`$OFFICEOTRON --version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
9209             if test 0"$OFFICEOTRON_VER" -lt 704; then
9210                 AC_MSG_ERROR([officeotron too old])
9211             fi
9212         fi
9213         if test "$build_os" = "cygwin"; then
9214             # In case of Cygwin it will be executed from Windows,
9215             # so we need to run bash and absolute path to validator
9216             # so instead of "odfvalidator" it will be
9217             # something like "bash.exe C:\cygwin\opt\lo\bin\odfvalidator"
9218             OFFICEOTRON="bash.exe `cygpath -m "$OFFICEOTRON"`"
9219         else
9220             OFFICEOTRON="sh $OFFICEOTRON"
9221         fi
9222     fi
9223     AC_SUBST(OFFICEOTRON)
9224 else
9225     AC_MSG_RESULT([no])
9228 AC_MSG_CHECKING([for Microsoft Binary File Format Validator])
9229 if test "$with_bffvalidator" != "no"; then
9230     AC_DEFINE(HAVE_BFFVALIDATOR)
9232     if test "$with_export_validation" = "no"; then
9233         AC_MSG_ERROR([Please enable export validation (-with-export-validation)!])
9234     fi
9236     if test "$with_bffvalidator" = "yes"; then
9237         BFFVALIDATOR=`win_short_path_for_make "$PROGRAMFILES/Microsoft Office/BFFValidator/BFFValidator.exe"`
9238     else
9239         BFFVALIDATOR="$with_bffvalidator"
9240     fi
9242     if test "$build_os" = "cygwin"; then
9243         if test -n "$BFFVALIDATOR" -a -e "`cygpath $BFFVALIDATOR`"; then
9244             AC_MSG_RESULT($BFFVALIDATOR)
9245         else
9246             AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9247         fi
9248     elif test -n "$BFFVALIDATOR"; then
9249         # We are not in Cygwin but need to run Windows binary with wine
9250         AC_PATH_PROGS(WINE, wine)
9252         # so swap in a shell wrapper that converts paths transparently
9253         BFFVALIDATOR_EXE="$BFFVALIDATOR"
9254         BFFVALIDATOR="sh $BUILDDIR/bin/bffvalidator.sh"
9255         AC_SUBST(BFFVALIDATOR_EXE)
9256         AC_MSG_RESULT($BFFVALIDATOR)
9257     else
9258         AC_MSG_ERROR([bffvalidator not found, but required by --with-bffvalidator])
9259     fi
9260     AC_SUBST(BFFVALIDATOR)
9261 else
9262     AC_MSG_RESULT([no])
9265 dnl ===================================================================
9266 dnl Check for epm (not needed for Windows)
9267 dnl ===================================================================
9268 AC_MSG_CHECKING([whether to enable EPM for packing])
9269 if test "$enable_epm" = "yes"; then
9270     AC_MSG_RESULT([yes])
9271     if test "$_os" != "WINNT"; then
9272         if test $_os = Darwin; then
9273             EPM=internal
9274         elif test -n "$with_epm"; then
9275             EPM=$with_epm
9276         else
9277             AC_PATH_PROG(EPM, epm, no)
9278         fi
9279         if test "$EPM" = "no" -o "$EPM" = "internal"; then
9280             AC_MSG_NOTICE([EPM will be built.])
9281             BUILD_TYPE="$BUILD_TYPE EPM"
9282             EPM=${WORKDIR}/UnpackedTarball/epm/epm
9283         else
9284             # Gentoo has some epm which is something different...
9285             AC_MSG_CHECKING([whether the found epm is the right epm])
9286             if $EPM | grep "ESP Package Manager" >/dev/null 2>/dev/null; then
9287                 AC_MSG_RESULT([yes])
9288             else
9289                 AC_MSG_ERROR([no. Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9290             fi
9291             AC_MSG_CHECKING([epm version])
9292             EPM_VERSION=`$EPM | grep 'ESP Package Manager' | cut -d' ' -f4 | $SED -e s/v//`
9293             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -gt "3" || \
9294                test "`echo $EPM_VERSION | cut -d'.' -f1`" -eq "3" -a "`echo $EPM_VERSION | cut -d'.' -f2`" -ge "7"; then
9295                 AC_MSG_RESULT([OK, >= 3.7])
9296             else
9297                 AC_MSG_RESULT([too old. epm >= 3.7 is required.])
9298                 AC_MSG_ERROR([Install ESP Package Manager (https://jimjag.github.io/epm/) and/or specify the path to the right epm])
9299             fi
9300         fi
9301     fi
9303     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null; then
9304         AC_MSG_CHECKING([for rpm])
9305         for a in "$RPM" rpmbuild rpm; do
9306             $a --usage >/dev/null 2> /dev/null
9307             if test $? -eq 0; then
9308                 RPM=$a
9309                 break
9310             else
9311                 $a --version >/dev/null 2> /dev/null
9312                 if test $? -eq 0; then
9313                     RPM=$a
9314                     break
9315                 fi
9316             fi
9317         done
9318         if test -z "$RPM"; then
9319             AC_MSG_ERROR([not found])
9320         elif "$RPM" --help 2>&1 | $EGREP buildroot >/dev/null; then
9321             RPM_PATH=`command -v $RPM`
9322             AC_MSG_RESULT([$RPM_PATH])
9323             SCPDEFS="$SCPDEFS -DWITH_RPM"
9324         else
9325             AC_MSG_ERROR([cannot build packages. Try installing rpmbuild.])
9326         fi
9327     fi
9328     if echo "$PKGFORMAT" | $EGREP deb 2>&1 >/dev/null; then
9329         AC_PATH_PROG(DPKG, dpkg, no)
9330         if test "$DPKG" = "no"; then
9331             AC_MSG_ERROR([dpkg needed for deb creation. Install dpkg.])
9332         fi
9333     fi
9334     if echo "$PKGFORMAT" | $EGREP rpm 2>&1 >/dev/null || \
9335        echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9336         if test "$with_epm" = "no" -a "$_os" != "Darwin"; then
9337             if test "`echo $EPM_VERSION | cut -d'.' -f1`" -lt "4"; then
9338                 AC_MSG_CHECKING([whether epm is patched for LibreOffice's needs])
9339                 if grep "Patched for .*Office" $EPM >/dev/null 2>/dev/null; then
9340                     AC_MSG_RESULT([yes])
9341                 else
9342                     AC_MSG_RESULT([no])
9343                     if echo "$PKGFORMAT" | $GREP -q rpm; then
9344                         _pt="rpm"
9345                         AC_MSG_WARN([the rpms will need to be installed with --nodeps])
9346                         add_warning "the rpms will need to be installed with --nodeps"
9347                     else
9348                         _pt="pkg"
9349                     fi
9350                     AC_MSG_WARN([the ${_pt}s will not be relocatable])
9351                     add_warning "the ${_pt}s will not be relocatable"
9352                     AC_MSG_WARN([if you want to make sure installation without --nodeps and
9353                                  relocation will work, you need to patch your epm with the
9354                                  patch in epm/epm-3.7.patch or build with
9355                                  --with-epm=internal which will build a suitable epm])
9356                 fi
9357             fi
9358         fi
9359     fi
9360     if echo "$PKGFORMAT" | $EGREP pkg 2>&1 >/dev/null; then
9361         AC_PATH_PROG(PKGMK, pkgmk, no)
9362         if test "$PKGMK" = "no"; then
9363             AC_MSG_ERROR([pkgmk needed for Solaris pkg creation. Install it.])
9364         fi
9365     fi
9366     AC_SUBST(RPM)
9367     AC_SUBST(DPKG)
9368     AC_SUBST(PKGMK)
9369 else
9370     for i in $PKGFORMAT; do
9371         case "$i" in
9372         bsd | deb | pkg | rpm | native | portable)
9373             AC_MSG_ERROR(
9374                 [--with-package-format='$PKGFORMAT' requires --enable-epm])
9375             ;;
9376         esac
9377     done
9378     AC_MSG_RESULT([no])
9379     EPM=NO
9381 AC_SUBST(EPM)
9383 ENABLE_LWP=
9384 if test "$enable_lotuswordpro" = "yes"; then
9385     ENABLE_LWP="TRUE"
9387 AC_SUBST(ENABLE_LWP)
9389 dnl ===================================================================
9390 dnl Check for building ODK
9391 dnl ===================================================================
9392 AC_MSG_CHECKING([whether to build the ODK])
9393 if test "$enable_odk" = yes; then
9394     if test "$DISABLE_DYNLOADING" = TRUE; then
9395         AC_MSG_ERROR([can't build ODK for --disable-dynamic-loading builds])
9396     fi
9397     AC_MSG_RESULT([yes])
9398     BUILD_TYPE="$BUILD_TYPE ODK"
9399 else
9400     AC_MSG_RESULT([no])
9403 if test "$enable_odk" != yes; then
9404     unset DOXYGEN
9405 else
9406     if test "$with_doxygen" = no; then
9407         AC_MSG_CHECKING([for doxygen])
9408         unset DOXYGEN
9409         AC_MSG_RESULT([no])
9410     else
9411         if test "$with_doxygen" = yes; then
9412             AC_PATH_PROG([DOXYGEN], [doxygen])
9413             if test -z "$DOXYGEN"; then
9414                 AC_MSG_ERROR([doxygen not found in \$PATH; specify its pathname via --with-doxygen=..., or disable its use via --without-doxygen])
9415             fi
9416             if $DOXYGEN -g - | grep -q "HAVE_DOT *= *YES"; then
9417                 if ! dot -V 2>/dev/null; then
9418                     AC_MSG_ERROR([dot not found in \$PATH but doxygen defaults to HAVE_DOT=YES; install graphviz or disable its use via --without-doxygen])
9419                 fi
9420             fi
9421         else
9422             AC_MSG_CHECKING([for doxygen])
9423             DOXYGEN=$with_doxygen
9424             AC_MSG_RESULT([$DOXYGEN])
9425         fi
9426         if test -n "$DOXYGEN"; then
9427             DOXYGEN_VERSION=`$DOXYGEN --version 2>/dev/null`
9428             DOXYGEN_NUMVERSION=`echo $DOXYGEN_VERSION | $AWK -F. '{ print \$1*10000 + \$2*100 + \$3 }'`
9429             if ! test "$DOXYGEN_NUMVERSION" -ge "10804" ; then
9430                 AC_MSG_ERROR([found doxygen is too old; need at least version 1.8.4 or specify --without-doxygen])
9431             fi
9432         fi
9433     fi
9435 AC_SUBST([DOXYGEN])
9437 dnl ==================================================================
9438 dnl libfuzzer
9439 dnl ==================================================================
9440 AC_MSG_CHECKING([whether to enable fuzzers])
9441 if test "$enable_fuzzers" != yes; then
9442     AC_MSG_RESULT([no])
9443 else
9444     if test -z $LIB_FUZZING_ENGINE; then
9445       AC_MSG_ERROR(['LIB_FUZZING_ENGINE' must be set when using --enable-fuzzers. Examples include '-fsanitize=fuzzer'.])
9446     fi
9447     AC_MSG_RESULT([yes])
9448     ENABLE_FUZZERS="TRUE"
9449     AC_DEFINE([ENABLE_FUZZERS],1)
9450     BUILD_TYPE="$BUILD_TYPE FUZZERS"
9452 AC_SUBST(LIB_FUZZING_ENGINE)
9454 dnl ===================================================================
9455 dnl Check for system zlib
9456 dnl ===================================================================
9457 if test "$with_system_zlib" = "auto"; then
9458     case "$_os" in
9459     WINNT)
9460         with_system_zlib="$with_system_libs"
9461         ;;
9462     *)
9463         if test "$enable_fuzzers" != "yes"; then
9464             with_system_zlib=yes
9465         else
9466             with_system_zlib=no
9467         fi
9468         ;;
9469     esac
9472 dnl we want to use libo_CHECK_SYSTEM_MODULE here too, but macOS is too stupid
9473 dnl and has no pkg-config for it at least on some tinderboxes,
9474 dnl so leaving that out for now
9475 dnl libo_CHECK_SYSTEM_MODULE([zlib],[ZLIB],[zlib])
9476 AC_MSG_CHECKING([which zlib to use])
9477 if test "$with_system_zlib" = "yes"; then
9478     AC_MSG_RESULT([external])
9479     SYSTEM_ZLIB=TRUE
9480     AC_CHECK_HEADER(zlib.h, [],
9481         [AC_MSG_ERROR(zlib.h not found. install zlib)], [])
9482     AC_CHECK_LIB(z, deflate, [ ZLIB_LIBS=-lz ],
9483         [AC_MSG_ERROR(zlib not found or functional)], [])
9484 else
9485     AC_MSG_RESULT([internal])
9486     SYSTEM_ZLIB=
9487     BUILD_TYPE="$BUILD_TYPE ZLIB"
9488     ZLIB_CFLAGS="-I${WORKDIR}/UnpackedTarball/zlib"
9489     if test "$COM" = "MSC"; then
9490         ZLIB_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/zlib.lib"
9491     else
9492         ZLIB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lzlib"
9493     fi
9495 AC_SUBST(ZLIB_CFLAGS)
9496 AC_SUBST(ZLIB_LIBS)
9497 AC_SUBST(SYSTEM_ZLIB)
9499 dnl ===================================================================
9500 dnl Check for system jpeg
9501 dnl ===================================================================
9502 AC_MSG_CHECKING([which libjpeg to use])
9503 if test "$with_system_jpeg" = "yes"; then
9504     AC_MSG_RESULT([external])
9505     SYSTEM_LIBJPEG=TRUE
9506     AC_CHECK_HEADER(jpeglib.h, [ LIBJPEG_CFLAGS= ],
9507         [AC_MSG_ERROR(jpeg.h not found. install libjpeg)], [])
9508     AC_CHECK_LIB(jpeg, jpeg_resync_to_restart, [ LIBJPEG_LIBS="-ljpeg" ],
9509         [AC_MSG_ERROR(jpeg library not found or functional)], [])
9510 else
9511     SYSTEM_LIBJPEG=
9512     AC_MSG_RESULT([internal, libjpeg-turbo])
9513     BUILD_TYPE="$BUILD_TYPE LIBJPEG_TURBO"
9515     case "$host_cpu" in
9516     x86_64 | amd64 | i*86 | x86 | ia32)
9517         AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
9518         if test -z "$NASM" -a "$build_os" = "cygwin"; then
9519             if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/nasm"; then
9520                 NASM="$LODE_HOME/opt/bin/nasm"
9521             elif test -x "/opt/lo/bin/nasm"; then
9522                 NASM="/opt/lo/bin/nasm"
9523             fi
9524         fi
9526         if test -n "$NASM"; then
9527             AC_MSG_CHECKING([for object file format of host system])
9528             case "$host_os" in
9529               cygwin* | mingw* | pw32* | wsl*)
9530                 case "$host_cpu" in
9531                   x86_64)
9532                     objfmt='Win64-COFF'
9533                     ;;
9534                   *)
9535                     objfmt='Win32-COFF'
9536                     ;;
9537                 esac
9538               ;;
9539               msdosdjgpp* | go32*)
9540                 objfmt='COFF'
9541               ;;
9542               os2-emx*) # not tested
9543                 objfmt='MSOMF' # obj
9544               ;;
9545               linux*coff* | linux*oldld*)
9546                 objfmt='COFF' # ???
9547               ;;
9548               linux*aout*)
9549                 objfmt='a.out'
9550               ;;
9551               linux*)
9552                 case "$host_cpu" in
9553                   x86_64)
9554                     objfmt='ELF64'
9555                     ;;
9556                   *)
9557                     objfmt='ELF'
9558                     ;;
9559                 esac
9560               ;;
9561               kfreebsd* | freebsd* | netbsd* | openbsd*)
9562                 if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
9563                   objfmt='BSD-a.out'
9564                 else
9565                   case "$host_cpu" in
9566                     x86_64 | amd64)
9567                       objfmt='ELF64'
9568                       ;;
9569                     *)
9570                       objfmt='ELF'
9571                       ;;
9572                   esac
9573                 fi
9574               ;;
9575               solaris* | sunos* | sysv* | sco*)
9576                 case "$host_cpu" in
9577                   x86_64)
9578                     objfmt='ELF64'
9579                     ;;
9580                   *)
9581                     objfmt='ELF'
9582                     ;;
9583                 esac
9584               ;;
9585               darwin* | rhapsody* | nextstep* | openstep* | macos*)
9586                 case "$host_cpu" in
9587                   x86_64)
9588                     objfmt='Mach-O64'
9589                     ;;
9590                   *)
9591                     objfmt='Mach-O'
9592                     ;;
9593                 esac
9594               ;;
9595               *)
9596                 objfmt='ELF ?'
9597               ;;
9598             esac
9600             AC_MSG_RESULT([$objfmt])
9601             if test "$objfmt" = 'ELF ?'; then
9602               objfmt='ELF'
9603               AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
9604             fi
9606             AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
9607             case "$objfmt" in
9608               MSOMF)      NAFLAGS='-fobj -DOBJ32 -DPIC';;
9609               Win32-COFF) NAFLAGS='-fwin32 -DWIN32 -DPIC';;
9610               Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__ -DPIC';;
9611               COFF)       NAFLAGS='-fcoff -DCOFF -DPIC';;
9612               a.out)      NAFLAGS='-faout -DAOUT -DPIC';;
9613               BSD-a.out)  NAFLAGS='-faoutb -DAOUT -DPIC';;
9614               ELF)        NAFLAGS='-felf -DELF -DPIC';;
9615               ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__ -DPIC';;
9616               RDF)        NAFLAGS='-frdf -DRDF -DPIC';;
9617               Mach-O)     NAFLAGS='-fmacho -DMACHO -DPIC';;
9618               Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__ -DPIC';;
9619             esac
9620             AC_MSG_RESULT([$NAFLAGS])
9622             AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
9623             cat > conftest.asm << EOF
9624             [%line __oline__ "configure"
9625                     section .text
9626                     global  _main,main
9627             _main:
9628             main:   xor     eax,eax
9629                     ret
9630             ]
9632             try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
9633             if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
9634               AC_MSG_RESULT(yes)
9635             else
9636               echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
9637               cat conftest.asm >&AS_MESSAGE_LOG_FD
9638               rm -rf conftest*
9639               AC_MSG_RESULT(no)
9640               AC_MSG_WARN([installation or configuration problem: assembler cannot create object files.])
9641               NASM=""
9642             fi
9644         fi
9646         if test -z "$NASM"; then
9647 cat << _EOS
9648 ****************************************************************************
9649 You need yasm or nasm (Netwide Assembler) to build the internal jpeg library optimally.
9650 To get one please:
9652 _EOS
9653             if test "$build_os" = "cygwin"; then
9654 cat << _EOS
9655 install a pre-compiled binary for Win32
9657 mkdir -p /opt/lo/bin
9658 cd /opt/lo/bin
9659 wget https://dev-www.libreoffice.org/bin/cygwin/nasm.exe
9660 chmod +x nasm
9662 or get and install one from https://www.nasm.us/
9664 Then re-run autogen.sh
9666 Note: autogen.sh will try to use /opt/lo/bin/nasm if the environment variable NASM is not already defined.
9667 Alternatively, you can install the 'new' nasm where ever you want and make sure that \`command -v nasm\` finds it.
9669 _EOS
9670             else
9671 cat << _EOS
9672 consult https://github.com/libjpeg-turbo/libjpeg-turbo/blob/main/BUILDING.md
9674 _EOS
9675             fi
9676             AC_MSG_WARN([no suitable nasm (Netwide Assembler) found])
9677             add_warning "no suitable nasm (Netwide Assembler) found for internal libjpeg-turbo"
9678         fi
9679       ;;
9680     esac
9683 AC_SUBST(NASM)
9684 AC_SUBST(NAFLAGS)
9685 AC_SUBST(LIBJPEG_CFLAGS)
9686 AC_SUBST(LIBJPEG_LIBS)
9687 AC_SUBST(SYSTEM_LIBJPEG)
9689 dnl ===================================================================
9690 dnl Check for system clucene
9691 dnl ===================================================================
9692 libo_CHECK_SYSTEM_MODULE([clucene],[CLUCENE],[libclucene-core])
9693 if test "$SYSTEM_CLUCENE" = TRUE; then
9694     AC_LANG_PUSH([C++])
9695     save_CXXFLAGS=$CXXFLAGS
9696     save_CPPFLAGS=$CPPFLAGS
9697     CXXFLAGS="$CXXFLAGS $CLUCENE_CFLAGS"
9698     CPPFLAGS="$CPPFLAGS $CLUCENE_CFLAGS"
9699     dnl https://sourceforge.net/p/clucene/bugs/200/
9700     dnl https://bugzilla.redhat.com/show_bug.cgi?id=794795
9701     AC_CHECK_HEADER([CLucene/analysis/cjk/CJKAnalyzer.h], [],
9702                  [AC_MSG_ERROR([Your version of libclucene has contribs-lib missing.])], [#include <CLucene.h>])
9703     CXXFLAGS=$save_CXXFLAGS
9704     CPPFLAGS=$save_CPPFLAGS
9705     AC_LANG_POP([C++])
9706     CLUCENE_LIBS="$CLUCENE_LIBS -lclucene-contribs-lib"
9709 dnl ===================================================================
9710 dnl Check for system expat
9711 dnl ===================================================================
9712 libo_CHECK_SYSTEM_MODULE([expat], [EXPAT], [expat])
9714 dnl ===================================================================
9715 dnl Check for system xmlsec
9716 dnl ===================================================================
9717 libo_CHECK_SYSTEM_MODULE([xmlsec], [XMLSEC], [xmlsec1-nss >= 1.2.35])
9719 AC_MSG_CHECKING([whether to enable Embedded OpenType support])
9720 if test "$enable_eot" = "yes"; then
9721     ENABLE_EOT="TRUE"
9722     AC_DEFINE([ENABLE_EOT])
9723     AC_MSG_RESULT([yes])
9725     libo_CHECK_SYSTEM_MODULE([libeot],[LIBEOT],[libeot >= 0.01])
9726 else
9727     ENABLE_EOT=
9728     AC_MSG_RESULT([no])
9730 AC_SUBST([ENABLE_EOT])
9732 dnl ===================================================================
9733 dnl Check for DLP libs
9734 dnl ===================================================================
9735 REVENGE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/librevenge/inc"
9736 AS_IF([test "$COM" = "MSC"],
9737       [librevenge_libdir="${WORKDIR}/LinkTarget/Library"],
9738       [librevenge_libdir="${WORKDIR}/UnpackedTarball/librevenge/src/lib/.libs"]
9740 REVENGE_LIBS_internal="-L${librevenge_libdir} -lrevenge-0.0"
9741 libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1])
9743 libo_CHECK_SYSTEM_MODULE([libodfgen],[ODFGEN],[libodfgen-0.1])
9745 libo_CHECK_SYSTEM_MODULE([libepubgen],[EPUBGEN],[libepubgen-0.1])
9747 WPD_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libwpd/inc"
9748 AS_IF([test "$COM" = "MSC"],
9749       [libwpd_libdir="${WORKDIR}/LinkTarget/Library"],
9750       [libwpd_libdir="${WORKDIR}/UnpackedTarball/libwpd/src/lib/.libs"]
9752 WPD_LIBS_internal="-L${libwpd_libdir} -lwpd-0.10"
9753 libo_CHECK_SYSTEM_MODULE([libwpd],[WPD],[libwpd-0.10])
9755 libo_CHECK_SYSTEM_MODULE([libwpg],[WPG],[libwpg-0.3])
9757 libo_CHECK_SYSTEM_MODULE([libwps],[WPS],[libwps-0.4])
9758 libo_PKG_VERSION([WPS], [libwps-0.4], [0.4.14])
9760 libo_CHECK_SYSTEM_MODULE([libvisio],[VISIO],[libvisio-0.1])
9762 libo_CHECK_SYSTEM_MODULE([libcdr],[CDR],[libcdr-0.1])
9764 libo_CHECK_SYSTEM_MODULE([libmspub],[MSPUB],[libmspub-0.1])
9766 libo_CHECK_SYSTEM_MODULE([libmwaw],[MWAW],[libmwaw-0.3 >= 0.3.21])
9767 libo_PKG_VERSION([MWAW], [libmwaw-0.3], [0.3.21])
9769 libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1])
9770 libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10])
9772 libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
9774 libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1])
9775 libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2])
9777 libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1])
9779 libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
9781 libo_CHECK_SYSTEM_MODULE([libqxp],[QXP],[libqxp-0.0])
9783 libo_CHECK_SYSTEM_MODULE([libzmf],[ZMF],[libzmf-0.0])
9785 libo_CHECK_SYSTEM_MODULE([libstaroffice],[STAROFFICE],[libstaroffice-0.0])
9786 libo_PKG_VERSION([STAROFFICE], [libstaroffice-0.0], [0.0.7])
9788 dnl ===================================================================
9789 dnl Check for system lcms2
9790 dnl ===================================================================
9791 if test "$with_system_lcms2" != "yes"; then
9792     SYSTEM_LCMS2=
9794 LCMS2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/lcms2/include"
9795 LCMS2_LIBS_internal="-L${WORKDIR}/UnpackedTarball/lcms2/src/.libs -llcms2"
9796 libo_CHECK_SYSTEM_MODULE([lcms2],[LCMS2],[lcms2])
9797 if test "$GCC" = "yes"; then
9798     LCMS2_CFLAGS="${LCMS2_CFLAGS} -Wno-long-long"
9800 if test "$COM" = "MSC"; then # override the above
9801     LCMS2_LIBS=${WORKDIR}/UnpackedTarball/lcms2/bin/lcms2.lib
9804 dnl ===================================================================
9805 dnl Check for system cppunit
9806 dnl ===================================================================
9807 if test "$_os" != "Android" ; then
9808     libo_CHECK_SYSTEM_MODULE([cppunit],[CPPUNIT],[cppunit >= 1.14.0])
9811 dnl ===================================================================
9812 dnl Check whether freetype is available
9814 dnl FreeType has 3 different kinds of versions
9815 dnl * release, like 2.4.10
9816 dnl * libtool, like 13.0.7 (this what pkg-config returns)
9817 dnl * soname
9818 dnl FreeType's docs/VERSION.DLL provides a table mapping between the three
9820 dnl 9.9.3 is 2.2.0
9821 dnl When the minimal version is at least 2.8.1, remove Skia's check down below.
9822 dnl ===================================================================
9823 FREETYPE_CFLAGS_internal="${ISYSTEM}${WORKDIR}/UnpackedTarball/freetype/include"
9824 if test "x$ac_config_site_64bit_host" = xYES; then
9825     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib64 -lfreetype"
9826 else
9827     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib -lfreetype"
9829 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 9.9.3],,system,TRUE)
9831 # ===================================================================
9832 # Check for system libxslt
9833 # to prevent incompatibilities between internal libxml2 and external libxslt,
9834 # or vice versa, use with_system_libxml here
9835 # ===================================================================
9836 if test "$with_system_libxml" = "auto"; then
9837     case "$_os" in
9838     WINNT|iOS|Android)
9839         with_system_libxml="$with_system_libs"
9840         ;;
9841     Emscripten)
9842         with_system_libxml=no
9843         ;;
9844     *)
9845         if test "$enable_fuzzers" != "yes"; then
9846             with_system_libxml=yes
9847         else
9848             with_system_libxml=no
9849         fi
9850         ;;
9851     esac
9854 AC_MSG_CHECKING([which libxslt to use])
9855 if test "$with_system_libxml" = "yes"; then
9856     AC_MSG_RESULT([external])
9857     SYSTEM_LIBXSLT=TRUE
9858     if test "$_os" = "Darwin"; then
9859         dnl make sure to use SDK path
9860         LIBXSLT_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9861         LIBEXSLT_CFLAGS="$LIBXSLT_CFLAGS"
9862         dnl omit -L/usr/lib
9863         LIBXSLT_LIBS="-lxslt -lxml2 -lz -lpthread -liconv -lm"
9864         LIBEXSLT_LIBS="-lexslt $LIBXSLT_LIBS"
9865     else
9866         PKG_CHECK_MODULES(LIBXSLT, libxslt)
9867         LIBXSLT_CFLAGS=$(printf '%s' "$LIBXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9868         FilterLibs "${LIBXSLT_LIBS}"
9869         LIBXSLT_LIBS="${filteredlibs}"
9870         PKG_CHECK_MODULES(LIBEXSLT, libexslt)
9871         LIBEXSLT_CFLAGS=$(printf '%s' "$LIBEXSLT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9872         FilterLibs "${LIBEXSLT_LIBS}"
9873         LIBEXSLT_LIBS=$(printf '%s' "${filteredlibs}" | sed -e "s/-lgpg-error//"  -e "s/-lgcrypt//")
9874     fi
9876     dnl Check for xsltproc
9877     AC_PATH_PROG(XSLTPROC, xsltproc, no)
9878     if test "$XSLTPROC" = "no"; then
9879         AC_MSG_ERROR([xsltproc is required])
9880     fi
9881 else
9882     AC_MSG_RESULT([internal])
9883     SYSTEM_LIBXSLT=
9884     BUILD_TYPE="$BUILD_TYPE LIBXSLT"
9886 AC_SUBST(SYSTEM_LIBXSLT)
9887 if test -z "$SYSTEM_LIBXSLT_FOR_BUILD"; then
9888     SYSTEM_LIBXSLT_FOR_BUILD="$SYSTEM_LIBXSLT"
9890 AC_SUBST(SYSTEM_LIBXSLT_FOR_BUILD)
9892 AC_SUBST(LIBEXSLT_CFLAGS)
9893 AC_SUBST(LIBEXSLT_LIBS)
9894 AC_SUBST(LIBXSLT_CFLAGS)
9895 AC_SUBST(LIBXSLT_LIBS)
9896 AC_SUBST(XSLTPROC)
9898 # ===================================================================
9899 # Check for system libxml
9900 # ===================================================================
9901 AC_MSG_CHECKING([which libxml to use])
9902 if test "$with_system_libxml" = "yes"; then
9903     AC_MSG_RESULT([external])
9904     SYSTEM_LIBXML=TRUE
9905     if test "$_os" = "Darwin"; then
9906         dnl make sure to use SDK path
9907         LIBXML_CFLAGS="-I$MACOSX_SDK_PATH/usr/include/libxml2"
9908         dnl omit -L/usr/lib
9909         LIBXML_LIBS="-lxml2 -lz -lpthread -liconv -lm"
9910     elif test $_os = iOS; then
9911         dnl make sure to use SDK path
9912         usr=`echo '#include <stdlib.h>' | $CC -E -MD - | grep usr/include/stdlib.h | head -1 | sed -e 's,# 1 ",,' -e 's,/usr/include/.*,/usr,'`
9913         LIBXML_CFLAGS="-I$usr/include/libxml2"
9914         LIBXML_LIBS="-L$usr/lib -lxml2 -liconv"
9915     else
9916         PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= 2.0)
9917         LIBXML_CFLAGS=$(printf '%s' "$LIBXML_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
9918         FilterLibs "${LIBXML_LIBS}"
9919         LIBXML_LIBS="${filteredlibs}"
9920     fi
9922     dnl Check for xmllint
9923     AC_PATH_PROG(XMLLINT, xmllint, no)
9924     if test "$XMLLINT" = "no"; then
9925         AC_MSG_ERROR([xmllint is required])
9926     fi
9927 else
9928     AC_MSG_RESULT([internal])
9929     SYSTEM_LIBXML=
9930     LIBXML_CFLAGS="-I${WORKDIR}/UnpackedTarball/libxml2/include"
9931     if test "$COM" = "MSC"; then
9932         LIBXML_CFLAGS="${LIBXML_CFLAGS} -I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
9933     fi
9934     if test "$COM" = "MSC"; then
9935         LIBXML_LIBS="${WORKDIR}/UnpackedTarball/libxml2/win32/bin.msvc/libxml2.lib"
9936     else
9937         LIBXML_LIBS="-L${WORKDIR}/UnpackedTarball/libxml2/.libs -lxml2"
9938         if test "$DISABLE_DYNLOADING" = TRUE; then
9939             LIBXML_LIBS="$LIBXML_LIBS -lm"
9940         fi
9941     fi
9942     BUILD_TYPE="$BUILD_TYPE LIBXML2"
9944 AC_SUBST(SYSTEM_LIBXML)
9945 if test -z "$SYSTEM_LIBXML_FOR_BUILD"; then
9946     SYSTEM_LIBXML_FOR_BUILD="$SYSTEM_LIBXML"
9948 AC_SUBST(SYSTEM_LIBXML_FOR_BUILD)
9949 AC_SUBST(LIBXML_CFLAGS)
9950 AC_SUBST(LIBXML_LIBS)
9951 AC_SUBST(XMLLINT)
9953 # =====================================================================
9954 # Checking for a Python interpreter with version >= 3.3.
9955 # Optionally user can pass an option to configure, i. e.
9956 # ./configure PYTHON=/usr/bin/python
9957 # =====================================================================
9958 if test $_os = Darwin -a "$enable_python" != no -a "$enable_python" != fully-internal -a "$enable_python" != internal -a "$enable_python" != system; then
9959     # Only allowed choices for macOS are 'no', 'internal' (default), and 'fully-internal'
9960     # unless PYTHON is defined as above which allows 'system'
9961     enable_python=internal
9963 if test "$build_os" != "cygwin" -a "$enable_python" != fully-internal; then
9964     if test -n "$PYTHON"; then
9965         PYTHON_FOR_BUILD=$PYTHON
9966     else
9967         # This allows a lack of system python with no error, we use internal one in that case.
9968         AM_PATH_PYTHON([3.3],, [:])
9969         # Clean PYTHON_VERSION checked below if cross-compiling
9970         PYTHON_VERSION=""
9971         if test "$PYTHON" != ":"; then
9972             PYTHON_FOR_BUILD=$PYTHON
9973         fi
9974     fi
9977 # Checks for Python to use for Pyuno
9978 AC_MSG_CHECKING([which Python to use for Pyuno])
9979 case "$enable_python" in
9980 no|disable)
9981     if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9982         # Python is required to build LibreOffice. In theory we could separate the build-time Python
9983         # requirement from the choice whether to include Python stuff in the installer, but why
9984         # bother?
9985         AC_MSG_ERROR([Python is required at build time.])
9986     fi
9987     enable_python=no
9988     AC_MSG_RESULT([none])
9989     ;;
9990 ""|yes|auto)
9991     if test "$DISABLE_SCRIPTING" = TRUE; then
9992         if test -z "$PYTHON_FOR_BUILD" -a "$cross_compiling" != yes; then
9993             AC_MSG_ERROR([Python support can't be disabled without cross-compiling or a system python.])
9994         fi
9995         AC_MSG_RESULT([none, overridden by --disable-scripting])
9996         enable_python=no
9997     elif test $build_os = cygwin -o $build_os = wsl; then
9998         dnl When building on Windows we don't attempt to use any installed
9999         dnl "system"  Python.
10000         AC_MSG_RESULT([fully internal])
10001         enable_python=internal
10002     elif test "$cross_compiling" = yes; then
10003         AC_MSG_RESULT([system])
10004         enable_python=system
10005     else
10006         # Unset variables set by the above AM_PATH_PYTHON so that
10007         # we actually do check anew.
10008         AC_MSG_RESULT([])
10009         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
10010         AM_PATH_PYTHON([3.3],, [:])
10011         AC_MSG_CHECKING([which Python to use for Pyuno])
10012         if test "$PYTHON" = ":"; then
10013             if test -z "$PYTHON_FOR_BUILD"; then
10014                 AC_MSG_RESULT([fully internal])
10015             else
10016                 AC_MSG_RESULT([internal])
10017             fi
10018             enable_python=internal
10019         else
10020             AC_MSG_RESULT([system])
10021             enable_python=system
10022         fi
10023     fi
10024     ;;
10025 internal)
10026     AC_MSG_RESULT([internal])
10027     ;;
10028 fully-internal)
10029     AC_MSG_RESULT([fully internal])
10030     enable_python=internal
10031     ;;
10032 system)
10033     AC_MSG_RESULT([system])
10034     if test "$_os" = Darwin -a -z "$PYTHON"; then
10035         AC_MSG_ERROR([--enable-python=system doesn't work on macOS because the version provided is obsolete])
10036     fi
10037     ;;
10039     AC_MSG_ERROR([Incorrect --enable-python option])
10040     ;;
10041 esac
10043 if test $enable_python != no; then
10044     BUILD_TYPE="$BUILD_TYPE PYUNO"
10047 if test $enable_python = system; then
10048     if test -n "$PYTHON_CFLAGS" -a -n "$PYTHON_LIBS"; then
10049         # Fallback: Accept these in the environment, or as set above
10050         # for MacOSX.
10051         :
10052     elif test "$cross_compiling" != yes; then
10053         # Unset variables set by the above AM_PATH_PYTHON so that
10054         # we actually do check anew.
10055         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
10056         # This causes an error if no python command is found
10057         AM_PATH_PYTHON([3.3])
10058         python_include=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('INCLUDEPY'));"`
10059         python_version=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('VERSION'));"`
10060         python_libs=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBS'));"`
10061         python_libdir=`$PYTHON -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBDIR'));"`
10062         if test -z "$PKG_CONFIG"; then
10063             PYTHON_CFLAGS="-I$python_include"
10064             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
10065         elif $PKG_CONFIG --exists python-$python_version-embed; then
10066             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
10067             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
10068         elif $PKG_CONFIG --exists python-$python_version; then
10069             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
10070             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"
10071         else
10072             PYTHON_CFLAGS="-I$python_include"
10073             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
10074         fi
10075         FilterLibs "${PYTHON_LIBS}"
10076         PYTHON_LIBS="${filteredlibs}"
10077     else
10078         dnl How to find out the cross-compilation Python installation path?
10079         AC_MSG_CHECKING([for python version])
10080         AS_IF([test -n "$PYTHON_VERSION"],
10081               [AC_MSG_RESULT([$PYTHON_VERSION])],
10082               [AC_MSG_RESULT([not found])
10083                AC_MSG_ERROR([no usable python found])])
10084         test -n "$PYTHON_CFLAGS" && break
10085     fi
10087     dnl Check if the headers really work
10088     save_CPPFLAGS="$CPPFLAGS"
10089     CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
10090     AC_CHECK_HEADER(Python.h)
10091     CPPFLAGS="$save_CPPFLAGS"
10093     # let the PYTHON_FOR_BUILD match the same python installation that
10094     # provides PYTHON_CFLAGS/PYTHON_LDFLAGS for pyuno, which should be
10095     # better for PythonTests.
10096     PYTHON_FOR_BUILD=$PYTHON
10099 if test "$with_lxml" != no; then
10100     if test -z "$PYTHON_FOR_BUILD"; then
10101         case $build_os in
10102             cygwin)
10103                 AC_MSG_WARN([No system-provided python lxml, gla11y will only report widget classes and ids])
10104                 ;;
10105             *)
10106                 if test "$cross_compiling" != yes ; then
10107                     BUILD_TYPE="$BUILD_TYPE LXML"
10108                 fi
10109                 ;;
10110         esac
10111     else
10112         AC_MSG_CHECKING([for python lxml])
10113         if $PYTHON_FOR_BUILD -c "import lxml.etree as ET" 2> /dev/null ; then
10114             AC_MSG_RESULT([yes])
10115         else
10116             case $build_os in
10117                 cygwin)
10118                     AC_MSG_RESULT([no, gla11y will only report widget classes and ids])
10119                     ;;
10120                 *)
10121                     if test "$cross_compiling" != yes -a "x$ac_cv_header_Python_h" = "xyes"; then
10122                         if test -n ${SYSTEM_LIBXSLT} -o -n ${SYSTEM_LIBXML}; then
10123                             AC_MSG_RESULT([no, and no system libxml/libxslt, gla11y will only report widget classes and ids])
10124                         else
10125                             BUILD_TYPE="$BUILD_TYPE LXML"
10126                             AC_MSG_RESULT([no, using internal lxml])
10127                         fi
10128                     else
10129                         AC_MSG_RESULT([no, and system does not provide python development headers, gla11y will only report widget classes and ids])
10130                     fi
10131                     ;;
10132             esac
10133         fi
10134     fi
10137 if test \( "$cross_compiling" = yes -a -z "$PYTHON_FOR_BUILD" \) -o "$enable_python" = internal; then
10138     SYSTEM_PYTHON=
10139     PYTHON_VERSION_MAJOR=3
10140     PYTHON_VERSION_MINOR=8
10141     PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.19
10142     if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
10143         AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
10144     fi
10145     AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
10147     # Embedded Python dies without Home set
10148     if test "$HOME" = ""; then
10149         export HOME=""
10150     fi
10153 dnl By now enable_python should be "system", "internal" or "no"
10154 case $enable_python in
10155 system)
10156     SYSTEM_PYTHON=TRUE
10158     if test "x$ac_cv_header_Python_h" != "xyes"; then
10159        AC_MSG_ERROR([Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.])
10160     fi
10162     AC_LANG_PUSH(C)
10163     CFLAGS="$CFLAGS $PYTHON_CFLAGS"
10164     AC_MSG_CHECKING([for correct python library version])
10165        AC_RUN_IFELSE([AC_LANG_SOURCE([[
10166 #include <Python.h>
10168 int main(int argc, char **argv) {
10169    if ((PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 3)) return 0;
10170    else return 1;
10172        ]])],[AC_MSG_RESULT([ok])],[AC_MSG_ERROR([Python >= 3.3 is needed when building with Python 3])],[AC_MSG_RESULT([skipped; cross-compiling])])
10173     AC_LANG_POP(C)
10175     dnl FIXME Check if the Python library can be linked with, too?
10176     ;;
10178 internal)
10179     BUILD_TYPE="$BUILD_TYPE PYTHON"
10180     if test "$OS" = LINUX -o "$OS" = WNT ; then
10181         BUILD_TYPE="$BUILD_TYPE LIBFFI"
10182     fi
10183     ;;
10185     DISABLE_PYTHON=TRUE
10186     SYSTEM_PYTHON=
10187     ;;
10189     AC_MSG_ERROR([Internal configure script error, invalid enable_python value "$enable_python"])
10190     ;;
10191 esac
10193 AC_SUBST(DISABLE_PYTHON)
10194 AC_SUBST(SYSTEM_PYTHON)
10195 AC_SUBST(PYTHON_CFLAGS)
10196 AC_SUBST(PYTHON_FOR_BUILD)
10197 AC_SUBST(PYTHON_LIBS)
10198 AC_SUBST(PYTHON_VERSION)
10199 AC_SUBST(PYTHON_VERSION_MAJOR)
10200 AC_SUBST(PYTHON_VERSION_MINOR)
10202 AC_MSG_CHECKING([whether to build LibreLogo])
10203 case "$enable_python" in
10204 no|disable)
10205     AC_MSG_RESULT([no; Python disabled])
10206     ;;
10208     if test "${enable_librelogo}" = "no"; then
10209         AC_MSG_RESULT([no])
10210     else
10211         AC_MSG_RESULT([yes])
10212         BUILD_TYPE="${BUILD_TYPE} LIBRELOGO"
10213         AC_DEFINE([ENABLE_LIBRELOGO],1)
10214     fi
10215     ;;
10216 esac
10217 AC_SUBST(ENABLE_LIBRELOGO)
10219 ENABLE_MARIADBC=
10220 MARIADBC_MAJOR=1
10221 MARIADBC_MINOR=0
10222 MARIADBC_MICRO=2
10223 AC_MSG_CHECKING([whether to build the MariaDB/MySQL SDBC driver])
10224 if test "x$enable_mariadb_sdbc" != "xno" -a "$enable_mpl_subset" != "yes"; then
10225     ENABLE_MARIADBC=TRUE
10226     AC_MSG_RESULT([yes])
10227     BUILD_TYPE="$BUILD_TYPE MARIADBC"
10228 else
10229     AC_MSG_RESULT([no])
10231 AC_SUBST(ENABLE_MARIADBC)
10232 AC_SUBST(MARIADBC_MAJOR)
10233 AC_SUBST(MARIADBC_MINOR)
10234 AC_SUBST(MARIADBC_MICRO)
10236 if test "$ENABLE_MARIADBC" = "TRUE"; then
10237     dnl ===================================================================
10238     dnl Check for system MariaDB
10239     dnl ===================================================================
10241     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10242         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10243     fi
10245     AC_MSG_CHECKING([which MariaDB to use])
10246     if test "$with_system_mariadb" = "yes"; then
10247         AC_MSG_RESULT([external])
10248         SYSTEM_MARIADB_CONNECTOR_C=TRUE
10249         #AC_PATH_PROG(MARIADBCONFIG, [mariadb_config])
10250         if test -z "$MARIADBCONFIG"; then
10251             AC_PATH_PROG(MARIADBCONFIG, [mysql_config])
10252             if test -z "$MARIADBCONFIG"; then
10253                 AC_MSG_ERROR([mysql_config is missing. Install MySQL client library development package.])
10254                 #AC_MSG_ERROR([mariadb_config and mysql_config are missing. Install MariaDB or MySQL client library development package.])
10255             fi
10256         fi
10257         AC_MSG_CHECKING([MariaDB version])
10258         MARIADB_VERSION=`$MARIADBCONFIG --version`
10259         MARIADB_MAJOR=`$MARIADBCONFIG --version | cut -d"." -f1`
10260         if test "$MARIADB_MAJOR" -ge "5"; then
10261             AC_MSG_RESULT([OK])
10262         else
10263             AC_MSG_ERROR([too old, use 5.0.x or later])
10264         fi
10265         AC_MSG_CHECKING([for MariaDB Client library])
10266         MARIADB_CFLAGS=`$MARIADBCONFIG --cflags`
10267         if test "$COM_IS_CLANG" = TRUE; then
10268             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-fstack-protector-strong//)
10269         fi
10270         MARIADB_LIBS=`$MARIADBCONFIG --libs_r`
10271         dnl At least mariadb-5.5.34-3.fc20.x86_64 plus
10272         dnl mariadb-5.5.34-3.fc20.i686 reports 64-bit specific output even under
10273         dnl linux32:
10274         if test "$OS" = LINUX -a "$CPUNAME" = INTEL; then
10275             MARIADB_CFLAGS=$(printf '%s' "$MARIADB_CFLAGS" | sed -e s/-m64//)
10276             MARIADB_LIBS=$(printf '%s' "$MARIADB_LIBS" \
10277                 | sed -e 's|/lib64/|/lib/|')
10278         fi
10279         FilterLibs "${MARIADB_LIBS}"
10280         MARIADB_LIBS="${filteredlibs}"
10281         AC_MSG_RESULT([includes '$MARIADB_CFLAGS', libraries '$MARIADB_LIBS'])
10282         AC_MSG_CHECKING([whether to bundle the MySQL/MariaDB client library])
10283         if test "$enable_bundle_mariadb" = "yes"; then
10284             AC_MSG_RESULT([yes])
10285             BUNDLE_MARIADB_CONNECTOR_C=TRUE
10286             LIBMARIADB=lib$(echo "${MARIADB_LIBS}" | sed -e 's/[[[:space:]]]\{1,\}-l\([[^[:space:]]]\{1,\}\)/\
10288 /g' -e 's/^-l\([[^[:space:]]]\{1,\}\)[[[:space:]]]*/\
10290 /g' | grep -E '(mysqlclient|mariadb)')
10291             if test "$_os" = "Darwin"; then
10292                 LIBMARIADB=${LIBMARIADB}.dylib
10293                 if test "$with_gssapi" != "no"; then
10294                     WITH_GSSAPI=TRUE
10295                     save_LIBS=$LIBS
10296                     AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10297                         [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10298                     GSSAPI_LIBS=$LIBS
10299                     LIBS=$save_LIBS
10300                 fi
10301             elif test "$_os" = "WINNT"; then
10302                 LIBMARIADB=${LIBMARIADB}.dll
10303             else
10304                 LIBMARIADB=${LIBMARIADB}.so
10305                 if test "$with_gssapi" != "no"; then
10306                     WITH_GSSAPI=TRUE
10307                     save_LIBS=$LIBS
10308                     AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10309                         [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10310                     GSSAPI_LIBS=$LIBS
10311                     LIBS=$save_LIBS
10312                 fi
10313             fi
10314             LIBMARIADB_PATH=$($MARIADBCONFIG --variable=pkglibdir)
10315             AC_MSG_CHECKING([for $LIBMARIADB in $LIBMARIADB_PATH])
10316             if test -e "$LIBMARIADB_PATH/$LIBMARIADB"; then
10317                 AC_MSG_RESULT([found.])
10318                 PathFormat "$LIBMARIADB_PATH"
10319                 LIBMARIADB_PATH="$formatted_path"
10320             else
10321                 AC_MSG_ERROR([not found.])
10322             fi
10323         else
10324             AC_MSG_RESULT([no])
10325             BUNDLE_MARIADB_CONNECTOR_C=
10326         fi
10327     else
10328         AC_MSG_RESULT([internal])
10329         SYSTEM_MARIADB_CONNECTOR_C=
10330         MARIADB_CFLAGS="-I${WORKDIR}/UnpackedTarball/mariadb-connector-c/include"
10331         MARIADB_LIBS="-L${WORKDIR}/LinkTarget/StaticLibrary -lmariadb-connector-c"
10332         BUILD_TYPE="$BUILD_TYPE MARIADB_CONNECTOR_C"
10333     fi
10335     AC_SUBST(SYSTEM_MARIADB_CONNECTOR_C)
10336     AC_SUBST(MARIADB_CFLAGS)
10337     AC_SUBST(MARIADB_LIBS)
10338     AC_SUBST(LIBMARIADB)
10339     AC_SUBST(LIBMARIADB_PATH)
10340     AC_SUBST(BUNDLE_MARIADB_CONNECTOR_C)
10343 dnl ===================================================================
10344 dnl Check for system hsqldb
10345 dnl ===================================================================
10346 if test "$with_java" != "no" -a "$cross_compiling" != "yes"; then
10347     AC_MSG_CHECKING([which hsqldb to use])
10348     if test "$with_system_hsqldb" = "yes"; then
10349         AC_MSG_RESULT([external])
10350         SYSTEM_HSQLDB=TRUE
10351         if test -z $HSQLDB_JAR; then
10352             HSQLDB_JAR=/usr/share/java/hsqldb.jar
10353         fi
10354         if ! test -f $HSQLDB_JAR; then
10355                AC_MSG_ERROR(hsqldb.jar not found.)
10356         fi
10357         AC_MSG_CHECKING([whether hsqldb is 1.8.0.x])
10358         export HSQLDB_JAR
10359         if $PERL -e \
10360            'use Archive::Zip;
10361             my $file = "$ENV{'HSQLDB_JAR'}";
10362             my $zip = Archive::Zip->new( $file );
10363             my $mf = $zip->contents ( "META-INF/MANIFEST.MF" );
10364             if ( $mf =~ m/Specification-Version: 1.8.*/ )
10365             {
10366                 push @l, split(/\n/, $mf);
10367                 foreach my $line (@l)
10368                 {
10369                     if ($line =~ m/Specification-Version:/)
10370                     {
10371                         ($t, $version) = split (/:/,$line);
10372                         $version =~ s/^\s//;
10373                         ($a, $b, $c, $d) = split (/\./,$version);
10374                         if ($c == "0" && $d > "8")
10375                         {
10376                             exit 0;
10377                         }
10378                         else
10379                         {
10380                             exit 1;
10381                         }
10382                     }
10383                 }
10384             }
10385             else
10386             {
10387                 exit 1;
10388             }'; then
10389             AC_MSG_RESULT([yes])
10390         else
10391             AC_MSG_ERROR([no, you need hsqldb >= 1.8.0.9 but < 1.8.1])
10392         fi
10393     else
10394         AC_MSG_RESULT([internal])
10395         SYSTEM_HSQLDB=
10396         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10397         NEED_ANT=TRUE
10398     fi
10399 else
10400     if test "$with_java" != "no" -a -z "$HSQLDB_JAR"; then
10401         BUILD_TYPE="$BUILD_TYPE HSQLDB"
10402     fi
10404 AC_SUBST(SYSTEM_HSQLDB)
10405 AC_SUBST(HSQLDB_JAR)
10407 dnl ===================================================================
10408 dnl Check for PostgreSQL stuff
10409 dnl ===================================================================
10410 AC_MSG_CHECKING([whether to build the PostgreSQL SDBC driver])
10411 if test "x$enable_postgresql_sdbc" != "xno"; then
10412     AC_MSG_RESULT([yes])
10413     SCPDEFS="$SCPDEFS -DWITH_POSTGRESQL_SDBC"
10415     if test "$with_krb5" = "yes" -a "$enable_openssl" = "no"; then
10416         AC_MSG_ERROR([krb5 needs OpenSSL, but --disable-openssl was given.])
10417     fi
10418     if test "$with_gssapi" = "yes" -a "$enable_openssl" = "no"; then
10419         AC_MSG_ERROR([GSSAPI needs OpenSSL, but --disable-openssl was given.])
10420     fi
10422     postgres_interface=""
10423     if test "$with_system_postgresql" = "yes"; then
10424         postgres_interface="external PostgreSQL"
10425         SYSTEM_POSTGRESQL=TRUE
10426         if test "$_os" = Darwin; then
10427             supp_path=''
10428             for d in /Library/PostgreSQL/9.*/bin /sw/opt/postgresql/9.*/bin /opt/local/lib/postgresql9*/bin; do
10429                 pg_supp_path="$P_SEP$d$pg_supp_path"
10430             done
10431         fi
10432         AC_PATH_PROG(PGCONFIG, pg_config, ,$PATH$pg_supp_path)
10433         if test -n "$PGCONFIG"; then
10434             POSTGRESQL_INC=-I$(${PGCONFIG} --includedir)
10435             POSTGRESQL_LIB="-L$(${PGCONFIG} --libdir)"
10436         else
10437             PKG_CHECK_MODULES(POSTGRESQL, libpq, [
10438               POSTGRESQL_INC=$POSTGRESQL_CFLAGS
10439               POSTGRESQL_LIB=$POSTGRESQL_LIBS
10440             ],[
10441               AC_MSG_ERROR([pg_config or 'pkg-config libpq' needed; set PGCONFIG if not in PATH])
10442             ])
10443         fi
10444         FilterLibs "${POSTGRESQL_LIB}"
10445         POSTGRESQL_LIB="${filteredlibs}"
10446     else
10447         # if/when anything else than PostgreSQL uses Kerberos,
10448         # move this out of `test "x$enable_postgresql_sdbc" != "xno"'
10449         WITH_KRB5=
10450         WITH_GSSAPI=
10451         case "$_os" in
10452         Darwin)
10453             # macOS has system MIT Kerberos 5 since 10.4
10454             if test "$with_krb5" != "no"; then
10455                 WITH_KRB5=TRUE
10456                 save_LIBS=$LIBS
10457                 # Not sure whether it makes any sense here to search multiple potential libraries; it is not likely
10458                 # that the libraries where these functions are located on macOS will change, is it?
10459                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10460                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10461                 KRB5_LIBS=$LIBS
10462                 LIBS=$save_LIBS
10463                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10464                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10465                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10466                 LIBS=$save_LIBS
10467             fi
10468             if test "$with_gssapi" != "no"; then
10469                 WITH_GSSAPI=TRUE
10470                 save_LIBS=$LIBS
10471                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10472                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10473                 GSSAPI_LIBS=$LIBS
10474                 LIBS=$save_LIBS
10475             fi
10476             ;;
10477         WINNT)
10478             if test "$with_krb5" = "yes" -o "$with_gssapi" = "yes"; then
10479                 AC_MSG_ERROR([Refusing to enable MIT Kerberos 5 or GSSAPI on Windows.])
10480             fi
10481             ;;
10482         Linux|GNU|*BSD|DragonFly)
10483             if test "$with_krb5" != "no"; then
10484                 WITH_KRB5=TRUE
10485                 save_LIBS=$LIBS
10486                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10487                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10488                 KRB5_LIBS=$LIBS
10489                 LIBS=$save_LIBS
10490                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10491                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10492                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10493                 LIBS=$save_LIBS
10494             fi
10495             if test "$with_gssapi" != "no"; then
10496                 WITH_GSSAPI=TRUE
10497                 save_LIBS=$LIBS
10498                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10499                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10500                 GSSAPI_LIBS=$LIBS
10501                 LIBS=$save_LIBS
10502             fi
10503             ;;
10504         *)
10505             if test "$with_krb5" = "yes"; then
10506                 WITH_KRB5=TRUE
10507                 save_LIBS=$LIBS
10508                 AC_SEARCH_LIBS(com_err, [com_err 'com_err -lssl -lcrypto' krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10509                     [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
10510                 KRB5_LIBS=$LIBS
10511                 LIBS=$save_LIBS
10512                 AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
10513                     [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
10514                 KRB5_LIBS="$KRB5_LIBS $LIBS"
10515                 LIBS=$save_LIBS
10516             fi
10517             if test "$with_gssapi" = "yes"; then
10518                 WITH_GSSAPI=TRUE
10519                 save_LIBS=$LIBS
10520                 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
10521                     [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
10522                 LIBS=$save_LIBS
10523                 GSSAPI_LIBS=$LIBS
10524             fi
10525         esac
10527         if test -n "$with_libpq_path"; then
10528             SYSTEM_POSTGRESQL=TRUE
10529             postgres_interface="external libpq"
10530             POSTGRESQL_LIB="-L${with_libpq_path}/lib/"
10531             POSTGRESQL_INC=-I"${with_libpq_path}/include/"
10532         else
10533             SYSTEM_POSTGRESQL=
10534             postgres_interface="internal"
10535             POSTGRESQL_LIB=""
10536             POSTGRESQL_INC="%OVERRIDE_ME%"
10537             BUILD_TYPE="$BUILD_TYPE POSTGRESQL"
10538         fi
10539     fi
10541     AC_MSG_CHECKING([PostgreSQL C interface])
10542     AC_MSG_RESULT([$postgres_interface])
10544     if test "${SYSTEM_POSTGRESQL}" = "TRUE"; then
10545         AC_MSG_NOTICE([checking system PostgreSQL prerequisites])
10546         save_CFLAGS=$CFLAGS
10547         save_CPPFLAGS=$CPPFLAGS
10548         save_LIBS=$LIBS
10549         CPPFLAGS="${CPPFLAGS} ${POSTGRESQL_INC}"
10550         LIBS="${LIBS} ${POSTGRESQL_LIB}"
10551         AC_CHECK_HEADER([libpq-fe.h], [], [AC_MSG_ERROR([libpq-fe.h is needed])], [])
10552         AC_CHECK_LIB([pq], [PQconnectdbParams], [:],
10553             [AC_MSG_ERROR(libpq not found or too old. Need >= 9.0)], [])
10554         CFLAGS=$save_CFLAGS
10555         CPPFLAGS=$save_CPPFLAGS
10556         LIBS=$save_LIBS
10557     fi
10558     BUILD_POSTGRESQL_SDBC=TRUE
10559 else
10560     AC_MSG_RESULT([no])
10562 AC_SUBST(WITH_KRB5)
10563 AC_SUBST(WITH_GSSAPI)
10564 AC_SUBST(GSSAPI_LIBS)
10565 AC_SUBST(KRB5_LIBS)
10566 AC_SUBST(BUILD_POSTGRESQL_SDBC)
10567 AC_SUBST(SYSTEM_POSTGRESQL)
10568 AC_SUBST(POSTGRESQL_INC)
10569 AC_SUBST(POSTGRESQL_LIB)
10571 dnl ===================================================================
10572 dnl Check for Firebird stuff
10573 dnl ===================================================================
10574 ENABLE_FIREBIRD_SDBC=
10575 if test "$enable_firebird_sdbc" = "yes" ; then
10576     SCPDEFS="$SCPDEFS -DWITH_FIREBIRD_SDBC"
10578     dnl ===================================================================
10579     dnl Check for system Firebird
10580     dnl ===================================================================
10581     AC_MSG_CHECKING([which Firebird to use])
10582     if test "$with_system_firebird" = "yes"; then
10583         AC_MSG_RESULT([external])
10584         SYSTEM_FIREBIRD=TRUE
10585         AC_PATH_PROG(FIREBIRDCONFIG, [fb_config])
10586         if test -z "$FIREBIRDCONFIG"; then
10587             AC_MSG_NOTICE([No fb_config -- using pkg-config])
10588             PKG_CHECK_MODULES([FIREBIRD], [fbclient >= 3], [FIREBIRD_PKGNAME=fbclient], [
10589                 PKG_CHECK_MODULES([FIREBIRD], [fbembed], [FIREBIRD_PKGNAME=fbembed])
10590             ])
10591             FIREBIRD_VERSION=`pkg-config --modversion "$FIREBIRD_PKGNAME"`
10592         else
10593             AC_MSG_NOTICE([fb_config found])
10594             FIREBIRD_VERSION=`$FIREBIRDCONFIG --version`
10595             AC_MSG_CHECKING([for Firebird Client library])
10596             FIREBIRD_CFLAGS=`$FIREBIRDCONFIG --cflags`
10597             FIREBIRD_LIBS=`$FIREBIRDCONFIG --embedlibs`
10598             FilterLibs "${FIREBIRD_LIBS}"
10599             FIREBIRD_LIBS="${filteredlibs}"
10600         fi
10601         AC_MSG_RESULT([includes `$FIREBIRD_CFLAGS', libraries `$FIREBIRD_LIBS'])
10602         AC_MSG_CHECKING([Firebird version])
10603         if test -n "${FIREBIRD_VERSION}"; then
10604             FIREBIRD_MAJOR=`echo $FIREBIRD_VERSION | cut -d"." -f1`
10605             if test "$FIREBIRD_MAJOR" -ge "3"; then
10606                 AC_MSG_RESULT([OK])
10607             else
10608                 AC_MSG_ERROR([Ensure firebird >= 3 is installed])
10609             fi
10610         else
10611             save_CFLAGS="${CFLAGS}"
10612             CFLAGS="${CFLAGS} ${FIREBIRD_CFLAGS}"
10613             AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <ibase.h>
10614 #if defined(FB_API_VER) && FB_API_VER == 30
10615 int fb_api_is_30(void) { return 0; }
10616 #else
10617 #error "Wrong Firebird API version"
10618 #endif]])],AC_MSG_RESULT([OK]),AC_MSG_ERROR([Ensure firebird 3.0.x is installed]))
10619             CFLAGS="$save_CFLAGS"
10620         fi
10621         ENABLE_FIREBIRD_SDBC=TRUE
10622         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10623     elif test "$enable_database_connectivity" = no; then
10624         AC_MSG_RESULT([none])
10625     elif test "$cross_compiling" = "yes"; then
10626         AC_MSG_RESULT([none])
10627     else
10628         dnl Embedded Firebird has version 3.0
10629         dnl We need libatomic_ops for any non X86/X64 system
10630         if test "${CPUNAME}" != INTEL -a "${CPUNAME}" != X86_64; then
10631             dnl ===================================================================
10632             dnl Check for system libatomic_ops
10633             dnl ===================================================================
10634             libo_CHECK_SYSTEM_MODULE([libatomic_ops],[LIBATOMIC_OPS],[atomic_ops >= 0.7.2])
10635             if test "$with_system_libatomic_ops" = "yes"; then
10636                 SYSTEM_LIBATOMIC_OPS=TRUE
10637                 AC_CHECK_HEADERS(atomic_ops.h, [],
10638                 [AC_MSG_ERROR(atomic_ops.h not found. install libatomic_ops)], [])
10639             else
10640                 SYSTEM_LIBATOMIC_OPS=
10641                 LIBATOMIC_OPS_CFLAGS="-I${WORKDIR}/UnpackedTarball/libatomic_ops/include"
10642                 LIBATOMIC_OPS_LIBS="-latomic_ops"
10643                 BUILD_TYPE="$BUILD_TYPE LIBATOMIC_OPS"
10644             fi
10645         fi
10647         AC_MSG_RESULT([internal])
10648         SYSTEM_FIREBIRD=
10649         FIREBIRD_CFLAGS="-I${WORKDIR}/UnpackedTarball/firebird/gen/Release/firebird/include"
10650         FIREBIRD_LIBS="-lfbclient"
10652         if test "$with_system_libtommath" = "yes"; then
10653             SYSTEM_LIBTOMMATH=TRUE
10654             dnl check for tommath presence
10655             save_LIBS=$LIBS
10656             AC_CHECK_HEADER(tommath.h,,AC_MSG_ERROR(Include file for tommath not found - please install development tommath package))
10657             AC_CHECK_LIB(tommath, mp_init, LIBTOMMATH_LIBS=-ltommath, AC_MSG_ERROR(Library tommath not found - please install development tommath package))
10658             LIBS=$save_LIBS
10659         else
10660             SYSTEM_LIBTOMMATH=
10661             LIBTOMMATH_CFLAGS="-I${WORKDIR}/UnpackedTarball/libtommath"
10662             LIBTOMMATH_LIBS="-ltommath"
10663             BUILD_TYPE="$BUILD_TYPE LIBTOMMATH"
10664         fi
10666         BUILD_TYPE="$BUILD_TYPE FIREBIRD"
10667         ENABLE_FIREBIRD_SDBC=TRUE
10668         AC_DEFINE([ENABLE_FIREBIRD_SDBC],1)
10669     fi
10671 AC_SUBST(ENABLE_FIREBIRD_SDBC)
10672 AC_SUBST(SYSTEM_LIBATOMIC_OPS)
10673 AC_SUBST(LIBATOMIC_OPS_CFLAGS)
10674 AC_SUBST(LIBATOMIC_OPS_LIBS)
10675 AC_SUBST(SYSTEM_FIREBIRD)
10676 AC_SUBST(FIREBIRD_CFLAGS)
10677 AC_SUBST(FIREBIRD_LIBS)
10678 AC_SUBST(SYSTEM_LIBTOMMATH)
10679 AC_SUBST(LIBTOMMATH_CFLAGS)
10680 AC_SUBST(LIBTOMMATH_LIBS)
10682 dnl ===================================================================
10683 dnl Check for system curl
10684 dnl ===================================================================
10685 libo_CHECK_SYSTEM_MODULE([curl],[CURL],[libcurl >= 7.68.0],enabled)
10687 dnl ===================================================================
10688 dnl Check for system boost
10689 dnl ===================================================================
10690 AC_MSG_CHECKING([which boost to use])
10691 if test "$with_system_boost" = "yes"; then
10692     AC_MSG_RESULT([external])
10693     SYSTEM_BOOST=TRUE
10694     AX_BOOST_BASE([1.69],,[AC_MSG_ERROR([no suitable Boost found])])
10695     AX_BOOST_DATE_TIME
10696     AX_BOOST_FILESYSTEM
10697     AX_BOOST_IOSTREAMS
10698     AX_BOOST_LOCALE
10699     AC_LANG_PUSH([C++])
10700     save_CXXFLAGS=$CXXFLAGS
10701     CXXFLAGS="$CXXFLAGS $BOOST_CPPFLAGS $CXXFLAGS_CXX11"
10702     AC_CHECK_HEADER(boost/shared_ptr.hpp, [],
10703        [AC_MSG_ERROR(boost/shared_ptr.hpp not found. install boost)], [])
10704     AC_CHECK_HEADER(boost/spirit/include/classic_core.hpp, [],
10705        [AC_MSG_ERROR(boost/spirit/include/classic_core.hpp not found. install boost >= 1.36)], [])
10706     CXXFLAGS=$save_CXXFLAGS
10707     AC_LANG_POP([C++])
10708     # this is in m4/ax_boost_base.m4
10709     FilterLibs "${BOOST_LDFLAGS}"
10710     BOOST_LDFLAGS="${filteredlibs}"
10711 else
10712     AC_MSG_RESULT([internal])
10713     BUILD_TYPE="$BUILD_TYPE BOOST"
10714     SYSTEM_BOOST=
10715     if test "${COM}" = "GCC" -o "${COM_IS_CLANG}" = "TRUE"; then
10716         # use warning-suppressing wrapper headers
10717         BOOST_CPPFLAGS="-I${SRC_ROOT}/external/boost/include -I${WORKDIR}/UnpackedTarball/boost"
10718     else
10719         BOOST_CPPFLAGS="-I${WORKDIR}/UnpackedTarball/boost"
10720     fi
10722 AC_SUBST(SYSTEM_BOOST)
10724 dnl ===================================================================
10725 dnl Check for system mdds
10726 dnl ===================================================================
10727 MDDS_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/mdds/include"
10728 libo_CHECK_SYSTEM_MODULE([mdds],[MDDS],[mdds-2.1 >= 2.1.0])
10730 dnl ===================================================================
10731 dnl Check for system dragonbox
10732 dnl ===================================================================
10733 AC_MSG_CHECKING([which dragonbox to use])
10734 if test "$with_system_dragonbox" = "yes"; then
10735     AC_MSG_RESULT([external])
10736     SYSTEM_DRAGONBOX=TRUE
10737     AC_LANG_PUSH([C++])
10738     save_CPPFLAGS=$CPPFLAGS
10739     # This is where upstream installs to, unfortunately no .pc or so...
10740     DRAGONBOX_CFLAGS=-I/usr/include/dragonbox-1.1.3
10741     CPPFLAGS="$CPPFLAGS $DRAGONBOX_CFLAGS"
10742     AC_CHECK_HEADER([dragonbox/dragonbox.h], [],
10743        [AC_MSG_ERROR([dragonbox/dragonbox.h not found. install dragonbox])], [])
10744     AC_LANG_POP([C++])
10745     CPPFLAGS=$save_CPPFLAGS
10746 else
10747     AC_MSG_RESULT([internal])
10748     BUILD_TYPE="$BUILD_TYPE DRAGONBOX"
10749     SYSTEM_DRAGONBOX=
10751 AC_SUBST([SYSTEM_DRAGONBOX])
10752 AC_SUBST([DRAGONBOX_CFLAGS])
10754 dnl ===================================================================
10755 dnl Check for system frozen
10756 dnl ===================================================================
10757 AC_MSG_CHECKING([which frozen to use])
10758 if test "$with_system_frozen" = "yes"; then
10759     AC_MSG_RESULT([external])
10760     SYSTEM_FROZEN=TRUE
10761     AC_LANG_PUSH([C++])
10762     save_CPPFLAGS=$CPPFLAGS
10763     AC_CHECK_HEADER([frozen/unordered_map.h], [],
10764        [AC_MSG_ERROR([frozen/unordered_map.h not found. install frozen headers])], [])
10765     AC_LANG_POP([C++])
10766     CPPFLAGS=$save_CPPFLAGS
10767 else
10768     AC_MSG_RESULT([internal])
10769     BUILD_TYPE="$BUILD_TYPE FROZEN"
10770     SYSTEM_FROZEN=
10772 AC_SUBST([SYSTEM_FROZEN])
10773 AC_SUBST([FROZEN_CFLAGS])
10775 dnl ===================================================================
10776 dnl Check for system libfixmath
10777 dnl ===================================================================
10778 AC_MSG_CHECKING([which libfixmath to use])
10779 if test "$with_system_libfixmath" = "yes"; then
10780     AC_MSG_RESULT([external])
10781     SYSTEM_LIBFIXMATH=TRUE
10782     AC_LANG_PUSH([C++])
10783     AC_CHECK_HEADER([libfixmath/fix16.hpp], [],
10784        [AC_MSG_ERROR([libfixmath/fix16.hpp not found. install libfixmath])], [])
10785     AC_CHECK_LIB([libfixmath], [fix16_mul], [LIBFIXMATH_LIBS=-llibfixmath],
10786                  [AC_CHECK_LIB([fixmath], [fix16_mul], [LIBFIXMATH_LIBS=-lfixmath],
10787                                [AC_MSG_ERROR(libfixmath lib not found or functional)])])
10788     AC_LANG_POP([C++])
10789 else
10790     AC_MSG_RESULT([internal])
10791     SYSTEM_LIBFIXMATH=
10792     LIBFIXMATH_LIBS=
10794 AC_SUBST([SYSTEM_LIBFIXMATH])
10795 AC_SUBST([LIBFIXMATH_LIBS])
10797 dnl ===================================================================
10798 dnl Check for system glm
10799 dnl ===================================================================
10800 AC_MSG_CHECKING([which glm to use])
10801 if test "$with_system_glm" = "yes"; then
10802     AC_MSG_RESULT([external])
10803     SYSTEM_GLM=TRUE
10804     AC_LANG_PUSH([C++])
10805     AC_CHECK_HEADER([glm/glm.hpp], [],
10806        [AC_MSG_ERROR([glm/glm.hpp not found. install glm])], [])
10807     AC_LANG_POP([C++])
10808 else
10809     AC_MSG_RESULT([internal])
10810     BUILD_TYPE="$BUILD_TYPE GLM"
10811     SYSTEM_GLM=
10812     GLM_CFLAGS="${ISYSTEM}${WORKDIR}/UnpackedTarball/glm"
10814 AC_SUBST([GLM_CFLAGS])
10815 AC_SUBST([SYSTEM_GLM])
10817 dnl ===================================================================
10818 dnl Check for system odbc
10819 dnl ===================================================================
10820 AC_MSG_CHECKING([which odbc headers to use])
10821 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
10822     AC_MSG_RESULT([external])
10823     SYSTEM_ODBC_HEADERS=TRUE
10825     if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
10826         save_CPPFLAGS=$CPPFLAGS
10827         find_winsdk
10828         PathFormat "$winsdktest"
10829         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"
10830         AC_CHECK_HEADER(sqlext.h, [],
10831             [AC_MSG_ERROR(odbc not found. install odbc)],
10832             [#include <windows.h>])
10833         CPPFLAGS=$save_CPPFLAGS
10834     else
10835         AC_CHECK_HEADER(sqlext.h, [],
10836             [AC_MSG_ERROR(odbc not found. install odbc)],[])
10837     fi
10838 elif test "$enable_database_connectivity" = no; then
10839     AC_MSG_RESULT([none])
10840 else
10841     AC_MSG_RESULT([internal])
10842     SYSTEM_ODBC_HEADERS=
10844 AC_SUBST(SYSTEM_ODBC_HEADERS)
10846 dnl ===================================================================
10847 dnl Check for system NSS
10848 dnl ===================================================================
10849 if test "$enable_fuzzers" != "yes" -a "$enable_nss" = "yes"; then
10850     libo_CHECK_SYSTEM_MODULE([nss],[NSS],[nss >= 3.9.3 nspr >= 4.8],,system-if-linux)
10851     AC_DEFINE(HAVE_FEATURE_NSS)
10852     ENABLE_NSS=TRUE
10853 elif test $_os != iOS -a "$enable_openssl" != "no"; then
10854     with_tls=openssl
10856 AC_SUBST(ENABLE_NSS)
10858 dnl ===================================================================
10859 dnl Enable LDAP support
10860 dnl ===================================================================
10862 if test "$test_openldap" = yes; then
10863     AC_MSG_CHECKING([whether to enable LDAP support])
10864     if test "$enable_ldap" = yes -a \( "$enable_openssl" = yes -o "$with_system_openldap" = yes \); then
10865         AC_MSG_RESULT([yes])
10866         ENABLE_LDAP=TRUE
10867     else
10868         if test "$enable_ldap" != "yes"; then
10869             AC_MSG_RESULT([no])
10870         else
10871             AC_MSG_RESULT([no (needs OPENSSL or system openldap)])
10872         fi
10873     fi
10875 dnl ===================================================================
10876 dnl Check for system openldap
10877 dnl ===================================================================
10879     if test "$ENABLE_LDAP" = TRUE; then
10880         AC_MSG_CHECKING([which openldap library to use])
10881         if test "$with_system_openldap" = yes; then
10882             AC_MSG_RESULT([external])
10883             SYSTEM_OPENLDAP=TRUE
10884             AC_CHECK_HEADERS(ldap.h, [], [AC_MSG_ERROR(ldap.h not found. install openldap libs)], [])
10885             AC_CHECK_LIB([ldap], [ldap_simple_bind_s], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10886             AC_CHECK_LIB([ldap], [ldap_set_option], [:], [AC_MSG_ERROR(openldap lib not found or functional)], [])
10887         else
10888             AC_MSG_RESULT([internal])
10889             BUILD_TYPE="$BUILD_TYPE OPENLDAP"
10890         fi
10891     fi
10894 AC_SUBST(ENABLE_LDAP)
10895 AC_SUBST(SYSTEM_OPENLDAP)
10897 dnl ===================================================================
10898 dnl Check for TLS/SSL and cryptographic implementation to use
10899 dnl ===================================================================
10900 AC_MSG_CHECKING([which TLS/SSL and cryptographic implementation to use])
10901 if test -n "$with_tls"; then
10902     case $with_tls in
10903     openssl)
10904         AC_DEFINE(USE_TLS_OPENSSL)
10905         TLS=OPENSSL
10906         AC_MSG_RESULT([$TLS])
10908         if test "$enable_openssl" != "yes"; then
10909             AC_MSG_ERROR(["Disabling OpenSSL was requested, but the requested TLS to use is actually OpenSSL."])
10910         fi
10912         # warn that OpenSSL has been selected but not all TLS code has this option
10913         AC_MSG_WARN([TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS])
10914         add_warning "TLS/SSL implementation to use is OpenSSL but some code may still depend on NSS"
10915         ;;
10916     nss)
10917         AC_DEFINE(USE_TLS_NSS)
10918         TLS=NSS
10919         AC_MSG_RESULT([$TLS])
10920         ;;
10921     no)
10922         AC_MSG_RESULT([none])
10923         AC_MSG_WARN([Skipping TLS/SSL])
10924         ;;
10925     *)
10926         AC_MSG_RESULT([])
10927         AC_MSG_ERROR([unsupported implementation $with_tls. Supported are:
10928 openssl - OpenSSL
10929 nss - Mozilla's Network Security Services (NSS)
10930     ])
10931         ;;
10932     esac
10933 else
10934     # default to using NSS, it results in smaller oox lib
10935     AC_DEFINE(USE_TLS_NSS)
10936     TLS=NSS
10937     AC_MSG_RESULT([$TLS])
10939 AC_SUBST(TLS)
10941 dnl ===================================================================
10942 dnl Check for system sane
10943 dnl ===================================================================
10944 AC_MSG_CHECKING([which sane header to use])
10945 if test "$with_system_sane" = "yes"; then
10946     AC_MSG_RESULT([external])
10947     AC_CHECK_HEADER(sane/sane.h, [],
10948       [AC_MSG_ERROR(sane not found. install sane)], [])
10949 else
10950     AC_MSG_RESULT([internal])
10951     BUILD_TYPE="$BUILD_TYPE SANE"
10954 dnl ===================================================================
10955 dnl Check for system icu
10956 dnl ===================================================================
10957 ICU_MAJOR=73
10958 ICU_MINOR=2
10959 ICU_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/icu/source/i18n -I${WORKDIR}/UnpackedTarball/icu/source/common"
10960 ICU_LIBS_internal="-L${WORKDIR}/UnpackedTarball/icu/source/lib"
10961 libo_CHECK_SYSTEM_MODULE([icu],[ICU],[icu-i18n >= 66])
10962 if test "$SYSTEM_ICU" = TRUE; then
10963     AC_LANG_PUSH([C++])
10964     AC_MSG_CHECKING([for unicode/rbbi.h])
10965     AC_PREPROC_IFELSE([AC_LANG_SOURCE([[unicode/rbbi.h]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([icu headers not found])])
10966     AC_LANG_POP([C++])
10968     ICU_VERSION=`$PKG_CONFIG --modversion icu-i18n 2>/dev/null`
10969     ICU_MAJOR=`echo $ICU_VERSION | cut -d"." -f1`
10970     ICU_MINOR=`echo $ICU_VERSION | cut -d"." -f2`
10972     if test "$CROSS_COMPILING" != TRUE; then
10973         # using the system icu tools can lead to version confusion, use the
10974         # ones from the build environment when cross-compiling
10975         AC_PATH_PROG(SYSTEM_GENBRK, genbrk, [], [$PATH:/usr/sbin:/sbin])
10976         if test -z "$SYSTEM_GENBRK"; then
10977             AC_MSG_ERROR([\'genbrk\' not found in \$PATH, install the icu development tool \'genbrk\'])
10978         fi
10979         AC_PATH_PROG(SYSTEM_GENCCODE, genccode, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10980         if test -z "$SYSTEM_GENCCODE"; then
10981             AC_MSG_ERROR([\'genccode\' not found in \$PATH, install the icu development tool \'genccode\'])
10982         fi
10983         AC_PATH_PROG(SYSTEM_GENCMN, gencmn, [], [$PATH:/usr/sbin:/sbin:/usr/local/sbin])
10984         if test -z "$SYSTEM_GENCMN"; then
10985             AC_MSG_ERROR([\'gencmn\' not found in \$PATH, install the icu development tool \'gencmn\'])
10986         fi
10987     fi
10990 AC_SUBST(SYSTEM_GENBRK)
10991 AC_SUBST(SYSTEM_GENCCODE)
10992 AC_SUBST(SYSTEM_GENCMN)
10993 AC_SUBST(ICU_MAJOR)
10994 AC_SUBST(ICU_MINOR)
10996 dnl ==================================================================
10997 dnl CURL
10998 dnl ==================================================================
10999 if test "$enable_curl" == "yes"; then
11000     AC_DEFINE([HAVE_FEATURE_CURL])
11003 dnl ==================================================================
11004 dnl Breakpad
11005 dnl ==================================================================
11006 DEFAULT_CRASHDUMP_VALUE="true"
11007 AC_MSG_CHECKING([whether to enable breakpad])
11008 if test "$enable_breakpad" != yes; then
11009     AC_MSG_RESULT([no])
11010 else
11011     if test "$enable_curl" != "yes"; then
11012         AC_MSG_ERROR([--disable-breakpad must be used when --disable-curl is used])
11013     fi
11014     AC_MSG_RESULT([yes])
11015     ENABLE_BREAKPAD="TRUE"
11016     AC_DEFINE(ENABLE_BREAKPAD)
11017     AC_DEFINE(HAVE_FEATURE_BREAKPAD, 1)
11018     BUILD_TYPE="$BUILD_TYPE BREAKPAD"
11020     AC_MSG_CHECKING([for disable crash dump])
11021     if test "$enable_crashdump" = no; then
11022         DEFAULT_CRASHDUMP_VALUE="false"
11023         AC_MSG_RESULT([yes])
11024     else
11025        AC_MSG_RESULT([no])
11026     fi
11028     AC_MSG_CHECKING([for crashreport config])
11029     if test "$with_symbol_config" = "no"; then
11030         BREAKPAD_SYMBOL_CONFIG="invalid"
11031         AC_MSG_RESULT([no])
11032     else
11033         BREAKPAD_SYMBOL_CONFIG="$with_symbol_config"
11034         AC_DEFINE(BREAKPAD_SYMBOL_CONFIG)
11035         AC_MSG_RESULT([yes])
11036     fi
11037     AC_SUBST(BREAKPAD_SYMBOL_CONFIG)
11039 AC_SUBST(ENABLE_BREAKPAD)
11040 AC_SUBST(DEFAULT_CRASHDUMP_VALUE)
11042 dnl ==================================================================
11043 dnl libcmis
11044 dnl ==================================================================
11045 if test "$enable_libcmis" == "yes"; then
11046     if test "$enable_curl" != "yes"; then
11047         AC_MSG_ERROR([--disable-libcmis must be used when --disable-curl is used])
11048     fi
11051 dnl ===================================================================
11052 dnl Orcus
11053 dnl ===================================================================
11054 libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.18 >= 0.19.1])
11055 if test "$with_system_orcus" != "yes"; then
11056     if test "$SYSTEM_BOOST" = "TRUE"; then
11057         dnl Link with Boost.System
11058         dnl This seems to be necessary since boost 1.50 (1.48 does not need it,
11059         dnl 1.49 is untested). The macro BOOST_THREAD_DONT_USE_SYSTEM mentioned
11060         dnl in documentation has no effect.
11061         AX_BOOST_SYSTEM
11062     fi
11064 dnl FIXME by renaming SYSTEM_LIBORCUS to SYSTEM_ORCUS in the build system world
11065 SYSTEM_LIBORCUS=$SYSTEM_ORCUS
11066 AC_SUBST([BOOST_SYSTEM_LIB])
11067 AC_SUBST(SYSTEM_LIBORCUS)
11069 dnl ===================================================================
11070 dnl HarfBuzz
11071 dnl ===================================================================
11072 harfbuzz_required_version=5.1.0
11074 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC"
11075 HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src"
11076 case "$_os" in
11077     Linux)
11078         GRAPHITE_LIBS_internal="${WORKDIR}/LinkTarget/StaticLibrary/libgraphite.a"
11079         HARFBUZZ_LIBS_internal="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.a"
11080         ;;
11081     *)
11082         GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite"
11083         HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz"
11084         ;;
11085 esac
11086 libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3])
11087 libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= $harfbuzz_required_version])
11089 if test "$COM" = "MSC"; then # override the above
11090     GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib"
11091     HARFBUZZ_LIBS="${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs/libharfbuzz.lib"
11094 if test "$with_system_harfbuzz" = "yes"; then
11095     if test "$with_system_graphite" = "no"; then
11096         AC_MSG_ERROR([--with-system-graphite must be used when --with-system-harfbuzz is used])
11097     fi
11098     AC_MSG_CHECKING([whether system Harfbuzz is built with Graphite support])
11099     save_LIBS="$LIBS"
11100     save_CFLAGS="$CFLAGS"
11101     LIBS="$LIBS $HARFBUZZ_LIBS"
11102     CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
11103     AC_CHECK_FUNC(hb_graphite2_face_get_gr_face,,[AC_MSG_ERROR([Harfbuzz needs to be built with Graphite support.])])
11104     LIBS="$save_LIBS"
11105     CFLAGS="$save_CFLAGS"
11106 else
11107     if test "$with_system_graphite" = "yes"; then
11108         AC_MSG_ERROR([--without-system-graphite must be used when --without-system-harfbuzz is used])
11109     fi
11112 if test "$USING_X11" = TRUE; then
11113     AC_PATH_X
11114     AC_PATH_XTRA
11115     CPPFLAGS="$CPPFLAGS $X_CFLAGS"
11117     if test -z "$x_includes"; then
11118         x_includes="default_x_includes"
11119     fi
11120     if test -z "$x_libraries"; then
11121         x_libraries="default_x_libraries"
11122     fi
11123     CFLAGS="$CFLAGS $X_CFLAGS"
11124     LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
11125     AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", [AC_MSG_ERROR([X Development libraries not found])])
11126 else
11127     x_includes="no_x_includes"
11128     x_libraries="no_x_libraries"
11131 if test "$USING_X11" = TRUE; then
11132     dnl ===================================================================
11133     dnl Check for extension headers
11134     dnl ===================================================================
11135     AC_CHECK_HEADERS(X11/extensions/shape.h,[],[AC_MSG_ERROR([libXext headers not found])],
11136      [#include <X11/extensions/shape.h>])
11138     # vcl needs ICE and SM
11139     AC_CHECK_HEADERS(X11/ICE/ICElib.h,[],[AC_MSG_ERROR([libICE headers not found])])
11140     AC_CHECK_LIB([ICE], [IceConnectionNumber], [:],
11141         [AC_MSG_ERROR(ICE library not found)])
11142     AC_CHECK_HEADERS(X11/SM/SMlib.h,[],[AC_MSG_ERROR([libSM headers not found])])
11143     AC_CHECK_LIB([SM], [SmcOpenConnection], [:],
11144         [AC_MSG_ERROR(SM library not found)])
11147 if test "$USING_X11" = TRUE -a "$ENABLE_JAVA" != ""; then
11148     # bean/native/unix/com_sun_star_comp_beans_LocalOfficeWindow.c needs Xt
11149     AC_CHECK_HEADERS(X11/Intrinsic.h,[],[AC_MSG_ERROR([libXt headers not found])])
11152 dnl ===================================================================
11153 dnl Check for system Xrender
11154 dnl ===================================================================
11155 AC_MSG_CHECKING([whether to use Xrender])
11156 if test "$USING_X11" = TRUE -a  "$test_xrender" = "yes"; then
11157     AC_MSG_RESULT([yes])
11158     PKG_CHECK_MODULES(XRENDER, xrender)
11159     XRENDER_CFLAGS=$(printf '%s' "$XRENDER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11160     FilterLibs "${XRENDER_LIBS}"
11161     XRENDER_LIBS="${filteredlibs}"
11162     AC_CHECK_LIB([Xrender], [XRenderQueryVersion], [:],
11163       [AC_MSG_ERROR(libXrender not found or functional)], [])
11164     AC_CHECK_HEADER(X11/extensions/Xrender.h, [],
11165       [AC_MSG_ERROR(Xrender not found. install X)], [])
11166 else
11167     AC_MSG_RESULT([no])
11169 AC_SUBST(XRENDER_CFLAGS)
11170 AC_SUBST(XRENDER_LIBS)
11172 dnl ===================================================================
11173 dnl Check for XRandr
11174 dnl ===================================================================
11175 AC_MSG_CHECKING([whether to enable RandR support])
11176 if test "$USING_X11" = TRUE -a "$test_randr" = "yes" -a \( "$enable_randr" = "yes" -o "$enable_randr" = "TRUE" \); then
11177     AC_MSG_RESULT([yes])
11178     PKG_CHECK_MODULES(XRANDR, xrandr >= 1.2, ENABLE_RANDR="TRUE", ENABLE_RANDR="")
11179     if test "$ENABLE_RANDR" != "TRUE"; then
11180         AC_CHECK_HEADER(X11/extensions/Xrandr.h, [],
11181                     [AC_MSG_ERROR([X11/extensions/Xrandr.h could not be found. X11 dev missing?])], [])
11182         XRANDR_CFLAGS=" "
11183         AC_CHECK_LIB([Xrandr], [XRRQueryExtension], [:],
11184           [ AC_MSG_ERROR(libXrandr not found or functional) ], [])
11185         XRANDR_LIBS="-lXrandr "
11186         ENABLE_RANDR="TRUE"
11187     fi
11188     XRANDR_CFLAGS=$(printf '%s' "$XRANDR_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11189     FilterLibs "${XRANDR_LIBS}"
11190     XRANDR_LIBS="${filteredlibs}"
11191 else
11192     ENABLE_RANDR=""
11193     AC_MSG_RESULT([no])
11195 AC_SUBST(XRANDR_CFLAGS)
11196 AC_SUBST(XRANDR_LIBS)
11197 AC_SUBST(ENABLE_RANDR)
11199 if test -z "$with_webdav"; then
11200     with_webdav=$test_webdav
11203 AC_MSG_CHECKING([for WebDAV support])
11204 case "$with_webdav" in
11206     AC_MSG_RESULT([no])
11207     WITH_WEBDAV=""
11208     ;;
11210     AC_MSG_RESULT([yes])
11211     # curl is already mandatory (almost) and checked elsewhere
11212     if test "$enable_curl" = "no"; then
11213         AC_MSG_ERROR(["--without-webdav must be used when --disable-curl is used"])
11214     fi
11215     WITH_WEBDAV=TRUE
11216     ;;
11217 esac
11218 AC_SUBST(WITH_WEBDAV)
11220 dnl ===================================================================
11221 dnl Check for disabling cve_tests
11222 dnl ===================================================================
11223 AC_MSG_CHECKING([whether to execute CVE tests])
11224 if test "$enable_cve_tests" = "no"; then
11225     AC_MSG_RESULT([no])
11226     DISABLE_CVE_TESTS=TRUE
11227     AC_SUBST(DISABLE_CVE_TESTS)
11228 else
11229     AC_MSG_RESULT([yes])
11232 dnl ===================================================================
11233 dnl Check for system openssl
11234 dnl ===================================================================
11235 ENABLE_OPENSSL=
11236 AC_MSG_CHECKING([whether to disable OpenSSL usage])
11237 if test "$enable_openssl" = "yes"; then
11238     AC_MSG_RESULT([no])
11239     ENABLE_OPENSSL=TRUE
11240     if test "$_os" = Darwin ; then
11241         # OpenSSL is deprecated when building for 10.7 or later.
11242         #
11243         # https://stackoverflow.com/questions/7406946/why-is-apple-deprecating-openssl-in-macos-10-7-lion
11244         # https://stackoverflow.com/questions/7475914/libcrypto-deprecated-on-mac-os-x-10-7-lion
11246         with_system_openssl=no
11247         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11248     elif test "$_os" = "FreeBSD" -o "$_os" = "NetBSD" -o "$_os" = "OpenBSD" -o "$_os" = "DragonFly" \
11249             && test "$with_system_openssl" != "no"; then
11250         with_system_openssl=yes
11251         SYSTEM_OPENSSL=TRUE
11252         OPENSSL_CFLAGS=
11253         OPENSSL_LIBS="-lssl -lcrypto"
11254     else
11255         libo_CHECK_SYSTEM_MODULE([openssl],[OPENSSL],[openssl])
11256         if test -n "${SYSTEM_OPENSSL}"; then
11257             AC_DEFINE([SYSTEM_OPENSSL])
11258         fi
11259     fi
11260     if test "$with_system_openssl" = "yes"; then
11261         AC_MSG_CHECKING([whether openssl supports SHA512])
11262         AC_LANG_PUSH([C])
11263         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <openssl/sha.h>]],[[
11264             SHA512_CTX context;
11265 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, openssl too old. Need >= 0.9.8.])])
11266         AC_LANG_POP(C)
11267     fi
11268 else
11269     AC_MSG_RESULT([yes])
11271     # warn that although OpenSSL is disabled, system libraries may depend on it
11272     AC_MSG_WARN([OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies])
11273     add_warning "OpenSSL has been disabled. No code compiled here will make use of it but system libraries may create indirect dependencies"
11276 AC_SUBST([ENABLE_OPENSSL])
11278 if test "$enable_cipher_openssl_backend" = yes && test "$ENABLE_OPENSSL" != TRUE; then
11279     if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then
11280         AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no])
11281         enable_cipher_openssl_backend=no
11282     else
11283         AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.])
11284     fi
11286 AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h])
11287 ENABLE_CIPHER_OPENSSL_BACKEND=
11288 if test "$enable_cipher_openssl_backend" = yes; then
11289     AC_MSG_RESULT([yes])
11290     ENABLE_CIPHER_OPENSSL_BACKEND=TRUE
11291 else
11292     AC_MSG_RESULT([no])
11294 AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND])
11296 dnl ===================================================================
11297 dnl Select the crypto backends used by LO
11298 dnl ===================================================================
11300 if test "$build_crypto" = yes; then
11301     if test "$OS" = WNT; then
11302         BUILD_TYPE="$BUILD_TYPE CRYPTO_MSCAPI"
11303         AC_DEFINE([USE_CRYPTO_MSCAPI])
11304     elif test "$ENABLE_NSS" = TRUE; then
11305         BUILD_TYPE="$BUILD_TYPE CRYPTO_NSS"
11306         AC_DEFINE([USE_CRYPTO_NSS])
11307     fi
11310 ARGON2_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/argon2/include"
11311 if test "$COM" = "MSC"; then
11312     ARGON2_LIBS_internal="${WORKDIR}/UnpackedTarball/argon2/vs2015/build/Argon2OptDll.lib"
11313 else
11314     ARGON2_LIBS_internal="${WORKDIR}/UnpackedTarball/argon2/libargon2.a"
11316 libo_CHECK_SYSTEM_MODULE([argon2],[ARGON2],[libargon2])
11318 dnl ===================================================================
11319 dnl Check for system redland
11320 dnl ===================================================================
11321 dnl redland: versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
11322 dnl raptor2: need at least 2.0.7 for CVE-2012-0037
11323 libo_CHECK_SYSTEM_MODULE([redland],[REDLAND],[redland >= 1.0.8 raptor2 >= 2.0.7])
11324 if test "$with_system_redland" = "yes"; then
11325     AC_CHECK_LIB([rdf], [librdf_world_set_raptor_init_handler], [:],
11326             [AC_MSG_ERROR(librdf too old. Need >= 1.0.16)], [])
11327 else
11328     RAPTOR_MAJOR="0"
11329     RASQAL_MAJOR="3"
11330     REDLAND_MAJOR="0"
11332 AC_SUBST(RAPTOR_MAJOR)
11333 AC_SUBST(RASQAL_MAJOR)
11334 AC_SUBST(REDLAND_MAJOR)
11336 dnl ===================================================================
11337 dnl Check for system hunspell
11338 dnl ===================================================================
11339 AC_MSG_CHECKING([which libhunspell to use])
11340 if test "$with_system_hunspell" = "yes"; then
11341     AC_MSG_RESULT([external])
11342     SYSTEM_HUNSPELL=TRUE
11343     AC_LANG_PUSH([C++])
11344     PKG_CHECK_MODULES(HUNSPELL, hunspell, HUNSPELL_PC="TRUE", HUNSPELL_PC="" )
11345     if test "$HUNSPELL_PC" != "TRUE"; then
11346         AC_CHECK_HEADER(hunspell.hxx, [],
11347             [
11348             AC_CHECK_HEADER(hunspell/hunspell.hxx, [ HUNSPELL_CFLAGS=-I/usr/include/hunspell ],
11349             [AC_MSG_ERROR(hunspell headers not found.)], [])
11350             ], [])
11351         AC_CHECK_LIB([hunspell], [main], [:],
11352            [ AC_MSG_ERROR(hunspell library not found.) ], [])
11353         HUNSPELL_LIBS=-lhunspell
11354     fi
11355     AC_LANG_POP([C++])
11356     HUNSPELL_CFLAGS=$(printf '%s' "$HUNSPELL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11357     FilterLibs "${HUNSPELL_LIBS}"
11358     HUNSPELL_LIBS="${filteredlibs}"
11359 else
11360     AC_MSG_RESULT([internal])
11361     SYSTEM_HUNSPELL=
11362     HUNSPELL_CFLAGS="-I${WORKDIR}/UnpackedTarball/hunspell/src/hunspell"
11363     if test "$COM" = "MSC"; then
11364         HUNSPELL_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/hunspell.lib"
11365     else
11366         HUNSPELL_LIBS="-L${WORKDIR}/UnpackedTarball/hunspell/src/hunspell/.libs -lhunspell-1.7"
11367     fi
11368     BUILD_TYPE="$BUILD_TYPE HUNSPELL"
11370 AC_SUBST(SYSTEM_HUNSPELL)
11371 AC_SUBST(HUNSPELL_CFLAGS)
11372 AC_SUBST(HUNSPELL_LIBS)
11374 dnl ===================================================================
11375 dnl Check for system zxcvbn
11376 dnl ===================================================================
11377 AC_MSG_CHECKING([which zxcvbn to use])
11378 if test "$with_system_zxcvbn" = "yes"; then
11379     AC_MSG_RESULT([external])
11380     SYSTEM_ZXCVBN=TRUE
11381     AC_CHECK_HEADER(zxcvbn.h, [],
11382        [ AC_MSG_ERROR(zxcvbn headers not found.)], [])
11383     AC_CHECK_LIB(zxcvbn, ZxcvbnMatch, [],
11384         [ AC_MSG_ERROR(zxcvbn library not found.)], [])
11385 else
11386    AC_MSG_RESULT([internal])
11387    BUILD_TYPE="$BUILD_TYPE ZXCVBN"
11388    SYSTEM_ZXCVBN=
11390 AC_SUBST(SYSTEM_ZXCVBN)
11392 dnl ===================================================================
11393 dnl Check for system zxing
11394 dnl ===================================================================
11395 AC_MSG_CHECKING([whether to use zxing])
11396 if test "$enable_zxing" = "no"; then
11397     AC_MSG_RESULT([no])
11398     ENABLE_ZXING=
11399     SYSTEM_ZXING=
11400 else
11401     AC_MSG_RESULT([yes])
11402     ENABLE_ZXING=TRUE
11403     AC_MSG_CHECKING([which libzxing to use])
11404     if test "$with_system_zxing" = "yes"; then
11405         AC_MSG_RESULT([external])
11406         SYSTEM_ZXING=TRUE
11407         ZXING_CFLAGS=
11408         AC_LANG_PUSH([C++])
11409         save_CXXFLAGS=$CXXFLAGS
11410         save_IFS=$IFS
11411         IFS=$P_SEP
11412         for i in $CPLUS_INCLUDE_PATH /usr/include; do
11413             dnl Reset IFS as soon as possible, to avoid unexpected side effects (and the
11414             dnl "/usr/include" fallback makes sure we get here at least once; resetting rather than
11415             dnl unsetting follows the advice at <https://git.savannah.gnu.org/gitweb/?p=autoconf.git;
11416             dnl a=commitdiff;h=e51c9919f2cf70185b7916ac040bc0bbfd0f743b> "Add recommendation on (not)
11417             dnl unsetting IFS."):
11418             IFS=$save_IFS
11419             dnl TODO: GCC and Clang treat empty paths in CPLUS_INCLUDE_PATH like ".", but we simply
11420             dnl ignore them here:
11421             if test -z "$i"; then
11422                 continue
11423             fi
11424             dnl TODO: White space in $i would cause problems:
11425             CXXFLAGS="$save_CXXFLAGS ${CXXFLAGS_CXX11} -I$i/ZXing"
11426             AC_CHECK_HEADER(MultiFormatWriter.h, [ZXING_CFLAGS=-I$i/ZXing; break],
11427                 [unset ac_cv_header_MultiFormatWriter_h], [#include <stdexcept>])
11428         done
11429         CXXFLAGS=$save_CXXFLAGS
11430         if test -z "$ZXING_CFLAGS"; then
11431             AC_MSG_ERROR(zxing headers not found.)
11432         fi
11433         AC_CHECK_LIB([ZXing], [main], [ZXING_LIBS=-lZXing],
11434             [ AC_CHECK_LIB([ZXingCore], [main], [ZXING_LIBS=-lZXingCore],
11435             [ AC_MSG_ERROR(zxing C++ library not found.) ])], [])
11436         AC_LANG_POP([C++])
11437         ZXING_CFLAGS=$(printf '%s' "$ZXING_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11438         FilterLibs "${ZXING_LIBS}"
11439         ZXING_LIBS="${filteredlibs}"
11440     else
11441         AC_MSG_RESULT([internal])
11442         SYSTEM_ZXING=
11443         BUILD_TYPE="$BUILD_TYPE ZXING"
11444         ZXING_CFLAGS="-I${WORKDIR}/UnpackedTarball/zxing/core/src"
11445     fi
11446     if test "$ENABLE_ZXING" = TRUE; then
11447         AC_DEFINE(ENABLE_ZXING)
11448     fi
11449     AC_MSG_CHECKING([whether zxing::tosvg function is available])
11450     AC_LANG_PUSH([C++])
11451     save_CXXFLAGS=$CXXFLAGS
11452     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11 $ZXING_CFLAGS"
11453     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
11454             #include <BitMatrix.h>
11455             #include <BitMatrixIO.h>
11456             int main(){
11457                 ZXing::BitMatrix matrix(1, 1);
11458                 matrix.set(0, 0, true);
11459                 ZXing::ToSVG(matrix);
11460                 return 0;
11461             }
11462         ])], [
11463             AC_DEFINE([HAVE_ZXING_TOSVG],[1])
11464             AC_MSG_RESULT([yes])
11465         ], [AC_MSG_RESULT([no])])
11466     CXXFLAGS=$save_CXXFLAGS
11467     AC_LANG_POP([C++])
11468     AC_SUBST(HAVE_ZXING_TOSVG)
11470 AC_SUBST(SYSTEM_ZXING)
11471 AC_SUBST(ENABLE_ZXING)
11472 AC_SUBST(ZXING_CFLAGS)
11473 AC_SUBST(ZXING_LIBS)
11475 dnl ===================================================================
11476 dnl Check for system box2d
11477 dnl ===================================================================
11478 AC_MSG_CHECKING([which box2d to use])
11479 if test "$with_system_box2d" = "yes"; then
11480     AC_MSG_RESULT([external])
11481     SYSTEM_BOX2D=TRUE
11482     AC_LANG_PUSH([C++])
11483     AC_CHECK_HEADER(box2d/box2d.h, [BOX2D_H_FOUND='TRUE'],
11484         [BOX2D_H_FOUND='FALSE'])
11485     if test "$BOX2D_H_FOUND" = "TRUE"; then # 2.4.0+
11486         _BOX2D_LIB=box2d
11487         AC_DEFINE(BOX2D_HEADER,<box2d/box2d.h>)
11488     else
11489         # fail this. there's no other alternative to check when we are here.
11490         AC_CHECK_HEADER([Box2D/Box2D.h], [],
11491             [AC_MSG_ERROR(box2d headers not found.)])
11492         _BOX2D_LIB=Box2D
11493         AC_DEFINE(BOX2D_HEADER,<Box2D/Box2D.h>)
11494     fi
11495     AC_CHECK_LIB([$_BOX2D_LIB], [main], [:],
11496         [ AC_MSG_ERROR(box2d library not found.) ], [])
11497     BOX2D_LIBS=-l$_BOX2D_LIB
11498     AC_LANG_POP([C++])
11499     BOX2D_CFLAGS=$(printf '%s' "$BOX2D_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11500     FilterLibs "${BOX2D_LIBS}"
11501     BOX2D_LIBS="${filteredlibs}"
11502 else
11503     AC_MSG_RESULT([internal])
11504     SYSTEM_BOX2D=
11505     BUILD_TYPE="$BUILD_TYPE BOX2D"
11507 AC_SUBST(SYSTEM_BOX2D)
11508 AC_SUBST(BOX2D_CFLAGS)
11509 AC_SUBST(BOX2D_LIBS)
11511 dnl ===================================================================
11512 dnl Checking for altlinuxhyph
11513 dnl ===================================================================
11514 AC_MSG_CHECKING([which altlinuxhyph to use])
11515 if test "$with_system_altlinuxhyph" = "yes"; then
11516     AC_MSG_RESULT([external])
11517     SYSTEM_HYPH=TRUE
11518     AC_CHECK_HEADER(hyphen.h, [],
11519        [ AC_MSG_ERROR(altlinuxhyph headers not found.)], [])
11520     AC_CHECK_MEMBER(struct _HyphenDict.cset, [],
11521        [ AC_MSG_ERROR(no. You are sure you have altlinuyhyph headers?)],
11522        [#include <hyphen.h>])
11523     AC_CHECK_LIB(hyphen, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyphen],
11524         [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11525     if test -z "$HYPHEN_LIB"; then
11526         AC_CHECK_LIB(hyph, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhyph],
11527            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11528     fi
11529     if test -z "$HYPHEN_LIB"; then
11530         AC_CHECK_LIB(hnj, hnj_hyphen_hyphenate2, [HYPHEN_LIB=-lhnj],
11531            [ AC_MSG_ERROR(altlinuxhyph library not found or too old.)], [])
11532     fi
11533 else
11534     AC_MSG_RESULT([internal])
11535     SYSTEM_HYPH=
11536     BUILD_TYPE="$BUILD_TYPE HYPHEN"
11537     if test "$COM" = "MSC"; then
11538         HYPHEN_LIB="${WORKDIR}/LinkTarget/StaticLibrary/hyphen.lib"
11539     else
11540         HYPHEN_LIB="-L${WORKDIR}/UnpackedTarball/hyphen/.libs -lhyphen"
11541     fi
11543 AC_SUBST(SYSTEM_HYPH)
11544 AC_SUBST(HYPHEN_LIB)
11546 dnl ===================================================================
11547 dnl Checking for mythes
11548 dnl ===================================================================
11549 AC_MSG_CHECKING([which mythes to use])
11550 if test "$with_system_mythes" = "yes"; then
11551     AC_MSG_RESULT([external])
11552     SYSTEM_MYTHES=TRUE
11553     AC_LANG_PUSH([C++])
11554     PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
11555     if test "$MYTHES_PKGCONFIG" = "no"; then
11556         AC_CHECK_HEADER(mythes.hxx, [],
11557             [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
11558         AC_CHECK_LIB([mythes-1.2], [main], [:],
11559             [ MYTHES_FOUND=no], [])
11560     if test "$MYTHES_FOUND" = "no"; then
11561         AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
11562                 [ MYTHES_FOUND=no], [])
11563     fi
11564     if test "$MYTHES_FOUND" = "no"; then
11565         AC_MSG_ERROR([mythes library not found!.])
11566     fi
11567     fi
11568     AC_LANG_POP([C++])
11569     MYTHES_CFLAGS=$(printf '%s' "$MYTHES_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11570     FilterLibs "${MYTHES_LIBS}"
11571     MYTHES_LIBS="${filteredlibs}"
11572 else
11573     AC_MSG_RESULT([internal])
11574     SYSTEM_MYTHES=
11575     BUILD_TYPE="$BUILD_TYPE MYTHES"
11576     if test "$COM" = "MSC"; then
11577         MYTHES_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/mythes.lib"
11578     else
11579         MYTHES_LIBS="-L${WORKDIR}/UnpackedTarball/mythes/.libs -lmythes-1.2"
11580     fi
11582 AC_SUBST(SYSTEM_MYTHES)
11583 AC_SUBST(MYTHES_CFLAGS)
11584 AC_SUBST(MYTHES_LIBS)
11586 dnl ===================================================================
11587 dnl How should we build the linear programming solver ?
11588 dnl ===================================================================
11590 ENABLE_COINMP=
11591 AC_MSG_CHECKING([whether to build with CoinMP])
11592 if test "$enable_coinmp" != "no"; then
11593     ENABLE_COINMP=TRUE
11594     AC_MSG_RESULT([yes])
11595     if test "$with_system_coinmp" = "yes"; then
11596         SYSTEM_COINMP=TRUE
11597         PKG_CHECK_MODULES(COINMP, coinmp coinutils)
11598         FilterLibs "${COINMP_LIBS}"
11599         COINMP_LIBS="${filteredlibs}"
11600     else
11601         BUILD_TYPE="$BUILD_TYPE COINMP"
11602     fi
11603 else
11604     AC_MSG_RESULT([no])
11606 AC_SUBST(ENABLE_COINMP)
11607 AC_SUBST(SYSTEM_COINMP)
11608 AC_SUBST(COINMP_CFLAGS)
11609 AC_SUBST(COINMP_LIBS)
11611 ENABLE_LPSOLVE=
11612 AC_MSG_CHECKING([whether to build with lpsolve])
11613 if test "$enable_lpsolve" != "no"; then
11614     ENABLE_LPSOLVE=TRUE
11615     AC_MSG_RESULT([yes])
11616 else
11617     AC_MSG_RESULT([no])
11619 AC_SUBST(ENABLE_LPSOLVE)
11621 if test "$ENABLE_LPSOLVE" = TRUE; then
11622     AC_MSG_CHECKING([which lpsolve to use])
11623     if test "$with_system_lpsolve" = "yes"; then
11624         AC_MSG_RESULT([external])
11625         SYSTEM_LPSOLVE=TRUE
11626         AC_CHECK_HEADER(lpsolve/lp_lib.h, [],
11627            [ AC_MSG_ERROR(lpsolve headers not found.)], [])
11628         save_LIBS=$LIBS
11629         # some systems need this. Like Ubuntu...
11630         AC_CHECK_LIB(m, floor)
11631         AC_CHECK_LIB(dl, dlopen)
11632         AC_CHECK_LIB([lpsolve55], [make_lp], [:],
11633             [ AC_MSG_ERROR(lpsolve library not found or too old.)], [])
11634         LIBS=$save_LIBS
11635     else
11636         AC_MSG_RESULT([internal])
11637         SYSTEM_LPSOLVE=
11638         BUILD_TYPE="$BUILD_TYPE LPSOLVE"
11639     fi
11641 AC_SUBST(SYSTEM_LPSOLVE)
11643 dnl ===================================================================
11644 dnl Checking for libexttextcat
11645 dnl ===================================================================
11646 libo_CHECK_SYSTEM_MODULE([libexttextcat],[LIBEXTTEXTCAT],[libexttextcat >= 3.4.1])
11647 if test "$with_system_libexttextcat" = "yes"; then
11648     SYSTEM_LIBEXTTEXTCAT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libexttextcat`
11650 AC_SUBST(SYSTEM_LIBEXTTEXTCAT_DATA)
11652 dnl ===================================================================
11653 dnl Checking for libnumbertext
11654 dnl ===================================================================
11655 libo_CHECK_SYSTEM_MODULE([libnumbertext],[LIBNUMBERTEXT],[libnumbertext >= 1.0.6])
11656 if test "$with_system_libnumbertext" = "yes"; then
11657     SYSTEM_LIBNUMBERTEXT_DATA=file://`$PKG_CONFIG --variable=pkgdatadir libnumbertext`
11658     SYSTEM_LIBNUMBERTEXT=YES
11659 else
11660     SYSTEM_LIBNUMBERTEXT=
11662 AC_SUBST(SYSTEM_LIBNUMBERTEXT)
11663 AC_SUBST(SYSTEM_LIBNUMBERTEXT_DATA)
11665 dnl ***************************************
11666 dnl testing libc version for Linux...
11667 dnl ***************************************
11668 if test "$_os" = "Linux"; then
11669     AC_MSG_CHECKING([whether the libc is recent enough])
11670     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
11671     #include <features.h>
11672     #if defined(__GNU_LIBRARY__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1))
11673     #error glibc >= 2.1 is required
11674     #endif
11675     ]])],, [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([no, upgrade libc])])
11678 dnl =========================================
11679 dnl Check for uuidgen
11680 dnl =========================================
11681 if test "$_os" = "WINNT"; then
11682     # we must use the uuidgen from the Windows SDK, which will be in the LO_PATH, but isn't in
11683     # the PATH for AC_PATH_PROG. It is already tested above in the WINDOWS_SDK_HOME check.
11684     UUIDGEN=uuidgen.exe
11685     AC_SUBST(UUIDGEN)
11686 else
11687     AC_PATH_PROG([UUIDGEN], [uuidgen])
11688     if test -z "$UUIDGEN"; then
11689         AC_MSG_WARN([uuid is needed for building installation sets])
11690     fi
11693 dnl ***************************************
11694 dnl Checking for bison and flex
11695 dnl ***************************************
11696 AC_PATH_PROG(BISON, bison)
11697 if test -z "$BISON"; then
11698     AC_MSG_ERROR([no bison found in \$PATH, install it])
11699 else
11700     AC_MSG_CHECKING([the bison version])
11701     _bison_version=`$BISON --version | grep GNU | $SED -e 's@^[[^0-9]]*@@' -e 's@ .*@@' -e 's@,.*@@'`
11702     _bison_longver=`echo $_bison_version | $AWK -F. '{ print \$1*1000+\$2}'`
11703     dnl Accept newer than 2.0; for --enable-compiler-plugins at least 2.3 is known to be bad and
11704     dnl cause
11705     dnl
11706     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]
11707     dnl   typedef union YYSTYPE
11708     dnl           ~~~~~~^~~~~~~
11709     dnl
11710     dnl while at least 3.4.1 is know to be good:
11711     if test "$COMPILER_PLUGINS" = TRUE; then
11712         if test "$_bison_longver" -lt 2004; then
11713             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.4+ for --enable-compiler-plugins)])
11714         fi
11715     else
11716         if test "$_bison_longver" -lt 2000; then
11717             AC_MSG_ERROR([failed ($BISON $_bison_version need 2.0+)])
11718         fi
11719     fi
11721 AC_SUBST([BISON])
11723 AC_PATH_PROG(FLEX, flex)
11724 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11725     FLEX=`cygpath -m $FLEX`
11727 if test -z "$FLEX"; then
11728     AC_MSG_ERROR([no flex found in \$PATH, install it])
11729 else
11730     AC_MSG_CHECKING([the flex version])
11731     _flex_version=$($FLEX --version | $SED -e 's/^.*\([[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\.[[[:digit:]]]\{1,\}\).*$/\1/')
11732     if test $(echo $_flex_version | $AWK -F. '{printf("%d%03d%03d", $1, $2, $3)}') -lt 2006000; then
11733         AC_MSG_ERROR([failed ($FLEX $_flex_version found, but need at least 2.6.0)])
11734     fi
11736 AC_SUBST([FLEX])
11738 AC_PATH_PROG(DIFF, diff)
11739 if test -z "$DIFF"; then
11740     AC_MSG_ERROR(["diff" not found in \$PATH, install it])
11742 AC_SUBST([DIFF])
11744 AC_PATH_PROG(UNIQ, uniq)
11745 if test -z "$UNIQ"; then
11746     AC_MSG_ERROR(["uniq" not found in \$PATH, install it])
11748 AC_SUBST([UNIQ])
11750 dnl ***************************************
11751 dnl Checking for patch
11752 dnl ***************************************
11753 AC_PATH_PROG(PATCH, patch)
11754 if test -z "$PATCH"; then
11755     AC_MSG_ERROR(["patch" not found in \$PATH, install it])
11758 dnl On Solaris or macOS, check if --with-gnu-patch was used
11759 if test "$_os" = "SunOS" -o "$_os" = "Darwin" -o "$_os" = "FreeBSD"; then
11760     if test -z "$with_gnu_patch"; then
11761         GNUPATCH=$PATCH
11762     else
11763         if test -x "$with_gnu_patch"; then
11764             GNUPATCH=$with_gnu_patch
11765         else
11766             AC_MSG_ERROR([--with-gnu-patch did not point to an executable])
11767         fi
11768     fi
11770     AC_MSG_CHECKING([whether $GNUPATCH is GNU patch])
11771     if $GNUPATCH --version | grep "Free Software Foundation" >/dev/null 2>/dev/null; then
11772         AC_MSG_RESULT([yes])
11773     else
11774         if $GNUPATCH --version | grep "2\.0-.*-Apple" >/dev/null 2>/dev/null; then
11775             AC_MSG_RESULT([no, but accepted (Apple patch)])
11776             add_warning "patch utility is not GNU patch. Apple's patch should work OK, but it might experience issues where GNU patch doesn't."
11777         else
11778             AC_MSG_ERROR([no, GNU patch needed. install or specify with --with-gnu-patch=/path/to/it])
11779         fi
11780     fi
11781 else
11782     GNUPATCH=$PATCH
11785 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11786     GNUPATCH=`cygpath -m $GNUPATCH`
11789 dnl We also need to check for --with-gnu-cp
11791 if test -z "$with_gnu_cp"; then
11792     # check the place where the good stuff is hidden on Solaris...
11793     if test -x /usr/gnu/bin/cp; then
11794         GNUCP=/usr/gnu/bin/cp
11795     else
11796         AC_PATH_PROGS(GNUCP, gnucp cp)
11797     fi
11798     if test -z $GNUCP; then
11799         AC_MSG_ERROR([Neither gnucp nor cp found. Install GNU cp and/or specify --with-gnu-cp=/path/to/it])
11800     fi
11801 else
11802     if test -x "$with_gnu_cp"; then
11803         GNUCP=$with_gnu_cp
11804     else
11805         AC_MSG_ERROR([--with-gnu-cp did not point to an executable])
11806     fi
11809 if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
11810     GNUCP=`cygpath -m $GNUCP`
11813 AC_MSG_CHECKING([whether $GNUCP is GNU cp from coreutils with preserve= support])
11814 if $GNUCP --version 2>/dev/null | grep "coreutils" >/dev/null 2>/dev/null; then
11815     AC_MSG_RESULT([yes])
11816 elif $GNUCP --version 2>/dev/null | grep "GNU fileutils" >/dev/null 2>/dev/null; then
11817     AC_MSG_RESULT([yes])
11818 else
11819     case "$build_os" in
11820     darwin*|netbsd*|openbsd*|freebsd*|dragonfly*)
11821         x_GNUCP=[\#]
11822         GNUCP=''
11823         AC_MSG_RESULT([no gnucp found - using the system's cp command])
11824         ;;
11825     *)
11826         AC_MSG_ERROR([no, GNU cp needed. install or specify with --with-gnu-cp=/path/to/it])
11827         ;;
11828     esac
11831 AC_SUBST(GNUPATCH)
11832 AC_SUBST(GNUCP)
11833 AC_SUBST(x_GNUCP)
11835 dnl ***************************************
11836 dnl testing assembler path
11837 dnl ***************************************
11838 ML_EXE=""
11839 if test "$_os" = "WINNT"; then
11840     case "$WIN_HOST_ARCH" in
11841     x86) assembler=ml.exe ;;
11842     x64) assembler=ml64.exe ;;
11843     arm64) assembler=armasm64.exe ;;
11844     esac
11846     AC_MSG_CHECKING([for the MSVC assembler ($assembler)])
11847     if test -f "$MSVC_HOST_PATH/$assembler"; then
11848         ML_EXE=`win_short_path_for_make "$MSVC_HOST_PATH/$assembler"`
11849         AC_MSG_RESULT([$ML_EXE])
11850     else
11851         AC_MSG_ERROR([not found in $MSVC_HOST_PATH])
11852     fi
11855 AC_SUBST(ML_EXE)
11857 dnl ===================================================================
11858 dnl We need zip and unzip
11859 dnl ===================================================================
11860 AC_PATH_PROG(ZIP, zip)
11861 test -z "$ZIP" && AC_MSG_ERROR([zip is required])
11862 if ! "$ZIP" --filesync < /dev/null 2>/dev/null > /dev/null; then
11863     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],,)
11866 AC_PATH_PROG(UNZIP, unzip)
11867 test -z "$UNZIP" && AC_MSG_ERROR([unzip is required])
11869 dnl ===================================================================
11870 dnl Zip must be a specific type for different build types.
11871 dnl ===================================================================
11872 if test $build_os = cygwin; then
11873     if test -n "`$ZIP -h | $GREP -i WinNT`"; then
11874         AC_MSG_ERROR([$ZIP is not the required Cygwin version of Info-ZIP's zip.exe.])
11875     fi
11878 dnl ===================================================================
11879 dnl We need touch with -h option support.
11880 dnl ===================================================================
11881 AC_PATH_PROG(TOUCH, touch)
11882 test -z "$TOUCH" && AC_MSG_ERROR([touch is required])
11883 touch "$WARNINGS_FILE"
11884 if ! "$TOUCH" -h "$WARNINGS_FILE" 2>/dev/null > /dev/null; then
11885     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],,)
11888 dnl ===================================================================
11889 dnl Check for system epoxy
11890 dnl ===================================================================
11891 EPOXY_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/epoxy/include"
11892 libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2])
11894 dnl ===================================================================
11895 dnl Show which vclplugs will be built.
11896 dnl ===================================================================
11897 R=""
11899 libo_ENABLE_VCLPLUG([gen])
11900 libo_ENABLE_VCLPLUG([gtk3])
11901 libo_ENABLE_VCLPLUG([gtk3_kde5])
11902 libo_ENABLE_VCLPLUG([gtk4])
11903 libo_ENABLE_VCLPLUG([kf5])
11904 libo_ENABLE_VCLPLUG([kf6])
11905 libo_ENABLE_VCLPLUG([qt5])
11906 libo_ENABLE_VCLPLUG([qt6])
11908 if test "$_os" = "WINNT"; then
11909     R="$R win"
11910 elif test "$_os" = "Darwin"; then
11911     R="$R osx"
11912 elif test "$_os" = "iOS"; then
11913     R="ios"
11914 elif test "$_os" = Android; then
11915     R="android"
11918 build_vcl_plugins="$R"
11919 if test -z "$build_vcl_plugins"; then
11920     build_vcl_plugins=" none"
11922 AC_MSG_NOTICE([VCLplugs to be built:${build_vcl_plugins}])
11923 VCL_PLUGIN_INFO=$R
11924 AC_SUBST([VCL_PLUGIN_INFO])
11926 if test "$DISABLE_DYNLOADING" = TRUE -a -z "$DISABLE_GUI" -a \( -z "$R" -o $(echo "$R" | wc -w) -ne 1 \); then
11927     AC_MSG_ERROR([Can't build --disable-dynamic-loading without --disable-gui and a single VCL plugin"])
11930 dnl ===================================================================
11931 dnl Check for GTK libraries
11932 dnl ===================================================================
11934 GTK3_CFLAGS=""
11935 GTK3_LIBS=""
11936 ENABLE_GTKTILEDVIEWER=""
11937 if test "$test_gtk3" = yes -a "x$enable_gtk3" = "xyes" -o "x$enable_gtk3_kde5" = "xyes"; then
11938     if test "$with_system_cairo" = no; then
11939         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.'
11940     fi
11941     : ${with_system_cairo:=yes}
11942     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)
11943     GTK3_CFLAGS=$(printf '%s' "$GTK3_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11944     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11945     FilterLibs "${GTK3_LIBS}"
11946     GTK3_LIBS="${filteredlibs}"
11948     dnl We require egl only for the gtk3 plugin. Otherwise we use glx.
11949     if test "$with_system_epoxy" != "yes"; then
11950         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11951         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11952                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11953     fi
11954 elif test -n "$with_gtk3_build" -a "$OS" = "WNT"; then
11955     PathFormat "${with_gtk3_build}/lib/pkgconfig"
11956     if test "$build_os" = "cygwin"; then
11957         dnl cygwin's pkg-config does not recognize "C:/..."-style paths, only "/cygdrive/c/..."
11958         formatted_path_unix=`cygpath -au "$formatted_path_unix"`
11959     fi
11961     PKG_CONFIG_PATH="$formatted_path_unix"; export PKG_CONFIG_PATH
11962     PKG_CHECK_MODULES(GTK3, cairo gdk-3.0 gio-2.0 glib-2.0 gobject-2.0 gtk+-3.0)
11963     GTK3_CFLAGS="$GTK3_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11964     FilterLibs "${GTK3_LIBS}"
11965     GTK3_LIBS="${filteredlibs}"
11966     ENABLE_GTKTILEDVIEWER="yes"
11968 AC_SUBST(GTK3_LIBS)
11969 AC_SUBST(GTK3_CFLAGS)
11970 AC_SUBST(ENABLE_GTKTILEDVIEWER)
11972 GTK4_CFLAGS=""
11973 GTK4_LIBS=""
11974 if test "$test_gtk4" = yes -a "x$enable_gtk4" = "xyes"; then
11975     if test "$with_system_cairo" = no; then
11976         add_warning 'Non-system cairo combined with gtk4 is assumed to cause trouble; proceed at your own risk.'
11977     fi
11978     : ${with_system_cairo:=yes}
11979     PKG_CHECK_MODULES(GTK4, gtk4 gmodule-no-export-2.0 glib-2.0 >= 2.38 cairo atk)
11980     GTK4_CFLAGS=$(printf '%s' "$GTK4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
11981     GTK4_CFLAGS="$GTK4_CFLAGS -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
11982     FilterLibs "${GTK4_LIBS}"
11983     GTK4_LIBS="${filteredlibs}"
11985     dnl We require egl only for the gtk4 plugin. Otherwise we use glx.
11986     if test "$with_system_epoxy" != "yes"; then
11987         AC_CHECK_LIB(EGL, eglMakeCurrent, [:], AC_MSG_ERROR([libEGL required.]))
11988         AC_CHECK_HEADER(EGL/eglplatform.h, [],
11989                         [AC_MSG_ERROR(EGL headers not found. install mesa-libEGL-devel)], [])
11990     fi
11992 AC_SUBST(GTK4_LIBS)
11993 AC_SUBST(GTK4_CFLAGS)
11995 if test "$enable_introspection" = yes; then
11996     if test "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
11997         GOBJECT_INTROSPECTION_REQUIRE(INTROSPECTION_REQUIRED_VERSION)
11998     else
11999         AC_MSG_ERROR([--enable-introspection requires --enable-gtk3])
12000     fi
12003 # AT-SPI2 tests require gtk3, xvfb-run, dbus-launch and atspi-2
12004 if ! test "$ENABLE_GTK3" = TRUE; then
12005     if test "$enable_atspi_tests" = yes; then
12006         AC_MSG_ERROR([--enable-atspi-tests requires --enable-gtk3])
12007     fi
12008     enable_atspi_tests=no
12010 if ! test "$enable_atspi_tests" = no; then
12011     AC_PATH_PROGS([XVFB_RUN], [xvfb-run], no)
12012     if ! test "$XVFB_RUN" = no; then
12013         dnl make sure the found xvfb-run actually works
12014         AC_MSG_CHECKING([whether $XVFB_RUN works...])
12015         if $XVFB_RUN --auto-servernum true >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
12016             AC_MSG_RESULT([yes])
12017         else
12018             AC_MSG_RESULT([no])
12019             XVFB_RUN=no
12020         fi
12021     fi
12022     if test "$XVFB_RUN" = no; then
12023         if test "$enable_atspi_tests" = yes; then
12024             AC_MSG_ERROR([xvfb-run required by --enable-atspi-tests not found])
12025         fi
12026         enable_atspi_tests=no
12027     fi
12029 if ! test "$enable_atspi_tests" = no; then
12030     AC_PATH_PROGS([DBUS_LAUNCH], [dbus-launch], no)
12031     if test "$DBUS_LAUNCH" = no; then
12032         if test "$enable_atspi_tests" = yes; then
12033             AC_MSG_ERROR([dbus-launch required by --enable-atspi-tests not found])
12034         fi
12035         enable_atspi_tests=no
12036     fi
12038 if ! test "$enable_atspi_tests" = no; then
12039     PKG_CHECK_MODULES([ATSPI2], [atspi-2 gobject-2.0],,
12040                       [if test "$enable_atspi_tests" = yes; then
12041                            AC_MSG_ERROR([$ATSPI2_PKG_ERRORS])
12042                        else
12043                            enable_atspi_tests=no
12044                        fi])
12046 if ! test "x$enable_atspi_tests" = xno; then
12047     PKG_CHECK_MODULES([ATSPI2_2_32], [atspi-2 >= 2.32],
12048                       [have_atspi_scroll_to=1],
12049                       [have_atspi_scroll_to=0])
12050     AC_DEFINE_UNQUOTED([HAVE_ATSPI2_SCROLL_TO], [$have_atspi_scroll_to],
12051                        [Whether AT-SPI2 has the scrollTo API])
12053 ENABLE_ATSPI_TESTS=
12054 test "$enable_atspi_tests" = no || ENABLE_ATSPI_TESTS=TRUE
12055 AC_SUBST([ENABLE_ATSPI_TESTS])
12057 dnl ===================================================================
12058 dnl check for dbus support
12059 dnl ===================================================================
12060 ENABLE_DBUS=""
12061 DBUS_CFLAGS=""
12062 DBUS_LIBS=""
12063 DBUS_GLIB_CFLAGS=""
12064 DBUS_GLIB_LIBS=""
12065 DBUS_HAVE_GLIB=""
12067 if test "$enable_dbus" = "no"; then
12068     test_dbus=no
12071 AC_MSG_CHECKING([whether to enable DBUS support])
12072 if test "$test_dbus" = "yes"; then
12073     ENABLE_DBUS="TRUE"
12074     AC_MSG_RESULT([yes])
12075     PKG_CHECK_MODULES(DBUS, dbus-1 >= 0.60)
12076     AC_DEFINE(ENABLE_DBUS)
12077     DBUS_CFLAGS=$(printf '%s' "$DBUS_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12078     FilterLibs "${DBUS_LIBS}"
12079     DBUS_LIBS="${filteredlibs}"
12081     # Glib is needed for BluetoothServer
12082     # Sets also DBUS_GLIB_CFLAGS/DBUS_GLIB_LIBS if successful.
12083     PKG_CHECK_MODULES(DBUS_GLIB,[glib-2.0 >= 2.4],
12084         [
12085             DBUS_HAVE_GLIB="TRUE"
12086             AC_DEFINE(DBUS_HAVE_GLIB,1)
12087         ],
12088         AC_MSG_WARN([[No Glib found, Bluetooth support will be disabled]])
12089     )
12090 else
12091     AC_MSG_RESULT([no])
12094 AC_SUBST(ENABLE_DBUS)
12095 AC_SUBST(DBUS_CFLAGS)
12096 AC_SUBST(DBUS_LIBS)
12097 AC_SUBST(DBUS_GLIB_CFLAGS)
12098 AC_SUBST(DBUS_GLIB_LIBS)
12099 AC_SUBST(DBUS_HAVE_GLIB)
12101 AC_MSG_CHECKING([whether to enable Impress remote control])
12102 if test -n "$enable_sdremote" -a "$enable_sdremote" != "no"; then
12103     AC_MSG_RESULT([yes])
12104     ENABLE_SDREMOTE=TRUE
12105     SDREMOTE_ENTITLEMENT="      <key>com.apple.security.network.server</key>
12106         <true/>"
12107     AC_MSG_CHECKING([whether to enable Bluetooth support in Impress remote control])
12109     if test $OS = MACOSX && test "$MACOSX_SDK_VERSION" -ge 101500; then
12110         # The Bluetooth code doesn't compile with macOS SDK 10.15
12111         if test "$enable_sdremote_bluetooth" = yes; then
12112             AC_MSG_ERROR([macOS SDK $macosx_sdk does not currently support --enable-sdremote-bluetooth])
12113         fi
12114         add_warning "not building the bluetooth part of the sdremote - used api was removed from macOS SDK 10.15"
12115         enable_sdremote_bluetooth=no
12116     fi
12117     # If not explicitly enabled or disabled, default
12118     if test -z "$enable_sdremote_bluetooth"; then
12119         case "$OS" in
12120         LINUX|MACOSX|WNT)
12121             # Default to yes for these
12122             enable_sdremote_bluetooth=yes
12123             ;;
12124         *)
12125             # otherwise no
12126             enable_sdremote_bluetooth=no
12127             ;;
12128         esac
12129     fi
12130     # $enable_sdremote_bluetooth is guaranteed non-empty now
12132     if test "$enable_sdremote_bluetooth" != "no"; then
12133         if test "$OS" = "LINUX"; then
12134             if test "$ENABLE_DBUS" = "TRUE" -a "$DBUS_HAVE_GLIB" = "TRUE"; then
12135                 AC_MSG_RESULT([yes])
12136                 ENABLE_SDREMOTE_BLUETOOTH=TRUE
12137                 dnl ===================================================================
12138                 dnl Check for system bluez
12139                 dnl ===================================================================
12140                 AC_MSG_CHECKING([which Bluetooth header to use])
12141                 if test "$with_system_bluez" = "yes"; then
12142                     AC_MSG_RESULT([external])
12143                     AC_CHECK_HEADER(bluetooth/bluetooth.h, [],
12144                         [AC_MSG_ERROR(bluetooth.h not found. install bluez)], [])
12145                     SYSTEM_BLUEZ=TRUE
12146                 else
12147                     AC_MSG_RESULT([internal])
12148                     SYSTEM_BLUEZ=
12149                 fi
12150             else
12151                 AC_MSG_RESULT([no, dbus disabled])
12152                 ENABLE_SDREMOTE_BLUETOOTH=
12153                 SYSTEM_BLUEZ=
12154             fi
12155         else
12156             AC_MSG_RESULT([yes])
12157             ENABLE_SDREMOTE_BLUETOOTH=TRUE
12158             SYSTEM_BLUEZ=
12159             SDREMOTE_ENTITLEMENT="$SDREMOTE_ENTITLEMENT
12160         <key>com.apple.security.device.bluetooth</key>
12161         <true/>"
12162         fi
12163     else
12164         AC_MSG_RESULT([no])
12165         ENABLE_SDREMOTE_BLUETOOTH=
12166         SYSTEM_BLUEZ=
12167     fi
12168 else
12169     ENABLE_SDREMOTE=
12170     SYSTEM_BLUEZ=
12171     AC_MSG_RESULT([no])
12173 AC_SUBST(ENABLE_SDREMOTE)
12174 AC_SUBST(ENABLE_SDREMOTE_BLUETOOTH)
12175 AC_SUBST(SDREMOTE_ENTITLEMENT)
12176 AC_SUBST(SYSTEM_BLUEZ)
12178 dnl ===================================================================
12179 dnl Check whether to enable GIO support
12180 dnl ===================================================================
12181 if test "$ENABLE_GTK4" = "TRUE" -o "$ENABLE_GTK3" = "TRUE" -o "$ENABLE_GTK3_KDE5" = "TRUE"; then
12182     AC_MSG_CHECKING([whether to enable GIO support])
12183     if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_gio" = "yes"; then
12184         dnl Need at least 2.26 for the dbus support.
12185         PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.26],
12186                           [ENABLE_GIO="TRUE"], [ENABLE_GIO=""])
12187         if test "$ENABLE_GIO" = "TRUE"; then
12188             AC_DEFINE(ENABLE_GIO)
12189             GIO_CFLAGS=$(printf '%s' "$GIO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12190             FilterLibs "${GIO_LIBS}"
12191             GIO_LIBS="${filteredlibs}"
12192         fi
12193     else
12194         AC_MSG_RESULT([no])
12195     fi
12197 AC_SUBST(ENABLE_GIO)
12198 AC_SUBST(GIO_CFLAGS)
12199 AC_SUBST(GIO_LIBS)
12202 dnl ===================================================================
12204 SPLIT_APP_MODULES=""
12205 if test "$enable_split_app_modules" = "yes"; then
12206     SPLIT_APP_MODULES="TRUE"
12208 AC_SUBST(SPLIT_APP_MODULES)
12210 SPLIT_OPT_FEATURES=""
12211 if test "$enable_split_opt_features" = "yes"; then
12212     SPLIT_OPT_FEATURES="TRUE"
12214 AC_SUBST(SPLIT_OPT_FEATURES)
12216 dnl ===================================================================
12217 dnl Check whether the GStreamer libraries are available.
12218 dnl ===================================================================
12220 ENABLE_GSTREAMER_1_0=""
12222 if test "$test_gstreamer_1_0" = yes; then
12224     AC_MSG_CHECKING([whether to enable the GStreamer 1.0 avmedia backend])
12225     if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
12226         ENABLE_GSTREAMER_1_0="TRUE"
12227         AC_MSG_RESULT([yes])
12228         PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
12229         GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12230         FilterLibs "${GSTREAMER_1_0_LIBS}"
12231         GSTREAMER_1_0_LIBS="${filteredlibs}"
12232         AC_DEFINE(ENABLE_GSTREAMER_1_0)
12233     else
12234         AC_MSG_RESULT([no])
12235     fi
12237 AC_SUBST(GSTREAMER_1_0_CFLAGS)
12238 AC_SUBST(GSTREAMER_1_0_LIBS)
12239 AC_SUBST(ENABLE_GSTREAMER_1_0)
12241 ENABLE_OPENGL_TRANSITIONS=
12242 ENABLE_OPENGL_CANVAS=
12243 if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then
12244    : # disable
12245 elif test "$_os" = "Darwin"; then
12246     # We use frameworks on macOS, no need for detail checks
12247     ENABLE_OPENGL_TRANSITIONS=TRUE
12248     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12249     ENABLE_OPENGL_CANVAS=TRUE
12250 elif test $_os = WINNT; then
12251     ENABLE_OPENGL_TRANSITIONS=TRUE
12252     AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12253     ENABLE_OPENGL_CANVAS=TRUE
12254 else
12255     if test "$USING_X11" = TRUE; then
12256         AC_CHECK_LIB(GL, glBegin, [:], AC_MSG_ERROR([libGL required.]))
12257         ENABLE_OPENGL_TRANSITIONS=TRUE
12258         AC_DEFINE(HAVE_FEATURE_OPENGL,1)
12259         ENABLE_OPENGL_CANVAS=TRUE
12260     fi
12263 AC_SUBST(ENABLE_OPENGL_TRANSITIONS)
12264 AC_SUBST(ENABLE_OPENGL_CANVAS)
12266 dnl =================================================
12267 dnl Check whether to build with OpenCL support.
12268 dnl =================================================
12270 if test $_os != iOS -a $_os != Android -a "$ENABLE_FUZZERS" != "TRUE" -a "$enable_opencl" = "yes"; then
12271     # OPENCL in BUILD_TYPE and HAVE_FEATURE_OPENCL tell that OpenCL is potentially available on the
12272     # platform (optional at run-time, used through clew).
12273     BUILD_TYPE="$BUILD_TYPE OPENCL"
12274     AC_DEFINE(HAVE_FEATURE_OPENCL)
12277 dnl =================================================
12278 dnl Check whether to build with dconf support.
12279 dnl =================================================
12281 if test $_os != Android -a $_os != iOS -a "$enable_dconf" != no; then
12282     PKG_CHECK_MODULES([DCONF], [dconf >= 0.40.0], [], [
12283         if test "$enable_dconf" = yes; then
12284             AC_MSG_ERROR([dconf not found])
12285         else
12286             enable_dconf=no
12287         fi])
12289 AC_MSG_CHECKING([whether to enable dconf])
12290 if test $_os = Android -o $_os = iOS -o "$enable_dconf" = no; then
12291     DCONF_CFLAGS=
12292     DCONF_LIBS=
12293     ENABLE_DCONF=
12294     AC_MSG_RESULT([no])
12295 else
12296     ENABLE_DCONF=TRUE
12297     AC_DEFINE(ENABLE_DCONF)
12298     AC_MSG_RESULT([yes])
12300 AC_SUBST([DCONF_CFLAGS])
12301 AC_SUBST([DCONF_LIBS])
12302 AC_SUBST([ENABLE_DCONF])
12304 # pdf import?
12305 AC_MSG_CHECKING([whether to build the PDF import feature])
12306 ENABLE_PDFIMPORT=
12307 if test -z "$enable_pdfimport" -o "$enable_pdfimport" = yes; then
12308     AC_MSG_RESULT([yes])
12309     ENABLE_PDFIMPORT=TRUE
12310     AC_DEFINE(HAVE_FEATURE_PDFIMPORT)
12311 else
12312     AC_MSG_RESULT([no])
12315 # Pdfium?
12316 AC_MSG_CHECKING([whether to build PDFium])
12317 ENABLE_PDFIUM=
12318 if test \( -z "$enable_pdfium" -a "$ENABLE_PDFIMPORT" = "TRUE" \) -o "$enable_pdfium" = yes; then
12319     AC_MSG_RESULT([yes])
12320     ENABLE_PDFIUM=TRUE
12321     BUILD_TYPE="$BUILD_TYPE PDFIUM"
12322 else
12323     AC_MSG_RESULT([no])
12325 AC_SUBST(ENABLE_PDFIUM)
12327 if test "$ENABLE_PDFIUM" = "TRUE"; then
12328     AC_MSG_CHECKING([which OpenJPEG library to use])
12329     if test "$with_system_openjpeg" = "yes"; then
12330         SYSTEM_OPENJPEG2=TRUE
12331         AC_MSG_RESULT([external])
12332         PKG_CHECK_MODULES( OPENJPEG2, libopenjp2 )
12333         OPENJPEG2_CFLAGS=$(printf '%s' "$OPENJPEG2_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12334         FilterLibs "${OPENJPEG2_LIBS}"
12335         OPENJPEG2_LIBS="${filteredlibs}"
12336     else
12337         SYSTEM_OPENJPEG2=FALSE
12338         AC_MSG_RESULT([internal])
12339     fi
12341     AC_MSG_CHECKING([which Abseil library to use])
12342     if test "$with_system_abseil" = "yes"; then
12343         AC_MSG_RESULT([external])
12344         SYSTEM_ABSEIL=TRUE
12345         AC_LANG_PUSH([C++])
12346         PKG_CHECK_MODULES(ABSEIL, absl_bad_optional_access absl_bad_variant_access absl_inlined_vector )
12347         AC_LANG_POP([C++])
12348         ABSEIL_CFLAGS=$(printf '%s' "$ABSEIL_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12349         FilterLibs "${ABSEIL_LIBS}"
12350         ABSEIL_LIBS="${filteredlibs}"
12351     else
12352         AC_MSG_RESULT([internal])
12353     fi
12355 AC_SUBST(SYSTEM_OPENJPEG2)
12356 AC_SUBST(SYSTEM_ABSEIL)
12357 AC_SUBST(ABSEIL_CFLAGS)
12358 AC_SUBST(ABSEIL_LIBS)
12360 dnl ===================================================================
12361 dnl Check for poppler
12362 dnl ===================================================================
12363 ENABLE_POPPLER=
12364 AC_MSG_CHECKING([whether to build Poppler])
12365 if test \( -z "$enable_poppler" -a "$ENABLE_PDFIMPORT" = "TRUE" -a $_os != Android \) -o "$enable_poppler" = yes; then
12366     AC_MSG_RESULT([yes])
12367     ENABLE_POPPLER=TRUE
12368     AC_DEFINE(HAVE_FEATURE_POPPLER)
12369 else
12370     AC_MSG_RESULT([no])
12372 AC_SUBST(ENABLE_POPPLER)
12374 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" != "TRUE" -a "$ENABLE_PDFIUM" != "TRUE"; then
12375     AC_MSG_ERROR([Cannot import PDF without either Pdfium or Poppler; please enable either of them.])
12378 if test "$ENABLE_PDFIMPORT" != "TRUE" -a \( "$ENABLE_POPPLER" = "TRUE" -o "$ENABLE_PDFIUM" = "TRUE" \); then
12379     AC_MSG_ERROR([Cannot enable Pdfium or Poppler when PDF importing is disabled; please enable PDF import first.])
12382 if test "$ENABLE_PDFIMPORT" = "TRUE" -a "$ENABLE_POPPLER" = "TRUE"; then
12383     dnl ===================================================================
12384     dnl Check for system poppler
12385     dnl ===================================================================
12386     AC_MSG_CHECKING([which PDF import poppler to use])
12387     if test "$with_system_poppler" = "yes"; then
12388         AC_MSG_RESULT([external])
12389         SYSTEM_POPPLER=TRUE
12390         PKG_CHECK_MODULES(POPPLER,[poppler >= 0.14 poppler-cpp])
12391         POPPLER_CFLAGS=$(printf '%s' "$POPPLER_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
12392         FilterLibs "${POPPLER_LIBS}"
12393         POPPLER_LIBS="${filteredlibs}"
12394     else
12395         AC_MSG_RESULT([internal])
12396         SYSTEM_POPPLER=
12397         BUILD_TYPE="$BUILD_TYPE POPPLER"
12398     fi
12399     AC_DEFINE([ENABLE_PDFIMPORT],1)
12401 AC_SUBST(ENABLE_PDFIMPORT)
12402 AC_SUBST(SYSTEM_POPPLER)
12403 AC_SUBST(POPPLER_CFLAGS)
12404 AC_SUBST(POPPLER_LIBS)
12406 # Skia?
12407 ENABLE_SKIA=
12408 if test "$enable_skia" != "no" -a "$build_skia" = "yes" -a -z "$DISABLE_GUI"; then
12409     # Skia now requires at least freetype2 >= 2.8.1, which is less that what LO requires as system freetype.
12410     if test "$SYSTEM_FREETYPE" = TRUE; then
12411         PKG_CHECK_EXISTS(freetype2 >= 21.0.15, # 21.0.15 = 2.8.1
12412             [skia_freetype_ok=yes],
12413             [skia_freetype_ok=no])
12414     else # internal is ok
12415         skia_freetype_ok=yes
12416     fi
12417     AC_MSG_CHECKING([whether to build Skia])
12418     if test "$skia_freetype_ok" = "yes"; then
12419         if test "$enable_skia" = "debug"; then
12420             AC_MSG_RESULT([yes (debug)])
12421             ENABLE_SKIA_DEBUG=TRUE
12422         else
12423             AC_MSG_RESULT([yes])
12424             ENABLE_SKIA_DEBUG=
12425         fi
12426         ENABLE_SKIA=TRUE
12427         if test "$ENDIANNESS" = "big" && test "$ENABLE_SKIA" = "TRUE"; then
12428             AC_MSG_ERROR([skia doesn't work/isn't supported upstream on big-endian. Use --disable-skia])
12429         fi
12431         AC_DEFINE(HAVE_FEATURE_SKIA)
12432         BUILD_TYPE="$BUILD_TYPE SKIA"
12434         if test "$OS" = "MACOSX"; then
12435             AC_DEFINE(SK_GANESH,1)
12436             AC_DEFINE(SK_METAL,1)
12437             SKIA_GPU=METAL
12438             AC_SUBST(SKIA_GPU)
12439         else
12440             AC_DEFINE(SK_GANESH,1)
12441             AC_DEFINE(SK_VULKAN,1)
12442             SKIA_GPU=VULKAN
12443             AC_SUBST(SKIA_GPU)
12444         fi
12445     else
12446         AC_MSG_RESULT([no (freetype too old)])
12447         add_warning "freetype version is too old for Skia library, at least 2.8.1 required, Skia support disabled"
12448     fi
12450 else
12451     AC_MSG_CHECKING([whether to build Skia])
12452     AC_MSG_RESULT([no])
12454 AC_SUBST(ENABLE_SKIA)
12455 AC_SUBST(ENABLE_SKIA_DEBUG)
12457 LO_CLANG_CXXFLAGS_INTRINSICS_SSE2=
12458 LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3=
12459 LO_CLANG_CXXFLAGS_INTRINSICS_SSE41=
12460 LO_CLANG_CXXFLAGS_INTRINSICS_SSE42=
12461 LO_CLANG_CXXFLAGS_INTRINSICS_AVX=
12462 LO_CLANG_CXXFLAGS_INTRINSICS_AVX2=
12463 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512=
12464 LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F=
12465 LO_CLANG_CXXFLAGS_INTRINSICS_F16C=
12466 LO_CLANG_CXXFLAGS_INTRINSICS_FMA=
12467 LO_CLANG_VERSION=
12468 HAVE_LO_CLANG_DLLEXPORTINLINES=
12470 if test "$ENABLE_SKIA" = TRUE -a "$COM_IS_CLANG" != TRUE; then
12471     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12472         AC_MSG_CHECKING([for Clang])
12473         AC_MSG_RESULT([$LO_CLANG_CC / $LO_CLANG_CXX])
12474     else
12475         if test "$_os" = "WINNT"; then
12476             AC_MSG_CHECKING([for clang-cl])
12477             if test -x "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"; then
12478                 LO_CLANG_CC=`win_short_path_for_make "$VC_PRODUCT_DIR/Tools/Llvm/bin/clang-cl.exe"`
12479             elif test -n "$PROGRAMFILES" -a -x "$(cygpath -u "$PROGRAMFILES/LLVM/bin/clang-cl.exe")"; then
12480                 LO_CLANG_CC=`win_short_path_for_make "$PROGRAMFILES/LLVM/bin/clang-cl.exe"`
12481             elif test -x "$(cygpath -u "c:/Program Files/LLVM/bin/clang-cl.exe")"; then
12482                 LO_CLANG_CC=`win_short_path_for_make "c:/Program Files/LLVM/bin/clang-cl.exe"`
12483             fi
12484             if test -n "$LO_CLANG_CC"; then
12485                 dnl explicitly set -m32/-m64
12486                 LO_CLANG_CC="$LO_CLANG_CC -m$WIN_HOST_BITS"
12487                 LO_CLANG_CXX="$LO_CLANG_CC"
12488                 AC_MSG_RESULT([$LO_CLANG_CC])
12489             else
12490                 AC_MSG_RESULT([no])
12491             fi
12493             AC_MSG_CHECKING([the dependency generation prefix (clang.exe -showIncludes)])
12494             echo "#include <stdlib.h>" > conftest.c
12495             LO_CLANG_SHOWINCLUDES_PREFIX=`VSLANG=1033 $LO_CLANG_CC $CFLAGS -c -showIncludes conftest.c 2>/dev/null | \
12496                 grep 'stdlib\.h' | head -n1 | sed 's/ [[[:alpha:]]]:.*//'`
12497             rm -f conftest.c conftest.obj
12498             if test -z "$LO_CLANG_SHOWINCLUDES_PREFIX"; then
12499                 AC_MSG_ERROR([cannot determine the -showIncludes prefix])
12500             else
12501                 AC_MSG_RESULT(["$LO_CLANG_SHOWINCLUDES_PREFIX"])
12502             fi
12503         else
12504             AC_CHECK_PROG(LO_CLANG_CC,clang,clang,[])
12505             AC_CHECK_PROG(LO_CLANG_CXX,clang++,clang++,[])
12506         fi
12507     fi
12508     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12509         clang2_version=`echo __clang_major__.__clang_minor__.__clang_patchlevel__ | $LO_CLANG_CC -E - | tail -1 | sed 's/ //g'`
12510         LO_CLANG_VERSION=`echo "$clang2_version" | $AWK -F. '{ print \$1*10000+(\$2<100?\$2:99)*100+(\$3<100?\$3:99) }'`
12511         if test "$LO_CLANG_VERSION" -lt 50002; then
12512             AC_MSG_WARN(["$clang2_version" is too old or unrecognized, must be at least Clang 5.0.2])
12513             LO_CLANG_CC=
12514             LO_CLANG_CXX=
12515         fi
12516     fi
12517     if test -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX" -a "$_os" = "WINNT"; then
12518         save_CXX="$CXX"
12519         CXX="$LO_CLANG_CXX"
12520         AC_MSG_CHECKING([whether $CXX supports -Zc:dllexportInlines-])
12521         AC_LANG_PUSH([C++])
12522         save_CXXFLAGS=$CXXFLAGS
12523         CXXFLAGS="$CXXFLAGS -Werror -Zc:dllexportInlines-"
12524         AC_COMPILE_IFELSE([AC_LANG_SOURCE()], [
12525                 HAVE_LO_CLANG_DLLEXPORTINLINES=TRUE
12526                 AC_MSG_RESULT([yes])
12527             ], [AC_MSG_RESULT([no])])
12528         CXXFLAGS=$save_CXXFLAGS
12529         AC_LANG_POP([C++])
12530         CXX="$save_CXX"
12531         if test -z "$HAVE_LO_CLANG_DLLEXPORTINLINES"; then
12532             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.])
12533         fi
12534     fi
12535     if test -z "$LO_CLANG_CC" -o -z "$LO_CLANG_CXX"; then
12536         # Skia is the default on Windows and Mac, so hard-require Clang.
12537         # Elsewhere it's used just by the 'gen' VCL backend which is rarely used.
12538         if test "$_os" = "WINNT" -o "$_os" = "Darwin"; then
12539             AC_MSG_ERROR([Clang compiler not found. The Skia library needs to be built using Clang, or use --disable-skia.])
12540         else
12541             AC_MSG_WARN([Clang compiler not found.])
12542         fi
12543     else
12545         save_CXX="$CXX"
12546         CXX="$LO_CLANG_CXX"
12547         # copy&paste (and adjust) of intrinsics checks, since MSVC's -arch doesn't work well for Clang-cl
12548         flag_sse2=-msse2
12549         flag_ssse3=-mssse3
12550         flag_sse41=-msse4.1
12551         flag_sse42=-msse4.2
12552         flag_avx=-mavx
12553         flag_avx2=-mavx2
12554         flag_avx512="-mavx512f -mavx512vl -mavx512bw -mavx512dq -mavx512cd"
12555         flag_avx512f=-mavx512f
12556         flag_f16c=-mf16c
12557         flag_fma=-mfma
12559         AC_MSG_CHECKING([whether $CXX can compile SSE2 intrinsics])
12560         AC_LANG_PUSH([C++])
12561         save_CXXFLAGS=$CXXFLAGS
12562         CXXFLAGS="$CXXFLAGS $flag_sse2"
12563         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12564             #include <emmintrin.h>
12565             int main () {
12566                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12567                 c = _mm_xor_si128 (a, b);
12568                 return 0;
12569             }
12570             ])],
12571             [can_compile_sse2=yes],
12572             [can_compile_sse2=no])
12573         AC_LANG_POP([C++])
12574         CXXFLAGS=$save_CXXFLAGS
12575         AC_MSG_RESULT([${can_compile_sse2}])
12576         if test "${can_compile_sse2}" = "yes" ; then
12577             LO_CLANG_CXXFLAGS_INTRINSICS_SSE2="$flag_sse2"
12578         fi
12580         AC_MSG_CHECKING([whether $CXX can compile SSSE3 intrinsics])
12581         AC_LANG_PUSH([C++])
12582         save_CXXFLAGS=$CXXFLAGS
12583         CXXFLAGS="$CXXFLAGS $flag_ssse3"
12584         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12585             #include <tmmintrin.h>
12586             int main () {
12587                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12588                 c = _mm_maddubs_epi16 (a, b);
12589                 return 0;
12590             }
12591             ])],
12592             [can_compile_ssse3=yes],
12593             [can_compile_ssse3=no])
12594         AC_LANG_POP([C++])
12595         CXXFLAGS=$save_CXXFLAGS
12596         AC_MSG_RESULT([${can_compile_ssse3}])
12597         if test "${can_compile_ssse3}" = "yes" ; then
12598             LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3="$flag_ssse3"
12599         fi
12601         AC_MSG_CHECKING([whether $CXX can compile SSE4.1 intrinsics])
12602         AC_LANG_PUSH([C++])
12603         save_CXXFLAGS=$CXXFLAGS
12604         CXXFLAGS="$CXXFLAGS $flag_sse41"
12605         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12606             #include <smmintrin.h>
12607             int main () {
12608                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12609                 c = _mm_cmpeq_epi64 (a, b);
12610                 return 0;
12611             }
12612             ])],
12613             [can_compile_sse41=yes],
12614             [can_compile_sse41=no])
12615         AC_LANG_POP([C++])
12616         CXXFLAGS=$save_CXXFLAGS
12617         AC_MSG_RESULT([${can_compile_sse41}])
12618         if test "${can_compile_sse41}" = "yes" ; then
12619             LO_CLANG_CXXFLAGS_INTRINSICS_SSE41="$flag_sse41"
12620         fi
12622         AC_MSG_CHECKING([whether $CXX can compile SSE4.2 intrinsics])
12623         AC_LANG_PUSH([C++])
12624         save_CXXFLAGS=$CXXFLAGS
12625         CXXFLAGS="$CXXFLAGS $flag_sse42"
12626         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12627             #include <nmmintrin.h>
12628             int main () {
12629                 __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c;
12630                 c = _mm_cmpgt_epi64 (a, b);
12631                 return 0;
12632             }
12633             ])],
12634             [can_compile_sse42=yes],
12635             [can_compile_sse42=no])
12636         AC_LANG_POP([C++])
12637         CXXFLAGS=$save_CXXFLAGS
12638         AC_MSG_RESULT([${can_compile_sse42}])
12639         if test "${can_compile_sse42}" = "yes" ; then
12640             LO_CLANG_CXXFLAGS_INTRINSICS_SSE42="$flag_sse42"
12641         fi
12643         AC_MSG_CHECKING([whether $CXX can compile AVX intrinsics])
12644         AC_LANG_PUSH([C++])
12645         save_CXXFLAGS=$CXXFLAGS
12646         CXXFLAGS="$CXXFLAGS $flag_avx"
12647         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12648             #include <immintrin.h>
12649             int main () {
12650                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c;
12651                 c = _mm256_xor_ps(a, b);
12652                 return 0;
12653             }
12654             ])],
12655             [can_compile_avx=yes],
12656             [can_compile_avx=no])
12657         AC_LANG_POP([C++])
12658         CXXFLAGS=$save_CXXFLAGS
12659         AC_MSG_RESULT([${can_compile_avx}])
12660         if test "${can_compile_avx}" = "yes" ; then
12661             LO_CLANG_CXXFLAGS_INTRINSICS_AVX="$flag_avx"
12662         fi
12664         AC_MSG_CHECKING([whether $CXX can compile AVX2 intrinsics])
12665         AC_LANG_PUSH([C++])
12666         save_CXXFLAGS=$CXXFLAGS
12667         CXXFLAGS="$CXXFLAGS $flag_avx2"
12668         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12669             #include <immintrin.h>
12670             int main () {
12671                 __m256i a = _mm256_set1_epi32 (0), b = _mm256_set1_epi32 (0), c;
12672                 c = _mm256_maddubs_epi16(a, b);
12673                 return 0;
12674             }
12675             ])],
12676             [can_compile_avx2=yes],
12677             [can_compile_avx2=no])
12678         AC_LANG_POP([C++])
12679         CXXFLAGS=$save_CXXFLAGS
12680         AC_MSG_RESULT([${can_compile_avx2}])
12681         if test "${can_compile_avx2}" = "yes" ; then
12682             LO_CLANG_CXXFLAGS_INTRINSICS_AVX2="$flag_avx2"
12683         fi
12685         AC_MSG_CHECKING([whether $CXX can compile AVX512 intrinsics])
12686         AC_LANG_PUSH([C++])
12687         save_CXXFLAGS=$CXXFLAGS
12688         CXXFLAGS="$CXXFLAGS $flag_avx512"
12689         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12690             #include <immintrin.h>
12691             int main () {
12692                 __m512i a = _mm512_loadu_si512(0);
12693                 __m512d v1 = _mm512_load_pd(0);
12694                 // https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/config/i386/avx512fintrin.h;h=23bce99cbe7016a04e14c2163ed3fe6a5a64f4e2
12695                 __m512d v2 = _mm512_abs_pd(v1);
12696                 return 0;
12697             }
12698             ])],
12699             [can_compile_avx512=yes],
12700             [can_compile_avx512=no])
12701         AC_LANG_POP([C++])
12702         CXXFLAGS=$save_CXXFLAGS
12703         AC_MSG_RESULT([${can_compile_avx512}])
12704         if test "${can_compile_avx512}" = "yes" ; then
12705             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512="$flag_avx512"
12706             LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F="$flag_avx512f"
12707         fi
12709         AC_MSG_CHECKING([whether $CXX can compile F16C intrinsics])
12710         AC_LANG_PUSH([C++])
12711         save_CXXFLAGS=$CXXFLAGS
12712         CXXFLAGS="$CXXFLAGS $flag_f16c"
12713         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12714             #include <immintrin.h>
12715             int main () {
12716                 __m128i a = _mm_set1_epi32 (0);
12717                 __m128 c;
12718                 c = _mm_cvtph_ps(a);
12719                 return 0;
12720             }
12721             ])],
12722             [can_compile_f16c=yes],
12723             [can_compile_f16c=no])
12724         AC_LANG_POP([C++])
12725         CXXFLAGS=$save_CXXFLAGS
12726         AC_MSG_RESULT([${can_compile_f16c}])
12727         if test "${can_compile_f16c}" = "yes" ; then
12728             LO_CLANG_CXXFLAGS_INTRINSICS_F16C="$flag_f16c"
12729         fi
12731         AC_MSG_CHECKING([whether $CXX can compile FMA intrinsics])
12732         AC_LANG_PUSH([C++])
12733         save_CXXFLAGS=$CXXFLAGS
12734         CXXFLAGS="$CXXFLAGS $flag_fma"
12735         AC_COMPILE_IFELSE([AC_LANG_SOURCE([
12736             #include <immintrin.h>
12737             int main () {
12738                 __m256 a = _mm256_set1_ps (0.0f), b = _mm256_set1_ps (0.0f), c = _mm256_set1_ps (0.0f), d;
12739                 d = _mm256_fmadd_ps(a, b, c);
12740                 return 0;
12741             }
12742             ])],
12743             [can_compile_fma=yes],
12744             [can_compile_fma=no])
12745         AC_LANG_POP([C++])
12746         CXXFLAGS=$save_CXXFLAGS
12747         AC_MSG_RESULT([${can_compile_fma}])
12748         if test "${can_compile_fma}" = "yes" ; then
12749             LO_CLANG_CXXFLAGS_INTRINSICS_FMA="$flag_fma"
12750         fi
12752         CXX="$save_CXX"
12753     fi
12756 # prefix LO_CLANG_CC/LO_CLANG_CXX with ccache if needed
12758 if test "$CCACHE" != "" -a -n "$LO_CLANG_CC" -a -n "$LO_CLANG_CXX"; then
12759     AC_MSG_CHECKING([whether $LO_CLANG_CC is already ccached])
12760     AC_LANG_PUSH([C])
12761     save_CC="$CC"
12762     CC="$LO_CLANG_CC"
12763     save_CFLAGS=$CFLAGS
12764     CFLAGS="$CFLAGS --ccache-skip -O2 -Werror"
12765     dnl an empty program will do, we're checking the compiler flags
12766     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12767                       [use_ccache=yes], [use_ccache=no])
12768     CFLAGS=$save_CFLAGS
12769     CC=$save_CC
12770     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12771         AC_MSG_RESULT([yes])
12772     else
12773         LO_CLANG_CC="$CCACHE $LO_CLANG_CC"
12774         AC_MSG_RESULT([no])
12775     fi
12776     AC_LANG_POP([C])
12778     AC_MSG_CHECKING([whether $LO_CLANG_CXX is already ccached])
12779     AC_LANG_PUSH([C++])
12780     save_CXX="$CXX"
12781     CXX="$LO_CLANG_CXX"
12782     save_CXXFLAGS=$CXXFLAGS
12783     CXXFLAGS="$CXXFLAGS --ccache-skip -O2 -Werror"
12784     dnl an empty program will do, we're checking the compiler flags
12785     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
12786                       [use_ccache=yes], [use_ccache=no])
12787     if test $use_ccache = yes -a "${CCACHE/*sccache*/}" != ""; then
12788         AC_MSG_RESULT([yes])
12789     else
12790         LO_CLANG_CXX="$CCACHE $LO_CLANG_CXX"
12791         AC_MSG_RESULT([no])
12792     fi
12793     CXXFLAGS=$save_CXXFLAGS
12794     CXX=$save_CXX
12795     AC_LANG_POP([C++])
12798 AC_SUBST(LO_CLANG_CC)
12799 AC_SUBST(LO_CLANG_CXX)
12800 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE2)
12801 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSSE3)
12802 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE41)
12803 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_SSE42)
12804 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX)
12805 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX2)
12806 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512)
12807 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_AVX512F)
12808 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_F16C)
12809 AC_SUBST(LO_CLANG_CXXFLAGS_INTRINSICS_FMA)
12810 AC_SUBST(LO_CLANG_SHOWINCLUDES_PREFIX)
12811 AC_SUBST(LO_CLANG_VERSION)
12812 AC_SUBST(CLANG_USE_LD)
12813 AC_SUBST([HAVE_LO_CLANG_DLLEXPORTINLINES])
12815 SYSTEM_GPGMEPP=
12817 AC_MSG_CHECKING([whether to enable gpgmepp])
12818 if test "$enable_gpgmepp" = no; then
12819     AC_MSG_RESULT([no])
12820 elif test "$enable_mpl_subset" = "yes"; then
12821     AC_MSG_RESULT([no (MPL only)])
12822 elif test "$enable_fuzzers" = "yes"; then
12823     AC_MSG_RESULT([no (oss-fuzz)])
12824 elif test \( \( "$_os" = "Linux" -o "$_os" = "Darwin" \) -a "$ENABLE_NSS" = TRUE \) -o "$_os" = "WINNT" ; then
12825     AC_MSG_RESULT([yes])
12826     dnl ===================================================================
12827     dnl Check for system gpgme
12828     dnl ===================================================================
12829     AC_MSG_CHECKING([which gpgmepp to use])
12830     if test "$with_system_gpgmepp" = "yes"; then
12831         AC_MSG_RESULT([external])
12832         SYSTEM_GPGMEPP=TRUE
12834         # C++ library doesn't come with fancy gpgmepp-config, check for headers the old-fashioned way
12835         AC_CHECK_HEADER(gpgme++/gpgmepp_version.h, [ GPGMEPP_CFLAGS=-I/usr/include/gpgme++ ],
12836             [AC_MSG_ERROR([gpgmepp headers not found, install gpgmepp >= 1.14 development package])], [])
12837         AC_CHECK_HEADER(gpgme.h, [],
12838             [AC_MSG_ERROR([gpgme headers not found, install gpgme development package])], [])
12839         AC_CHECK_LIB(gpgmepp, main, [],
12840             [AC_MSG_ERROR(gpgmepp not found or not functional)], [])
12841         GPGMEPP_LIBS=-lgpgmepp
12842     else
12843         AC_MSG_RESULT([internal])
12844         BUILD_TYPE="$BUILD_TYPE LIBGPGERROR LIBASSUAN GPGMEPP"
12846         GPG_ERROR_CFLAGS="-I${WORKDIR}/UnpackedTarball/libgpg-error/src"
12847         LIBASSUAN_CFLAGS="-I${WORKDIR}/UnpackedTarball/libassuan/src"
12848         if test "$_os" != "WINNT"; then
12849             GPG_ERROR_LIBS="-L${WORKDIR}/UnpackedTarball/libgpg-error/src/.libs -lgpg-error"
12850             LIBASSUAN_LIBS="-L${WORKDIR}/UnpackedTarball/libassuan/src/.libs -lassuan"
12851         fi
12852     fi
12853     ENABLE_GPGMEPP=TRUE
12854     AC_DEFINE([HAVE_FEATURE_GPGME])
12855     AC_PATH_PROG(GPG, gpg)
12856     # TODO: Windows's cygwin gpg does not seem to work with our gpgme,
12857     # so let's exclude that manually for the moment
12858     if test -n "$GPG" -a "$_os" != "WINNT"; then
12859         # make sure we not only have a working gpgme, but a full working
12860         # gpg installation to run OpenPGP signature verification
12861         AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
12862     fi
12863     if test "$_os" = "Linux"; then
12864       uid=`id -u`
12865       AC_MSG_CHECKING([for /run/user/$uid])
12866       if test -d /run/user/$uid; then
12867         AC_MSG_RESULT([yes])
12868         AC_PATH_PROG(GPGCONF, gpgconf)
12870         # Older versions of gpgconf are not working as expected, since
12871         # `gpgconf --remove-socketdir` fails to exit any gpg-agent daemon operating
12872         # on that socket dir that has (indirectly) been started by the tests in xmlsecurity/qa/unit/signing/signing.cxx
12873         # (see commit message of f0305ec0a7d199e605511844d9d6af98b66d4bfd%5E )
12874         AC_MSG_CHECKING([whether version of gpgconf is suitable ... ])
12875         GPGCONF_VERSION=`"$GPGCONF" --version | "$AWK" '/^gpgconf \(GnuPG\)/{print $3}'`
12876         GPGCONF_NUMVER=`echo $GPGCONF_VERSION | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
12877         if test "$GPGCONF_VERSION" = "2.2_OOo" -o "$GPGCONF_NUMVER" -ge "020200"; then
12878           AC_MSG_RESULT([yes, $GPGCONF_VERSION])
12879           AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
12880           if $GPGCONF --dump-options > /dev/null ; then
12881             if $GPGCONF --dump-options | grep -q create-socketdir ; then
12882               AC_MSG_RESULT([yes])
12883               AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
12884               AC_DEFINE_UNQUOTED([GPGME_GPGCONF], ["$GPGCONF"])
12885             else
12886               AC_MSG_RESULT([no])
12887             fi
12888           else
12889             AC_MSG_RESULT([no. missing or broken gpgconf?])
12890           fi
12891         else
12892           AC_MSG_RESULT([no, $GPGCONF_VERSION])
12893         fi
12894       else
12895         AC_MSG_RESULT([no])
12896      fi
12897    fi
12898 else
12899     AC_MSG_RESULT([no (unsupported OS or missing NSS)])
12901 AC_SUBST(ENABLE_GPGMEPP)
12902 AC_SUBST(SYSTEM_GPGMEPP)
12903 AC_SUBST(GPG_ERROR_CFLAGS)
12904 AC_SUBST(GPG_ERROR_LIBS)
12905 AC_SUBST(LIBASSUAN_CFLAGS)
12906 AC_SUBST(LIBASSUAN_LIBS)
12907 AC_SUBST(GPGMEPP_CFLAGS)
12908 AC_SUBST(GPGMEPP_LIBS)
12910 AC_MSG_CHECKING([whether to build Java Websocket for the UNO remote websocket client])
12911 if test "$with_java" != "no"; then
12912     AC_MSG_RESULT([yes])
12913     ENABLE_JAVA_WEBSOCKET=TRUE
12914     BUILD_TYPE="$BUILD_TYPE JAVA_WEBSOCKET"
12915     NEED_ANT=TRUE
12916 else
12917     AC_MSG_RESULT([no])
12918     ENABLE_JAVA_WEBSOCKET=
12920 AC_SUBST(ENABLE_JAVA_WEBSOCKET)
12922 AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
12923 if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
12924     AC_MSG_RESULT([yes])
12925     ENABLE_MEDIAWIKI=TRUE
12926     BUILD_TYPE="$BUILD_TYPE XSLTML"
12927     if test  "x$with_java" = "xno"; then
12928         AC_MSG_ERROR([Wiki Publisher requires Java! Enable Java if you want to build it.])
12929     fi
12930 else
12931     AC_MSG_RESULT([no])
12932     ENABLE_MEDIAWIKI=
12933     SCPDEFS="$SCPDEFS -DWITHOUT_EXTENSION_MEDIAWIKI"
12935 AC_SUBST(ENABLE_MEDIAWIKI)
12937 AC_MSG_CHECKING([whether to build the Report Builder])
12938 if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
12939     AC_MSG_RESULT([yes])
12940     ENABLE_REPORTBUILDER=TRUE
12941     AC_MSG_CHECKING([which jfreereport libs to use])
12942     if test "$with_system_jfreereport" = "yes"; then
12943         SYSTEM_JFREEREPORT=TRUE
12944         AC_MSG_RESULT([external])
12945         if test -z $SAC_JAR; then
12946             SAC_JAR=/usr/share/java/sac.jar
12947         fi
12948         if ! test -f $SAC_JAR; then
12949              AC_MSG_ERROR(sac.jar not found.)
12950         fi
12952         if test -z $LIBXML_JAR; then
12953             if test -f /usr/share/java/libxml-1.0.0.jar; then
12954                 LIBXML_JAR=/usr/share/java/libxml-1.0.0.jar
12955             elif test -f /usr/share/java/libxml.jar; then
12956                 LIBXML_JAR=/usr/share/java/libxml.jar
12957             else
12958                 AC_MSG_ERROR(libxml.jar replacement not found.)
12959             fi
12960         elif ! test -f $LIBXML_JAR; then
12961             AC_MSG_ERROR(libxml.jar not found.)
12962         fi
12964         if test -z $FLUTE_JAR; then
12965             if test -f /usr/share/java/flute-1.3.0.jar; then
12966                 FLUTE_JAR=/usr/share/java/flute-1.3.0.jar
12967             elif test -f /usr/share/java/flute.jar; then
12968                 FLUTE_JAR=/usr/share/java/flute.jar
12969             else
12970                 AC_MSG_ERROR(flute-1.3.0.jar replacement not found.)
12971             fi
12972         elif ! test -f $FLUTE_JAR; then
12973             AC_MSG_ERROR(flute-1.3.0.jar not found.)
12974         fi
12976         if test -z $JFREEREPORT_JAR; then
12977             if test -f /usr/share/java/flow-engine-0.9.2.jar; then
12978                 JFREEREPORT_JAR=/usr/share/java/flow-engine-0.9.2.jar
12979             elif test -f /usr/share/java/flow-engine.jar; then
12980                 JFREEREPORT_JAR=/usr/share/java/flow-engine.jar
12981             else
12982                 AC_MSG_ERROR(jfreereport.jar replacement not found.)
12983             fi
12984         elif ! test -f  $JFREEREPORT_JAR; then
12985                 AC_MSG_ERROR(jfreereport.jar not found.)
12986         fi
12988         if test -z $LIBLAYOUT_JAR; then
12989             if test -f /usr/share/java/liblayout-0.2.9.jar; then
12990                 LIBLAYOUT_JAR=/usr/share/java/liblayout-0.2.9.jar
12991             elif test -f /usr/share/java/liblayout.jar; then
12992                 LIBLAYOUT_JAR=/usr/share/java/liblayout.jar
12993             else
12994                 AC_MSG_ERROR(liblayout.jar replacement not found.)
12995             fi
12996         elif ! test -f $LIBLAYOUT_JAR; then
12997                 AC_MSG_ERROR(liblayout.jar not found.)
12998         fi
13000         if test -z $LIBLOADER_JAR; then
13001             if test -f /usr/share/java/libloader-1.0.0.jar; then
13002                 LIBLOADER_JAR=/usr/share/java/libloader-1.0.0.jar
13003             elif test -f /usr/share/java/libloader.jar; then
13004                 LIBLOADER_JAR=/usr/share/java/libloader.jar
13005             else
13006                 AC_MSG_ERROR(libloader.jar replacement not found.)
13007             fi
13008         elif ! test -f  $LIBLOADER_JAR; then
13009             AC_MSG_ERROR(libloader.jar not found.)
13010         fi
13012         if test -z $LIBFORMULA_JAR; then
13013             if test -f /usr/share/java/libformula-0.2.0.jar; then
13014                 LIBFORMULA_JAR=/usr/share/java/libformula-0.2.0.jar
13015             elif test -f /usr/share/java/libformula.jar; then
13016                 LIBFORMULA_JAR=/usr/share/java/libformula.jar
13017             else
13018                 AC_MSG_ERROR(libformula.jar replacement not found.)
13019             fi
13020         elif ! test -f $LIBFORMULA_JAR; then
13021                 AC_MSG_ERROR(libformula.jar not found.)
13022         fi
13024         if test -z $LIBREPOSITORY_JAR; then
13025             if test -f /usr/share/java/librepository-1.0.0.jar; then
13026                 LIBREPOSITORY_JAR=/usr/share/java/librepository-1.0.0.jar
13027             elif test -f /usr/share/java/librepository.jar; then
13028                 LIBREPOSITORY_JAR=/usr/share/java/librepository.jar
13029             else
13030                 AC_MSG_ERROR(librepository.jar replacement not found.)
13031             fi
13032         elif ! test -f $LIBREPOSITORY_JAR; then
13033             AC_MSG_ERROR(librepository.jar not found.)
13034         fi
13036         if test -z $LIBFONTS_JAR; then
13037             if test -f /usr/share/java/libfonts-1.0.0.jar; then
13038                 LIBFONTS_JAR=/usr/share/java/libfonts-1.0.0.jar
13039             elif test -f /usr/share/java/libfonts.jar; then
13040                 LIBFONTS_JAR=/usr/share/java/libfonts.jar
13041             else
13042                 AC_MSG_ERROR(libfonts.jar replacement not found.)
13043             fi
13044         elif ! test -f $LIBFONTS_JAR; then
13045                 AC_MSG_ERROR(libfonts.jar not found.)
13046         fi
13048         if test -z $LIBSERIALIZER_JAR; then
13049             if test -f /usr/share/java/libserializer-1.0.0.jar; then
13050                 LIBSERIALIZER_JAR=/usr/share/java/libserializer-1.0.0.jar
13051             elif test -f /usr/share/java/libserializer.jar; then
13052                 LIBSERIALIZER_JAR=/usr/share/java/libserializer.jar
13053             else
13054                 AC_MSG_ERROR(libserializer.jar replacement not found.)
13055             fi
13056         elif ! test -f $LIBSERIALIZER_JAR; then
13057                 AC_MSG_ERROR(libserializer.jar not found.)
13058         fi
13060         if test -z $LIBBASE_JAR; then
13061             if test -f /usr/share/java/libbase-1.0.0.jar; then
13062                 LIBBASE_JAR=/usr/share/java/libbase-1.0.0.jar
13063             elif test -f /usr/share/java/libbase.jar; then
13064                 LIBBASE_JAR=/usr/share/java/libbase.jar
13065             else
13066                 AC_MSG_ERROR(libbase.jar replacement not found.)
13067             fi
13068         elif ! test -f $LIBBASE_JAR; then
13069             AC_MSG_ERROR(libbase.jar not found.)
13070         fi
13072     else
13073         AC_MSG_RESULT([internal])
13074         SYSTEM_JFREEREPORT=
13075         BUILD_TYPE="$BUILD_TYPE JFREEREPORT"
13076         NEED_ANT=TRUE
13077     fi
13078     BUILD_TYPE="$BUILD_TYPE REPORTBUILDER"
13079 else
13080     AC_MSG_RESULT([no])
13081     ENABLE_REPORTBUILDER=
13082     SYSTEM_JFREEREPORT=
13084 AC_SUBST(ENABLE_REPORTBUILDER)
13085 AC_SUBST(SYSTEM_JFREEREPORT)
13086 AC_SUBST(SAC_JAR)
13087 AC_SUBST(LIBXML_JAR)
13088 AC_SUBST(FLUTE_JAR)
13089 AC_SUBST(JFREEREPORT_JAR)
13090 AC_SUBST(LIBBASE_JAR)
13091 AC_SUBST(LIBLAYOUT_JAR)
13092 AC_SUBST(LIBLOADER_JAR)
13093 AC_SUBST(LIBFORMULA_JAR)
13094 AC_SUBST(LIBREPOSITORY_JAR)
13095 AC_SUBST(LIBFONTS_JAR)
13096 AC_SUBST(LIBSERIALIZER_JAR)
13098 # scripting provider for BeanShell?
13099 AC_MSG_CHECKING([whether to build support for scripts in BeanShell])
13100 if test "${enable_scripting_beanshell}" != "no" -a "x$with_java" != "xno"; then
13101     AC_MSG_RESULT([yes])
13102     ENABLE_SCRIPTING_BEANSHELL=TRUE
13104     dnl ===================================================================
13105     dnl Check for system beanshell
13106     dnl ===================================================================
13107     AC_MSG_CHECKING([which beanshell to use])
13108     if test "$with_system_beanshell" = "yes"; then
13109         AC_MSG_RESULT([external])
13110         SYSTEM_BSH=TRUE
13111         if test -z $BSH_JAR; then
13112             BSH_JAR=/usr/share/java/bsh.jar
13113         fi
13114         if ! test -f $BSH_JAR; then
13115             AC_MSG_ERROR(bsh.jar not found.)
13116         fi
13117     else
13118         AC_MSG_RESULT([internal])
13119         SYSTEM_BSH=
13120         BUILD_TYPE="$BUILD_TYPE BSH"
13121     fi
13122 else
13123     AC_MSG_RESULT([no])
13124     ENABLE_SCRIPTING_BEANSHELL=
13125     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_BEANSHELL"
13127 AC_SUBST(ENABLE_SCRIPTING_BEANSHELL)
13128 AC_SUBST(SYSTEM_BSH)
13129 AC_SUBST(BSH_JAR)
13131 # scripting provider for JavaScript?
13132 AC_MSG_CHECKING([whether to build support for scripts in JavaScript])
13133 if test "${enable_scripting_javascript}" != "no" -a "x$with_java" != "xno"; then
13134     AC_MSG_RESULT([yes])
13135     ENABLE_SCRIPTING_JAVASCRIPT=TRUE
13137     dnl ===================================================================
13138     dnl Check for system rhino
13139     dnl ===================================================================
13140     AC_MSG_CHECKING([which rhino to use])
13141     if test "$with_system_rhino" = "yes"; then
13142         AC_MSG_RESULT([external])
13143         SYSTEM_RHINO=TRUE
13144         if test -z $RHINO_JAR; then
13145             RHINO_JAR=/usr/share/java/js.jar
13146         fi
13147         if ! test -f $RHINO_JAR; then
13148             AC_MSG_ERROR(js.jar not found.)
13149         fi
13150     else
13151         AC_MSG_RESULT([internal])
13152         SYSTEM_RHINO=
13153         BUILD_TYPE="$BUILD_TYPE RHINO"
13154         NEED_ANT=TRUE
13155     fi
13156 else
13157     AC_MSG_RESULT([no])
13158     ENABLE_SCRIPTING_JAVASCRIPT=
13159     SCPDEFS="$SCPDEFS -DWITHOUT_SCRIPTING_JAVASCRIPT"
13161 AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT)
13162 AC_SUBST(SYSTEM_RHINO)
13163 AC_SUBST(RHINO_JAR)
13165 # This is only used in Qt5/Qt6/KF5/KF6 checks to determine if /usr/lib64
13166 # paths should be added to library search path. So lets put all 64-bit
13167 # platforms there.
13168 supports_multilib=
13169 case "$host_cpu" in
13170 x86_64 | powerpc64 | powerpc64le | s390x | aarch64 | mips64 | mips64el | loongarch64 | riscv64)
13171     if test "$SAL_TYPES_SIZEOFLONG" = "8"; then
13172         supports_multilib="yes"
13173     fi
13174     ;;
13176     ;;
13177 esac
13179 dnl ===================================================================
13180 dnl QT5 Integration
13181 dnl ===================================================================
13183 QT5_CFLAGS=""
13184 QT5_LIBS=""
13185 QT5_GOBJECT_CFLAGS=""
13186 QT5_GOBJECT_LIBS=""
13187 QT5_HAVE_GOBJECT=""
13188 QT5_PLATFORMS_SRCDIR=""
13189 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13190         \( "$test_qt5" = "yes" -a "$ENABLE_QT5" = "TRUE" \) -o \
13191         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13192 then
13193     qt5_incdirs="$QT5INC /usr/include/qt5 /usr/include $x_includes"
13194     qt5_libdirs="$QT5LIB /usr/lib/qt5 /usr/lib $x_libraries"
13196     if test -n "$supports_multilib"; then
13197         qt5_libdirs="$qt5_libdirs /usr/lib64/qt5 /usr/lib64/qt /usr/lib64"
13198     fi
13200     qt5_test_include="QtWidgets/qapplication.h"
13201     if test "$_os" = "Emscripten"; then
13202         qt5_test_library="libQt5Widgets.a"
13203     else
13204         qt5_test_library="libQt5Widgets.so"
13205     fi
13207     dnl Check for qmake5
13208     if test -n "$QT5DIR"; then
13209         AC_PATH_PROG(QMAKE5, [qmake], no, [$QT5DIR/bin])
13210     else
13211         AC_PATH_PROGS(QMAKE5, [qmake-qt5 qmake], no)
13212     fi
13213     if test "$QMAKE5" = "no"; then
13214         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13215     else
13216         qmake5_test_ver="`$QMAKE5 -v 2>&1 | $SED -n -e 's/^Using Qt version \(5\.[[0-9.]]\+\).*$/\1/p'`"
13217         if test -z "$qmake5_test_ver"; then
13218             AC_MSG_ERROR([Wrong qmake for Qt5 found. Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13219         fi
13220         qmake5_minor_version="`echo $qmake5_test_ver | cut -d. -f2`"
13221         qt5_minimal_minor="15"
13222         if test "$qmake5_minor_version" -lt "$qt5_minimal_minor"; then
13223             AC_MSG_ERROR([The minimal supported Qt5 version is 5.${qt5_minimal_minor}, but your 'qmake -v' reports Qt5 version $qmake5_test_ver.])
13224         else
13225             AC_MSG_NOTICE([Detected Qt5 version: $qmake5_test_ver])
13226         fi
13227     fi
13229     qt5_incdirs="`$QMAKE5 -query QT_INSTALL_HEADERS` $qt5_incdirs"
13230     qt5_libdirs="`$QMAKE5 -query QT_INSTALL_LIBS` $qt5_libdirs"
13231     qt5_platformsdir="`$QMAKE5 -query QT_INSTALL_PLUGINS`/platforms"
13232     QT5_PLATFORMS_SRCDIR="$qt5_platformsdir"
13234     AC_MSG_CHECKING([for Qt5 headers])
13235     qt5_incdir="no"
13236     for inc_dir in $qt5_incdirs; do
13237         if test -r "$inc_dir/$qt5_test_include"; then
13238             qt5_incdir="$inc_dir"
13239             break
13240         fi
13241     done
13242     AC_MSG_RESULT([$qt5_incdir])
13243     if test "x$qt5_incdir" = "xno"; then
13244         AC_MSG_ERROR([Qt5 headers not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13245     fi
13246     # check for scenario: qt5-qtbase-devel-*.86_64 installed but host is i686
13247     AC_LANG_PUSH([C++])
13248     save_CPPFLAGS=$CPPFLAGS
13249     CPPFLAGS="${CPPFLAGS} -I${qt5_incdir}"
13250     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13251         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13252     CPPFLAGS=$save_CPPFLAGS
13253     AC_LANG_POP([C++])
13255     AC_MSG_CHECKING([for Qt5 libraries])
13256     qt5_libdir="no"
13257     for lib_dir in $qt5_libdirs; do
13258         if test -r "$lib_dir/$qt5_test_library"; then
13259             qt5_libdir="$lib_dir"
13260             break
13261         fi
13262     done
13263     AC_MSG_RESULT([$qt5_libdir])
13264     if test "x$qt5_libdir" = "xno"; then
13265         AC_MSG_ERROR([Qt5 libraries not found.  Please specify the root of your Qt5 installation by exporting QT5DIR before running "configure".])
13266     fi
13268     if test "$_os" = "Emscripten"; then
13269         if test ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13270             QT5_PLATFORMS_SRCDIR="${QT5_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13271         fi
13272         if test ! -f "${qt5_platformsdir}"/libqwasm.a -o ! -f "$QT5_PLATFORMS_SRCDIR"/wasm_shell.html; then
13273             AC_MSG_ERROR([No Qt5 WASM QPA plugin found in ${qt5_platformsdir} or ${QT5_PLATFORMS_SRCDIR}])
13274         fi
13276         EMSDK_LLVM_NM="$(em-config LLVM_ROOT)"/llvm-nm
13277         if ! test -x "$EMSDK_LLVM_NM"; then
13278             AC_MSG_ERROR([Missing llvm-nm expected to be found at "$EMSDK_LLVM_NM".])
13279         fi
13280         if test ! -f "${qt5_libdir}"/libQt5Gui.a; then
13281             AC_MSG_ERROR([No Qt5 WASM libQt5Gui.a in ${qt5_libdir}])
13282         fi
13283         QT5_WASM_SJLJ="`${EMSDK_LLVM_NM} "${qt5_libdir}"/libQt5Gui.a 2>/dev/null | $GREP emscripten_longjmp`"
13284         if test "$ENABLE_WASM_EXCEPTIONS" = TRUE -a -n "$QT5_WASM_SJLJ"; then
13285             AC_MSG_ERROR(['emscripten_longjmp' symbol found in libQt5Gui.a (missing '-s SUPPORT_LONGJMP=wasm'). See static/README.wasm.md.])
13286         fi
13287         if test "$ENABLE_WASM_EXCEPTIONS" != TRUE -a -z "$QT5_WASM_SJLJ"; then
13288             AC_MSG_ERROR(['emscripten_longjmp' symbol not found in libQt5Gui.a. You probably use an incompatible Qt build with '-s SUPPORT_LONGJMP=wasm'.])
13289         fi
13290     fi
13292     QT5_CFLAGS="-I$qt5_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13293     QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13294     QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13295     if test "$_os" = "Emscripten"; then
13296         QT5_LIBS="$QT5_LIBS -lqtpcre2 -lQt5EventDispatcherSupport -lQt5FontDatabaseSupport -L${qt5_platformsdir} -lqwasm"
13297     fi
13299     if test "$USING_X11" = TRUE; then
13300         PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])])
13301         QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS $QT5_XCB_ICCCM_CFLAGS"
13302         QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS $QT5_XCB_ICCCM_LIBS -lQt5X11Extras"
13303         QT5_USING_X11=1
13304         AC_DEFINE(QT5_USING_X11)
13305     fi
13307     dnl Check for Meta Object Compiler
13309     AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH])
13310     if test "$MOC5" = "no"; then
13311         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13312 the root of your Qt installation by exporting QT5DIR before running "configure".])
13313     fi
13315     if test "$test_gstreamer_1_0" = yes; then
13316         PKG_CHECK_MODULES(QT5_GOBJECT,[gobject-2.0], [
13317                 QT5_HAVE_GOBJECT=1
13318                 AC_DEFINE(QT5_HAVE_GOBJECT)
13319             ],
13320             AC_MSG_WARN([[No GObject found, can't use QWidget GStreamer sink on wayland!]])
13321         )
13322     fi
13324 AC_SUBST(QT5_CFLAGS)
13325 AC_SUBST(QT5_LIBS)
13326 AC_SUBST(MOC5)
13327 AC_SUBST(QT5_GOBJECT_CFLAGS)
13328 AC_SUBST(QT5_GOBJECT_LIBS)
13329 AC_SUBST(QT5_HAVE_GOBJECT)
13330 AC_SUBST(QT5_PLATFORMS_SRCDIR)
13332 dnl ===================================================================
13333 dnl QT6 Integration
13334 dnl ===================================================================
13336 QT6_CFLAGS=""
13337 QT6_LIBS=""
13338 QT6_PLATFORMS_SRCDIR=""
13339 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \) -o \
13340         \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \)
13341 then
13342     qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes"
13343     qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries"
13345     if test -n "$supports_multilib"; then
13346         qt6_libdirs="$qt6_libdirs /usr/lib64/qt6 /usr/lib64/qt /usr/lib64"
13347     fi
13349     qt6_test_include="QtWidgets/qapplication.h"
13350     if test "$_os" = "Emscripten"; then
13351         qt6_test_library="libQt6Widgets.a"
13352     else
13353         qt6_test_library="libQt6Widgets.so"
13354     fi
13356     dnl Check for qmake6
13357     if test -n "$QT6DIR"; then
13358         AC_PATH_PROG(QMAKE6, [qmake], no, [$QT6DIR/bin])
13359     else
13360         AC_PATH_PROGS(QMAKE6, [qmake-qt6 qmake6 qmake], no)
13361     fi
13362     if test "$QMAKE6" = "no"; then
13363         AC_MSG_ERROR([Qmake not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13364     else
13365         qmake6_test_ver="`$QMAKE6 -v 2>&1 | $SED -n -e 's/^Using Qt version \(6\.[[0-9.]]\+\).*$/\1/p'`"
13366         if test -z "$qmake6_test_ver"; then
13367             AC_MSG_ERROR([Wrong qmake for Qt6 found. Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13368         fi
13369         AC_MSG_NOTICE([Detected Qt6 version: $qmake6_test_ver])
13370     fi
13372     qt6_incdirs="`$QMAKE6 -query QT_INSTALL_HEADERS` $qt6_incdirs"
13373     qt6_libdirs="`$QMAKE6 -query QT_INSTALL_LIBS` $qt6_libdirs"
13374     qt6_platformsdir="`$QMAKE6 -query QT_INSTALL_PLUGINS`/platforms"
13375     QT6_PLATFORMS_SRCDIR="$qt6_platformsdir"
13377     AC_MSG_CHECKING([for Qt6 headers])
13378     qt6_incdir="no"
13379     for inc_dir in $qt6_incdirs; do
13380         if test -r "$inc_dir/$qt6_test_include"; then
13381             qt6_incdir="$inc_dir"
13382             break
13383         fi
13384     done
13385     AC_MSG_RESULT([$qt6_incdir])
13386     if test "x$qt6_incdir" = "xno"; then
13387         AC_MSG_ERROR([Qt6 headers not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13388     fi
13389     # check for scenario: qt6-qtbase-devel-*.86_64 installed but host is i686
13390     AC_LANG_PUSH([C++])
13391     save_CPPFLAGS=$CPPFLAGS
13392     CPPFLAGS="${CPPFLAGS} -I${qt6_incdir}"
13393     AC_CHECK_HEADER(QtCore/qconfig.h, [],
13394         [AC_MSG_ERROR(qconfig.h header not found.)], [])
13395     CPPFLAGS=$save_CPPFLAGS
13396     AC_LANG_POP([C++])
13398     AC_MSG_CHECKING([for Qt6 libraries])
13399     qt6_libdir="no"
13400     for lib_dir in $qt6_libdirs; do
13401         if test -r "$lib_dir/$qt6_test_library"; then
13402             qt6_libdir="$lib_dir"
13403             break
13404         fi
13405     done
13406     AC_MSG_RESULT([$qt6_libdir])
13407     if test "x$qt6_libdir" = "xno"; then
13408         AC_MSG_ERROR([Qt6 libraries not found.  Please specify the root of your Qt6 installation by exporting QT6DIR before running "configure".])
13409     fi
13411     if test "$_os" = "Emscripten"; then
13412         if test ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html ; then
13413             QT6_PLATFORMS_SRCDIR="${QT6_PLATFORMS_SRCDIR/plugins/src\/plugins}/wasm"
13414         fi
13415         if test ! -f "${qt6_platformsdir}"/libqwasm.a -o ! -f "$QT6_PLATFORMS_SRCDIR"/wasm_shell.html; then
13416             AC_MSG_ERROR([No Qt6 WASM QPA plugin found in ${qt6_platformsdir} or ${QT6_PLATFORMS_SRCDIR}])
13417         fi
13418     fi
13420     QT6_CFLAGS="-I$qt6_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING"
13421     QT6_CFLAGS=$(printf '%s' "$QT6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13422     QT6_LIBS="-L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13423     if test "$_os" = "Emscripten"; then
13424         QT6_LIBS="$QT6_LIBS -lQt6BundledPcre2 -lQt6BundledZLIB -L${qt6_platformsdir} -lqwasm -sGL_ENABLE_GET_PROC_ADDRESS"
13425     fi
13427     if test "$USING_X11" = TRUE; then
13428         PKG_CHECK_MODULES(QT6_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for key modifier handling in X11.])])
13429         QT6_CFLAGS="$QT6_CFLAGS $QT6_XCB_CFLAGS"
13430         QT6_LIBS="$QT6_LIBS $QT6_XCB_LIBS"
13431         QT6_USING_X11=1
13432         AC_DEFINE(QT6_USING_X11)
13433     fi
13435     dnl Check for Meta Object Compiler
13437     for lib_dir in $qt6_libdirs; do
13438         if test -z "$qt6_libexec_dirs"; then
13439             qt6_libexec_dirs="$lib_dir/libexec"
13440         else
13441             qt6_libexec_dirs="$qt6_libexec_dirs:$lib_dir/libexec"
13442         fi
13443     done
13444     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])
13445     if test "$MOC6" = "no"; then
13446         AC_MSG_ERROR([Qt Meta Object Compiler not found.  Please specify
13447 the root of your Qt installation by exporting QT6DIR before running "configure".])
13448     else
13449         moc6_test_ver="`$MOC6 -v 2>&1 | $SED -n -e 's/^moc \(6.*\)/\1/p'`"
13450         if test -z "$moc6_test_ver"; then
13451             AC_MSG_ERROR([Wrong moc for Qt6 found.])
13452         fi
13453         AC_MSG_NOTICE([Detected moc version: $moc_test_ver])
13454     fi
13456 AC_SUBST(QT6_CFLAGS)
13457 AC_SUBST(QT6_LIBS)
13458 AC_SUBST(MOC6)
13459 AC_SUBST(QT6_PLATFORMS_SRCDIR)
13461 dnl ===================================================================
13462 dnl KF5 Integration
13463 dnl ===================================================================
13465 KF5_CFLAGS=""
13466 KF5_LIBS=""
13467 KF5_CONFIG="kf5-config"
13468 if test \( "$test_kf5" = "yes" -a "$ENABLE_KF5" = "TRUE" \) -o \
13469         \( "$test_gtk3_kde5" = "yes" -a "$ENABLE_GTK3_KDE5" = "TRUE" \)
13470 then
13471     if test "$OS" = "HAIKU"; then
13472         haiku_arch="`echo $RTL_ARCH | tr X x`"
13473         kf5_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13474         kf5_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13475     fi
13477     kf5_incdirs="$KF5INC /usr/include $kf5_haiku_incdirs $x_includes"
13478     kf5_libdirs="$KF5LIB /usr/lib /usr/lib/kf5 /usr/lib/kf5/devel $kf5_haiku_libdirs $x_libraries"
13479     if test -n "$supports_multilib"; then
13480         kf5_libdirs="$kf5_libdirs /usr/lib64 /usr/lib64/kf5 /usr/lib64/kf5/devel"
13481     fi
13483     kf5_test_include="KF5/KIOFileWidgets/KFileWidget"
13484     kf5_test_library="libKF5KIOFileWidgets.so"
13485     kf5_libdirs="$qt5_libdir $kf5_libdirs"
13487     dnl kf5 KDE4 support compatibility installed
13488     AC_PATH_PROG( KF5_CONFIG, $KF5_CONFIG, no, )
13489     if test "$KF5_CONFIG" != "no"; then
13490         kf5_incdirs="`$KF5_CONFIG --path include` $kf5_incdirs"
13491         kf5_libdirs="`$KF5_CONFIG --path lib` $kf5_libdirs"
13492     fi
13494     dnl Check for KF5 headers
13495     AC_MSG_CHECKING([for KF5 headers])
13496     kf5_incdir="no"
13497     for kf5_check in $kf5_incdirs; do
13498         if test -r "$kf5_check/$kf5_test_include"; then
13499             kf5_incdir="$kf5_check/KF5"
13500             break
13501         fi
13502     done
13503     AC_MSG_RESULT([$kf5_incdir])
13504     if test "x$kf5_incdir" = "xno"; then
13505         AC_MSG_ERROR([KF5 headers not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13506     fi
13508     dnl Check for KF5 libraries
13509     AC_MSG_CHECKING([for KF5 libraries])
13510     kf5_libdir="no"
13511     for kf5_check in $kf5_libdirs; do
13512         if test -r "$kf5_check/$kf5_test_library"; then
13513             kf5_libdir="$kf5_check"
13514             break
13515         fi
13516     done
13518     AC_MSG_RESULT([$kf5_libdir])
13519     if test "x$kf5_libdir" = "xno"; then
13520         AC_MSG_ERROR([KF5 libraries not found.  Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".])
13521     fi
13523     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"
13524     KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network"
13525     KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13527     if test "$USING_X11" = TRUE; then
13528         KF5_LIBS="$KF5_LIBS -lQt5X11Extras"
13529     fi
13531     AC_LANG_PUSH([C++])
13532     save_CXXFLAGS=$CXXFLAGS
13533     CXXFLAGS="$CXXFLAGS $KF5_CFLAGS"
13534     AC_MSG_CHECKING([whether KDE is >= 5.0])
13535        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13536 #include <kcoreaddons_version.h>
13538 int main(int argc, char **argv) {
13539        if (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 0) return 0;
13540        else return 1;
13542        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13543     CXXFLAGS=$save_CXXFLAGS
13544     AC_LANG_POP([C++])
13546 AC_SUBST(KF5_CFLAGS)
13547 AC_SUBST(KF5_LIBS)
13549 dnl ===================================================================
13550 dnl KF6 Integration
13551 dnl ===================================================================
13553 KF6_CFLAGS=""
13554 KF6_LIBS=""
13555 if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \)
13556 then
13557     if test "$OS" = "HAIKU"; then
13558         haiku_arch="`echo $RTL_ARCH | tr X x`"
13559         kf6_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`"
13560         kf6_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`"
13561     fi
13563     kf6_incdirs="$KF6INC /usr/include $kf6_haiku_incdirs $x_includes"
13564     kf6_libdirs="$KF6LIB /usr/lib /usr/lib/kf6 /usr/lib/kf6/devel $kf6_haiku_libdirs $x_libraries"
13565     if test -n "$supports_multilib"; then
13566         kf6_libdirs="$kf6_libdirs /usr/lib64 /usr/lib64/kf6 /usr/lib64/kf6/devel"
13567     fi
13569     kf6_test_include="KF6/KIOFileWidgets/KFileWidget"
13570     kf6_test_library="libKF6KIOFileWidgets.so"
13571     kf6_libdirs="$qt6_libdir $kf6_libdirs"
13573     dnl Check for KF6 headers
13574     AC_MSG_CHECKING([for KF6 headers])
13575     kf6_incdir="no"
13576     for kf6_check in $kf6_incdirs; do
13577         if test -r "$kf6_check/$kf6_test_include"; then
13578             kf6_incdir="$kf6_check/KF6"
13579             break
13580         fi
13581     done
13582     AC_MSG_RESULT([$kf6_incdir])
13583     if test "x$kf6_incdir" = "xno"; then
13584         AC_MSG_ERROR([KF6 headers not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13585     fi
13587     dnl Check for KF6 libraries
13588     AC_MSG_CHECKING([for KF6 libraries])
13589     kf6_libdir="no"
13590     for kf6_check in $kf6_libdirs; do
13591         if test -r "$kf6_check/$kf6_test_library"; then
13592             kf6_libdir="$kf6_check"
13593             break
13594         fi
13595     done
13597     AC_MSG_RESULT([$kf6_libdir])
13598     if test "x$kf6_libdir" = "xno"; then
13599         AC_MSG_ERROR([KF6 libraries not found.  Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".])
13600     fi
13602     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"
13603     KF6_LIBS="-L$kf6_libdir -lKF6CoreAddons -lKF6I18n -lKF6ConfigCore -lKF6WindowSystem -lKF6KIOCore -lKF6KIOWidgets -lKF6KIOFileWidgets -L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network"
13604     KF6_CFLAGS=$(printf '%s' "$KF6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13606     AC_LANG_PUSH([C++])
13607     save_CXXFLAGS=$CXXFLAGS
13608     CXXFLAGS="$CXXFLAGS $KF6_CFLAGS"
13609     dnl KF6 development version as of 2023-06 uses version number 5.240
13610     AC_MSG_CHECKING([whether KDE is >= 5.240])
13611        AC_RUN_IFELSE([AC_LANG_SOURCE([[
13612 #include <kcoreaddons_version.h>
13614 int main(int argc, char **argv) {
13615        if (KCOREADDONS_VERSION_MAJOR == 6 || (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 240)) return 0;
13616        else return 1;
13618        ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[])
13619     CXXFLAGS=$save_CXXFLAGS
13620     AC_LANG_POP([C++])
13622 AC_SUBST(KF6_CFLAGS)
13623 AC_SUBST(KF6_LIBS)
13625 dnl ===================================================================
13626 dnl Test whether to include Evolution 2 support
13627 dnl ===================================================================
13628 AC_MSG_CHECKING([whether to enable evolution 2 support])
13629 if test "$enable_evolution2" = yes; then
13630     AC_MSG_RESULT([yes])
13631     PKG_CHECK_MODULES(GOBJECT, gobject-2.0)
13632     GOBJECT_CFLAGS=$(printf '%s' "$GOBJECT_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13633     FilterLibs "${GOBJECT_LIBS}"
13634     GOBJECT_LIBS="${filteredlibs}"
13635     ENABLE_EVOAB2="TRUE"
13636 else
13637     AC_MSG_RESULT([no])
13639 AC_SUBST(ENABLE_EVOAB2)
13640 AC_SUBST(GOBJECT_CFLAGS)
13641 AC_SUBST(GOBJECT_LIBS)
13643 dnl ===================================================================
13644 dnl Test which themes to include
13645 dnl ===================================================================
13646 AC_MSG_CHECKING([which themes to include])
13647 # if none given use default subset of available themes
13648 if test "x$with_theme" = "x" -o "x$with_theme" = "xyes"; then
13649     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"
13652 WITH_THEMES=""
13653 if test "x$with_theme" != "xno"; then
13654     for theme in $with_theme; do
13655         case $theme in
13656         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" ;;
13657         *) AC_MSG_ERROR([Unknown value for --with-theme: $theme]) ;;
13658         esac
13659     done
13661 AC_MSG_RESULT([$WITH_THEMES])
13662 AC_SUBST([WITH_THEMES])
13664 ###############################################################################
13665 # Extensions checking
13666 ###############################################################################
13667 AC_MSG_CHECKING([for extensions integration])
13668 if test "x$enable_extension_integration" != "xno"; then
13669     WITH_EXTENSION_INTEGRATION=TRUE
13670     SCPDEFS="$SCPDEFS -DWITH_EXTENSION_INTEGRATION"
13671     AC_MSG_RESULT([yes, use integration])
13672 else
13673     WITH_EXTENSION_INTEGRATION=
13674     AC_MSG_RESULT([no, do not integrate])
13676 AC_SUBST(WITH_EXTENSION_INTEGRATION)
13678 dnl Should any extra extensions be included?
13679 dnl There are standalone tests for each of these below.
13680 WITH_EXTRA_EXTENSIONS=
13681 AC_SUBST([WITH_EXTRA_EXTENSIONS])
13683 libo_CHECK_EXTENSION([Numbertext],[NUMBERTEXT],[numbertext],[numbertext],[b7cae45ad2c23551fd6ccb8ae2c1f59e-numbertext_0.9.5.oxt])
13684 if test "x$with_java" != "xno"; then
13685     libo_CHECK_EXTENSION([NLPSolver],[NLPSOLVER],[nlpsolver],[nlpsolver],[])
13688 AC_MSG_CHECKING([whether to build opens___.ttf])
13689 if test "$enable_build_opensymbol" = "yes"; then
13690     AC_MSG_RESULT([yes])
13691     AC_PATH_PROG(FONTFORGE, fontforge)
13692     if test -z "$FONTFORGE"; then
13693         AC_MSG_ERROR([fontforge not installed])
13694     fi
13695 else
13696     AC_MSG_RESULT([no])
13697     BUILD_TYPE="$BUILD_TYPE OPENSYMBOL"
13699 AC_SUBST(FONTFORGE)
13701 dnl ===================================================================
13702 dnl Test whether to include fonts
13703 dnl ===================================================================
13704 AC_MSG_CHECKING([whether to include third-party fonts])
13705 if test "$with_fonts" != "no"; then
13706     AC_MSG_RESULT([yes])
13707     WITH_FONTS=TRUE
13708     BUILD_TYPE="$BUILD_TYPE MORE_FONTS"
13709     AC_DEFINE(HAVE_MORE_FONTS)
13710 else
13711     AC_MSG_RESULT([no])
13712     WITH_FONTS=
13713     SCPDEFS="$SCPDEFS -DWITHOUT_FONTS"
13715 AC_SUBST(WITH_FONTS)
13718 dnl ===================================================================
13719 dnl Test whether to enable online update service
13720 dnl ===================================================================
13721 AC_MSG_CHECKING([whether to enable online update])
13722 ENABLE_ONLINE_UPDATE=
13723 if test "$enable_online_update" = ""; then
13724     AC_MSG_RESULT([no])
13725 else
13726     if test "$enable_online_update" = "mar"; then
13727         AC_MSG_ERROR([--enable-online-update=mar is deprecated, use --enable-online-update-mar instead])
13728     elif test "$enable_online_update" = "yes"; then
13729         if test "$enable_curl" != "yes"; then
13730             AC_MSG_ERROR([--disable-online-update must be used when --disable-curl is used])
13731         fi
13732         AC_MSG_RESULT([yes])
13733         ENABLE_ONLINE_UPDATE="TRUE"
13734     else
13735         AC_MSG_RESULT([no])
13736     fi
13738 AC_SUBST(ENABLE_ONLINE_UPDATE)
13741 dnl ===================================================================
13742 dnl Test whether to enable mar online update service
13743 dnl ===================================================================
13744 AC_MSG_CHECKING([whether to enable mar online update])
13745 ENABLE_ONLINE_UPDATE_MAR=
13746 if test "$enable_online_update_mar" = yes; then
13747     AC_MSG_RESULT([yes])
13748     BUILD_TYPE="$BUILD_TYPE ONLINEUPDATE"
13749     ENABLE_ONLINE_UPDATE_MAR="TRUE"
13750     AC_DEFINE(HAVE_FEATURE_UPDATE_MAR)
13751 else
13752     AC_MSG_RESULT([no])
13754 AC_SUBST(ENABLE_ONLINE_UPDATE_MAR)
13756 AC_MSG_CHECKING([for mar online update baseurl])
13757 ONLINEUPDATE_MAR_BASEURL=$with_online_update_mar_baseurl
13758 if test -n "$ONLINEUPDATE_MAR_BASEURL"; then
13759     AC_MSG_RESULT([yes])
13760 else
13761     AC_MSG_RESULT([no])
13763 AC_SUBST(ONLINEUPDATE_MAR_BASEURL)
13765 AC_MSG_CHECKING([for mar online update certificateder])
13766 ONLINEUPDATE_MAR_CERTIFICATEDER=$with_online_update_mar_certificateder
13767 if test -n "$ONLINEUPDATE_MAR_CERTIFICATEDER"; then
13768     AC_MSG_RESULT([yes])
13769 else
13770     AC_MSG_RESULT([no])
13772 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATEDER)
13774 AC_MSG_CHECKING([for mar online update certificatename])
13775 ONLINEUPDATE_MAR_CERTIFICATENAME=$with_online_update_mar_certificatename
13776 if test -n "$ONLINEUPDATE_MAR_CERTIFICATENAME"; then
13777     AC_MSG_RESULT([yes])
13778 else
13779     AC_MSG_RESULT([no])
13781 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATENAME)
13783 AC_MSG_CHECKING([for mar online update certificatepath])
13784 ONLINEUPDATE_MAR_CERTIFICATEPATH=$with_online_update_mar_certificatepath
13785 if test -n "$ONLINEUPDATE_MAR_CERTIFICATEPATH"; then
13786     AC_MSG_RESULT([yes])
13787 else
13788     AC_MSG_RESULT([no])
13790 AC_SUBST(ONLINEUPDATE_MAR_CERTIFICATEPATH)
13793 PRIVACY_POLICY_URL="$with_privacy_policy_url"
13794 if test "$ENABLE_ONLINE_UPDATE" = TRUE -o "$ENABLE_BREAKPAD" = "TRUE"; then
13795     if test "x$with_privacy_policy_url" = "xundefined"; then
13796         AC_MSG_FAILURE([online update or breakpad/crashreporting are enabled, but no --with-privacy-policy-url=... was provided])
13797     fi
13799 AC_SUBST(PRIVACY_POLICY_URL)
13800 dnl ===================================================================
13801 dnl Test whether we need bzip2
13802 dnl ===================================================================
13803 SYSTEM_BZIP2=
13804 if test "$ENABLE_ONLINE_UPDATE_MAR" = "TRUE" -o "$enable_python" = internal; then
13805     AC_MSG_CHECKING([whether to use system bzip2])
13806     if test "$with_system_bzip2" = yes; then
13807         SYSTEM_BZIP2=TRUE
13808         AC_MSG_RESULT([yes])
13809         PKG_CHECK_MODULES(BZIP2, bzip2)
13810         FilterLibs "${BZIP2_LIBS}"
13811         BZIP2_LIBS="${filteredlibs}"
13812     else
13813         AC_MSG_RESULT([no])
13814         BUILD_TYPE="$BUILD_TYPE BZIP2"
13815     fi
13817 AC_SUBST(SYSTEM_BZIP2)
13818 AC_SUBST(BZIP2_CFLAGS)
13819 AC_SUBST(BZIP2_LIBS)
13821 dnl ===================================================================
13822 dnl Test whether to enable extension update
13823 dnl ===================================================================
13824 AC_MSG_CHECKING([whether to enable extension update])
13825 ENABLE_EXTENSION_UPDATE=
13826 if test "x$enable_extension_update" = "xno"; then
13827     AC_MSG_RESULT([no])
13828 else
13829     AC_MSG_RESULT([yes])
13830     ENABLE_EXTENSION_UPDATE="TRUE"
13831     AC_DEFINE(ENABLE_EXTENSION_UPDATE)
13832     SCPDEFS="$SCPDEFS -DENABLE_EXTENSION_UPDATE"
13834 AC_SUBST(ENABLE_EXTENSION_UPDATE)
13837 dnl ===================================================================
13838 dnl Test whether to create MSI with LIMITUI=1 (silent install)
13839 dnl ===================================================================
13840 AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
13841 if test "$enable_silent_msi" = "" -o "$enable_silent_msi" = "no"; then
13842     AC_MSG_RESULT([no])
13843     ENABLE_SILENT_MSI=
13844 else
13845     AC_MSG_RESULT([yes])
13846     ENABLE_SILENT_MSI=TRUE
13847     SCPDEFS="$SCPDEFS -DENABLE_SILENT_MSI"
13849 AC_SUBST(ENABLE_SILENT_MSI)
13851 dnl ===================================================================
13852 dnl Check for WiX tools.
13853 dnl ===================================================================
13854 if test "$enable_wix" = "" -o "enable_wix" = "no"; then
13855     AC_MSG_RESULT([no])
13856     ENABLE_WIX=
13857 else
13858     AC_MSG_RESULT([yes])
13859     # FIXME: this should do proper detection, but the path is currently
13860     # hardcoded in msicreator/createmsi.py
13861     if ! test -x "/cygdrive/c/Program Files (x86)/WiX Toolset v3.11/bin/candle"; then
13862       AC_MSG_ERROR([WiX requested but WiX toolset v3.11 not found at the expected location])
13863     fi
13864     ENABLE_WIX=TRUE
13866 AC_SUBST(ENABLE_WIX)
13868 AC_MSG_CHECKING([whether and how to use Xinerama])
13869 if test "$USING_X11" = TRUE; then
13870     if test "$x_libraries" = "default_x_libraries"; then
13871         XINERAMALIB=`$PKG_CONFIG --variable=libdir xinerama`
13872         if test "x$XINERAMALIB" = x; then
13873            XINERAMALIB="/usr/lib"
13874         fi
13875     else
13876         XINERAMALIB="$x_libraries"
13877     fi
13878     if test -e "$XINERAMALIB/libXinerama.so" -a -e "$XINERAMALIB/libXinerama.a"; then
13879         # we have both versions, let the user decide but use the dynamic one
13880         # per default
13881         USE_XINERAMA=TRUE
13882         if test -z "$with_static_xinerama" -o -n "$with_system_libs"; then
13883             XINERAMA_LINK=dynamic
13884         else
13885             XINERAMA_LINK=static
13886         fi
13887     elif test -e "$XINERAMALIB/libXinerama.so" -a ! -e "$XINERAMALIB/libXinerama.a"; then
13888         # we have only the dynamic version
13889         USE_XINERAMA=TRUE
13890         XINERAMA_LINK=dynamic
13891     elif test -e "$XINERAMALIB/libXinerama.a"; then
13892         # static version
13893         if echo $host_cpu | $GREP -E 'i[[3456]]86' 2>/dev/null >/dev/null; then
13894             USE_XINERAMA=TRUE
13895             XINERAMA_LINK=static
13896         else
13897             USE_XINERAMA=
13898             XINERAMA_LINK=none
13899         fi
13900     else
13901         # no Xinerama
13902         USE_XINERAMA=
13903         XINERAMA_LINK=none
13904     fi
13905     if test "$USE_XINERAMA" = "TRUE"; then
13906         AC_MSG_RESULT([yes, with $XINERAMA_LINK linking])
13907         AC_CHECK_HEADER(X11/extensions/Xinerama.h, [],
13908             [AC_MSG_ERROR(Xinerama header not found.)], [])
13909         XEXTLIBS=`$PKG_CONFIG --variable=libs xext`
13910         if test "x$XEXTLIB" = x; then
13911            XEXTLIBS="-L$XLIB -L$XINERAMALIB -lXext"
13912         fi
13913         XINERAMA_EXTRA_LIBS="$XEXTLIBS"
13914         if test "$_os" = "FreeBSD"; then
13915             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -lXt"
13916         fi
13917         if test "$_os" = "Linux"; then
13918             XINERAMA_EXTRA_LIBS="$XINERAMA_EXTRA_LIBS -ldl"
13919         fi
13920         AC_CHECK_LIB([Xinerama], [XineramaIsActive], [:],
13921             [AC_MSG_ERROR(Xinerama not functional?)], [$XINERAMA_EXTRA_LIBS])
13922     else
13923         AC_MSG_ERROR([libXinerama not found or wrong architecture.])
13924     fi
13925 else
13926     USE_XINERAMA=
13927     XINERAMA_LINK=none
13928     AC_MSG_RESULT([no])
13930 AC_SUBST(XINERAMA_LINK)
13932 AC_MSG_CHECKING([whether to use non-standard RGBA32 cairo pixel order])
13933 if test -z "$enable_cairo_rgba" -a "$_os" = "Android"; then
13934     enable_cairo_rgba=yes
13936 if test "$enable_cairo_rgba" = yes; then
13937     AC_DEFINE(ENABLE_CAIRO_RGBA)
13938     ENABLE_CAIRO_RGBA=TRUE
13939     AC_MSG_RESULT([yes])
13940 else
13941     ENABLE_CAIRO_RGBA=
13942     AC_MSG_RESULT([no])
13944 AC_SUBST(ENABLE_CAIRO_RGBA)
13946 dnl ===================================================================
13947 dnl Test whether to build cairo or rely on the system version
13948 dnl ===================================================================
13950 if test "$test_cairo" = "yes"; then
13951     AC_MSG_CHECKING([whether to use the system cairo])
13953     : ${with_system_cairo:=$with_system_libs}
13954     if test "$with_system_cairo" = "yes" -a "$enable_cairo_rgba" != "yes"; then
13955         SYSTEM_CAIRO=TRUE
13956         AC_MSG_RESULT([yes])
13958         PKG_CHECK_MODULES( CAIRO, cairo >= 1.12.0 )
13959         CAIRO_CFLAGS=$(printf '%s' "$CAIRO_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
13960         FilterLibs "${CAIRO_LIBS}"
13961         CAIRO_LIBS="${filteredlibs}"
13963         if test "$test_xrender" = "yes"; then
13964             AC_MSG_CHECKING([whether Xrender.h defines PictStandardA8])
13965             AC_LANG_PUSH([C])
13966             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],[[
13967 #ifdef PictStandardA8
13968 #else
13969       return fail;
13970 #endif
13971 ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([no, X headers too old.])])
13973             AC_LANG_POP([C])
13974         fi
13975     else
13976         AC_MSG_RESULT([no])
13977         BUILD_TYPE="$BUILD_TYPE CAIRO"
13978     fi
13980     if test "$enable_cairo_canvas" != no; then
13981         AC_DEFINE(ENABLE_CAIRO_CANVAS)
13982         ENABLE_CAIRO_CANVAS=TRUE
13983     fi
13986 AC_SUBST(CAIRO_CFLAGS)
13987 AC_SUBST(CAIRO_LIBS)
13988 AC_SUBST(ENABLE_CAIRO_CANVAS)
13989 AC_SUBST(SYSTEM_CAIRO)
13991 dnl ===================================================================
13992 dnl Test whether to use avahi
13993 dnl ===================================================================
13994 if test "$_os" = "WINNT"; then
13995     # Windows uses bundled mDNSResponder
13996     BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
13997 elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
13998     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
13999                       [ENABLE_AVAHI="TRUE"])
14000     AC_DEFINE(HAVE_FEATURE_AVAHI)
14001     AVAHI_CFLAGS=$(printf '%s' "$AVAHI_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
14002     FilterLibs "${AVAHI_LIBS}"
14003     AVAHI_LIBS="${filteredlibs}"
14006 AC_SUBST(ENABLE_AVAHI)
14007 AC_SUBST(AVAHI_CFLAGS)
14008 AC_SUBST(AVAHI_LIBS)
14010 dnl ===================================================================
14011 dnl Test whether to use liblangtag
14012 dnl ===================================================================
14013 SYSTEM_LIBLANGTAG=
14014 AC_MSG_CHECKING([whether to use system liblangtag])
14015 if test "$with_system_liblangtag" = yes; then
14016     SYSTEM_LIBLANGTAG=TRUE
14017     AC_MSG_RESULT([yes])
14018     PKG_CHECK_MODULES( LIBLANGTAG, liblangtag >= 0.4.0)
14019     dnl cf. <https://bitbucket.org/tagoh/liblangtag/commits/9324836a0d1c> "Fix a build issue with inline keyword"
14020     PKG_CHECK_EXISTS([liblangtag >= 0.5.5], [], [AC_DEFINE([LIBLANGTAG_INLINE_FIX])])
14021     LIBLANGTAG_CFLAGS=$(printf '%s' "$LIBLANGTAG_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
14022     FilterLibs "${LIBLANGTAG_LIBS}"
14023     LIBLANGTAG_LIBS="${filteredlibs}"
14024 else
14025     SYSTEM_LIBLANGTAG=
14026     AC_MSG_RESULT([no])
14027     BUILD_TYPE="$BUILD_TYPE LIBLANGTAG"
14028     LIBLANGTAG_CFLAGS="-I${WORKDIR}/UnpackedTarball/liblangtag"
14029     if test "$COM" = "MSC"; then
14030         LIBLANGTAG_LIBS="${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs/liblangtag.lib"
14031     else
14032         LIBLANGTAG_LIBS="-L${WORKDIR}/UnpackedTarball/liblangtag/liblangtag/.libs -llangtag"
14033     fi
14035 AC_SUBST(SYSTEM_LIBLANGTAG)
14036 AC_SUBST(LIBLANGTAG_CFLAGS)
14037 AC_SUBST(LIBLANGTAG_LIBS)
14039 dnl ===================================================================
14040 dnl Test whether to build libpng or rely on the system version
14041 dnl ===================================================================
14043 LIBPNG_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/libpng"
14044 LIBPNG_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -llibpng"
14045 libo_CHECK_SYSTEM_MODULE([libpng],[LIBPNG],[libpng])
14047 dnl ===================================================================
14048 dnl Test whether to build libtiff or rely on the system version
14049 dnl ===================================================================
14051 libo_CHECK_SYSTEM_MODULE([libtiff],[LIBTIFF],[libtiff-4])
14053 dnl ===================================================================
14054 dnl Test whether to build libwebp or rely on the system version
14055 dnl ===================================================================
14057 libo_CHECK_SYSTEM_MODULE([libwebp],[LIBWEBP],[libwebp])
14059 dnl ===================================================================
14060 dnl Check for runtime JVM search path
14061 dnl ===================================================================
14062 if test "$ENABLE_JAVA" != ""; then
14063     AC_MSG_CHECKING([whether to use specific JVM search path at runtime])
14064     if test -n "$with_jvm_path" -a "$with_jvm_path" != "no"; then
14065         AC_MSG_RESULT([yes])
14066         if ! test -d "$with_jvm_path"; then
14067             AC_MSG_ERROR(["$with_jvm_path" not a directory])
14068         fi
14069         if ! test -d "$with_jvm_path"jvm; then
14070             AC_MSG_ERROR(["$with_jvm_path"jvm not found, point with_jvm_path to \[/path/to/\]jvm])
14071         fi
14072         JVM_ONE_PATH_CHECK="$with_jvm_path"
14073         AC_SUBST(JVM_ONE_PATH_CHECK)
14074     else
14075         AC_MSG_RESULT([no])
14076     fi
14079 dnl ===================================================================
14080 dnl Test for the presence of Ant and that it works
14081 dnl ===================================================================
14083 # java takes the encoding from LC_ALL, and since autoconf forces it to C it
14084 # breaks filename decoding, so for the ant section, set it to LANG
14085 LC_ALL=$LANG
14086 if test "$ENABLE_JAVA" != "" -a "$NEED_ANT" = "TRUE" -a "$cross_compiling" != "yes"; then
14087     ANT_HOME=; export ANT_HOME
14088     WITH_ANT_HOME=; export WITH_ANT_HOME
14089     if test -z "$with_ant_home" -a -n "$LODE_HOME" ; then
14090         if test -x "$LODE_HOME/opt/ant/bin/ant" ; then
14091             if test "$_os" = "WINNT"; then
14092                 with_ant_home="`cygpath -m $LODE_HOME/opt/ant`"
14093             else
14094                 with_ant_home="$LODE_HOME/opt/ant"
14095             fi
14096         elif test -x  "$LODE_HOME/opt/bin/ant" ; then
14097             with_ant_home="$LODE_HOME/opt/ant"
14098         fi
14099     fi
14100     if test -z "$with_ant_home"; then
14101         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd])
14102     else
14103         if test "$_os" = "WINNT"; then
14104             # AC_PATH_PROGS needs unix path
14105             PathFormat "$with_ant_home"
14106             with_ant_home="$formatted_path_unix"
14107         fi
14108         AbsolutePath "$with_ant_home"
14109         with_ant_home=$absolute_path
14110         AC_PATH_PROGS(ANT, [ant ant.sh ant.bat ant.cmd],,$with_ant_home/bin:$PATH)
14111         WITH_ANT_HOME=$with_ant_home
14112         ANT_HOME=$with_ant_home
14113     fi
14115     if test -z "$ANT"; then
14116         AC_MSG_ERROR([Ant not found - Make sure it's in the path or use --with-ant-home])
14117     else
14118         # resolve relative or absolute symlink
14119         while test -h "$ANT"; do
14120             a_cwd=`pwd`
14121             a_basename=`basename "$ANT"`
14122             a_script=`ls -l "$ANT" | $SED "s/.*${a_basename} -> //g"`
14123             cd "`dirname "$ANT"`"
14124             cd "`dirname "$a_script"`"
14125             ANT="`pwd`"/"`basename "$a_script"`"
14126             cd "$a_cwd"
14127         done
14129         AC_MSG_CHECKING([if $ANT works])
14130         mkdir -p conftest.dir
14131         a_cwd=$(pwd)
14132         cd conftest.dir
14133         cat > conftest.java << EOF
14134         public class conftest {
14135             int testmethod(int a, int b) {
14136                     return a + b;
14137             }
14138         }
14141         cat > conftest.xml << EOF
14142         <project name="conftest" default="conftest">
14143         <target name="conftest">
14144             <javac srcdir="." includes="conftest.java">
14145             </javac>
14146         </target>
14147         </project>
14150         AC_TRY_COMMAND("$ANT" -buildfile conftest.xml 1>&2)
14151         if test $? = 0 -a -f ./conftest.class; then
14152             AC_MSG_RESULT([Ant works])
14153             if test -z "$WITH_ANT_HOME"; then
14154                 ANT_HOME=`"$ANT" -diagnostics | $EGREP "ant.home :" | $SED -e "s#ant.home : ##g"`
14155                 if test -z "$ANT_HOME"; then
14156                     ANT_HOME=`echo "$ANT" | $SED -n "s/\/bin\/ant.*\$//p"`
14157                 fi
14158             else
14159                 ANT_HOME="$WITH_ANT_HOME"
14160             fi
14161         else
14162             echo "configure: Ant test failed" >&5
14163             cat conftest.java >&5
14164             cat conftest.xml >&5
14165             AC_MSG_ERROR([Ant does not work - Some Java projects will not build!])
14166         fi
14167         cd "$a_cwd"
14168         rm -fr conftest.dir
14169     fi
14170     if test -z "$ANT_HOME"; then
14171         ANT_HOME="NO_ANT_HOME"
14172     else
14173         PathFormat "$ANT_HOME"
14174         ANT_HOME="$formatted_path"
14175         PathFormat "$ANT"
14176         ANT="$formatted_path"
14177     fi
14179     dnl Checking for ant.jar
14180     if test "$ANT_HOME" != "NO_ANT_HOME"; then
14181         AC_MSG_CHECKING([Ant lib directory])
14182         if test -f $ANT_HOME/lib/ant.jar; then
14183             ANT_LIB="$ANT_HOME/lib"
14184         else
14185             if test -f $ANT_HOME/ant.jar; then
14186                 ANT_LIB="$ANT_HOME"
14187             else
14188                 if test -f /usr/share/java/ant.jar; then
14189                     ANT_LIB=/usr/share/java
14190                 else
14191                     if test -f /usr/share/ant-core/lib/ant.jar; then
14192                         ANT_LIB=/usr/share/ant-core/lib
14193                     else
14194                         if test -f $ANT_HOME/lib/ant/ant.jar; then
14195                             ANT_LIB="$ANT_HOME/lib/ant"
14196                         else
14197                             if test -f /usr/share/lib/ant/ant.jar; then
14198                                 ANT_LIB=/usr/share/lib/ant
14199                             else
14200                                 AC_MSG_ERROR([Ant libraries not found!])
14201                             fi
14202                         fi
14203                     fi
14204                 fi
14205             fi
14206         fi
14207         PathFormat "$ANT_LIB"
14208         ANT_LIB="$formatted_path"
14209         AC_MSG_RESULT([Ant lib directory found.])
14210     fi
14212     ant_minver=1.6.0
14213     ant_minminor1=`echo $ant_minver | cut -d"." -f2`
14215     AC_MSG_CHECKING([whether Ant is >= $ant_minver])
14216     ant_version=`"$ANT" -version | $AWK '$3 == "version" { print $4; }'`
14217     ant_version_major=`echo $ant_version | cut -d. -f1`
14218     ant_version_minor=`echo $ant_version | cut -d. -f2`
14219     echo "configure: ant_version $ant_version " >&5
14220     echo "configure: ant_version_major $ant_version_major " >&5
14221     echo "configure: ant_version_minor $ant_version_minor " >&5
14222     if test "$ant_version_major" -ge "2"; then
14223         AC_MSG_RESULT([yes, $ant_version])
14224     elif test "$ant_version_major" = "1" -a "$ant_version_minor" -ge "$ant_minminor1"; then
14225         AC_MSG_RESULT([yes, $ant_version])
14226     else
14227         AC_MSG_ERROR([no, you need at least Ant >= $ant_minver])
14228     fi
14230     rm -f conftest* core core.* *.core
14232 AC_SUBST(ANT)
14233 AC_SUBST(ANT_HOME)
14234 AC_SUBST(ANT_LIB)
14236 OOO_JUNIT_JAR=
14237 HAMCREST_JAR=
14238 if test "$ENABLE_JAVA" != "" -a "$with_junit" != "no" -a "$cross_compiling" != "yes"; then
14239     AC_MSG_CHECKING([for JUnit 4])
14240     if test "$with_junit" = "yes"; then
14241         if test -n "$LODE_HOME" -a -e "$LODE_HOME/opt/share/java/junit.jar" ; then
14242             OOO_JUNIT_JAR="$LODE_HOME/opt/share/java/junit.jar"
14243         elif test -e /usr/share/java/junit4.jar; then
14244             OOO_JUNIT_JAR=/usr/share/java/junit4.jar
14245         else
14246            if test -e /usr/share/lib/java/junit.jar; then
14247               OOO_JUNIT_JAR=/usr/share/lib/java/junit.jar
14248            else
14249               OOO_JUNIT_JAR=/usr/share/java/junit.jar
14250            fi
14251         fi
14252     else
14253         OOO_JUNIT_JAR=$with_junit
14254     fi
14255     if test "$_os" = "WINNT"; then
14256         OOO_JUNIT_JAR=`cygpath -m "$OOO_JUNIT_JAR"`
14257     fi
14258     printf 'import org.junit.Before;' > conftest.java
14259     if $JAVACOMPILER -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14260         AC_MSG_RESULT([$OOO_JUNIT_JAR])
14261     else
14262         AC_MSG_ERROR(
14263 [cannot find JUnit 4 jar; please install one in the default location (/usr/share/java),
14264  specify its pathname via --with-junit=..., or disable it via --without-junit])
14265     fi
14266     rm -f conftest.class conftest.java
14267     if test $OOO_JUNIT_JAR != ""; then
14268         BUILD_TYPE="$BUILD_TYPE QADEVOOO"
14269     fi
14271     AC_MSG_CHECKING([for included Hamcrest])
14272     printf 'import org.hamcrest.BaseDescription;' > conftest.java
14273     if $JAVACOMPILER -classpath "$OOO_JUNIT_JAR" conftest.java >&5 2>&5; then
14274         AC_MSG_RESULT([Included in $OOO_JUNIT_JAR])
14275     else
14276         AC_MSG_RESULT([Not included])
14277         AC_MSG_CHECKING([for standalone hamcrest jar.])
14278         if test "$with_hamcrest" = "yes"; then
14279             if test -e /usr/share/lib/java/hamcrest.jar; then
14280                 HAMCREST_JAR=/usr/share/lib/java/hamcrest.jar
14281             elif test -e /usr/share/java/hamcrest/core.jar; then
14282                 HAMCREST_JAR=/usr/share/java/hamcrest/core.jar
14283             elif test -e /usr/share/java/hamcrest/hamcrest.jar; then
14284                 HAMCREST_JAR=/usr/share/java/hamcrest/hamcrest.jar
14285             else
14286                 HAMCREST_JAR=/usr/share/java/hamcrest.jar
14287             fi
14288         else
14289             HAMCREST_JAR=$with_hamcrest
14290         fi
14291         if test "$_os" = "WINNT"; then
14292             HAMCREST_JAR=`cygpath -m "$HAMCREST_JAR"`
14293         fi
14294         if $JAVACOMPILER -classpath "$HAMCREST_JAR" conftest.java >&5 2>&5; then
14295             AC_MSG_RESULT([$HAMCREST_JAR])
14296         else
14297             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),
14298                           specify its path with --with-hamcrest=..., or disable junit with --without-junit])
14299         fi
14300     fi
14301     rm -f conftest.class conftest.java
14303 AC_SUBST(OOO_JUNIT_JAR)
14304 AC_SUBST(HAMCREST_JAR)
14305 # set back LC_ALL to C after the java related tests...
14306 LC_ALL=C
14308 AC_SUBST(SCPDEFS)
14311 # check for wget and curl
14313 WGET=
14314 CURL=
14316 if test "$enable_fetch_external" != "no"; then
14318 CURL=`command -v curl`
14320 for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/wget /opt/local/bin/wget; do
14321     # wget new enough?
14322     $i --help 2> /dev/null | $GREP no-use-server-timestamps 2>&1 > /dev/null
14323     if test $? -eq 0; then
14324         WGET=$i
14325         break
14326     fi
14327 done
14329 if test -z "$WGET" -a -z "$CURL"; then
14330     AC_MSG_ERROR([neither wget nor curl found!])
14335 AC_SUBST(WGET)
14336 AC_SUBST(CURL)
14339 # check for sha256sum
14341 SHA256SUM=
14343 for i in shasum /usr/local/bin/shasum /usr/sfw/bin/shasum /opt/sfw/bin/shasum /opt/local/bin/shasum; do
14344     eval "$i -a 256 --version" > /dev/null 2>&1
14345     ret=$?
14346     if test $ret -eq 0; then
14347         SHA256SUM="$i -a 256"
14348         break
14349     fi
14350 done
14352 if test -z "$SHA256SUM"; then
14353     for i in sha256sum /usr/local/bin/sha256sum /usr/sfw/bin/sha256sum /opt/sfw/bin/sha256sum /opt/local/bin/sha256sum; do
14354         eval "$i --version" > /dev/null 2>&1
14355         ret=$?
14356         if test $ret -eq 0; then
14357             SHA256SUM=$i
14358             break
14359         fi
14360     done
14363 if test -z "$SHA256SUM"; then
14364     AC_MSG_ERROR([no sha256sum found!])
14367 AC_SUBST(SHA256SUM)
14369 dnl ===================================================================
14370 dnl Dealing with l10n options
14371 dnl ===================================================================
14372 AC_MSG_CHECKING([which languages to be built])
14373 # get list of all languages
14374 # generate shell variable from completelangiso= from solenv/inc/langlist.mk
14375 # the sed command does the following:
14376 #   + if a line ends with a backslash, append the next line to it
14377 #   + adds " on the beginning of the value (after =)
14378 #   + adds " at the end of the value
14379 #   + removes en-US; we want to put it on the beginning
14380 #   + prints just the section starting with 'completelangiso=' and ending with the " at the end of line
14381 [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)]
14382 ALL_LANGS="en-US $completelangiso"
14383 # check the configured localizations
14384 WITH_LANG="$with_lang"
14386 # Check for --without-lang which turns up as $with_lang being "no". Luckily there is no language with code "no".
14387 # (Norwegian is "nb" and "nn".)
14388 if test "$WITH_LANG" = "no"; then
14389     WITH_LANG=
14392 if test -z "$WITH_LANG" -o "$WITH_LANG" = "en-US"; then
14393     AC_MSG_RESULT([en-US])
14394 else
14395     AC_MSG_RESULT([$WITH_LANG])
14396     GIT_NEEDED_SUBMODULES="translations $GIT_NEEDED_SUBMODULES"
14397     if test -z "$MSGFMT"; then
14398         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msgfmt" ; then
14399             MSGFMT="$LODE_HOME/opt/bin/msgfmt"
14400         elif test -x "/opt/lo/bin/msgfmt"; then
14401             MSGFMT="/opt/lo/bin/msgfmt"
14402         else
14403             AC_CHECK_PROGS(MSGFMT, [msgfmt])
14404             if test -z "$MSGFMT"; then
14405                 AC_MSG_ERROR([msgfmt not found. Install GNU gettext, or re-run without languages.])
14406             fi
14407         fi
14408     fi
14409     if test -z "$MSGUNIQ"; then
14410         if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/msguniq" ; then
14411             MSGUNIQ="$LODE_HOME/opt/bin/msguniq"
14412         elif test -x "/opt/lo/bin/msguniq"; then
14413             MSGUNIQ="/opt/lo/bin/msguniq"
14414         else
14415             AC_CHECK_PROGS(MSGUNIQ, [msguniq])
14416             if test -z "$MSGUNIQ"; then
14417                 AC_MSG_ERROR([msguniq not found. Install GNU gettext, or re-run without languages.])
14418             fi
14419         fi
14420     fi
14422 AC_SUBST(MSGFMT)
14423 AC_SUBST(MSGUNIQ)
14424 # check that the list is valid
14425 for lang in $WITH_LANG; do
14426     test "$lang" = "ALL" && continue
14427     # need to check for the exact string, so add space before and after the list of all languages
14428     for vl in $ALL_LANGS; do
14429         if test "$vl" = "$lang"; then
14430            break
14431         fi
14432     done
14433     if test "$vl" != "$lang"; then
14434         # if you're reading this - you prolly quoted your languages remove the quotes ...
14435         AC_MSG_ERROR([invalid language: '$lang' (vs '$v1'); supported languages are: $ALL_LANGS])
14436     fi
14437 done
14438 if test -n "$WITH_LANG" -a "$WITH_LANG" != "ALL"; then
14439     echo $WITH_LANG | grep -q en-US
14440     test $? -ne 1 || WITH_LANG=`echo $WITH_LANG en-US`
14442 # list with substituted ALL
14443 WITH_LANG_LIST=`echo $WITH_LANG | sed "s/ALL/$ALL_LANGS/"`
14444 test -z "$WITH_LANG_LIST" && WITH_LANG_LIST="en-US"
14445 test "$WITH_LANG" = "en-US" && WITH_LANG=
14446 if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
14447     test "$WITH_LANG_LIST" = "en-US" || WITH_LANG_LIST=`echo $WITH_LANG_LIST qtz`
14448     ALL_LANGS=`echo $ALL_LANGS qtz`
14450 AC_SUBST(ALL_LANGS)
14451 AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG")
14452 AC_SUBST(WITH_LANG)
14453 AC_SUBST(WITH_LANG_LIST)
14454 AC_SUBST(GIT_NEEDED_SUBMODULES)
14456 WITH_POOR_HELP_LOCALIZATIONS=
14457 if test -d "$SRC_ROOT/translations/source"; then
14458     for l in `ls -1 $SRC_ROOT/translations/source`; do
14459         if test ! -d "$SRC_ROOT/translations/source/$l/helpcontent2"; then
14460             WITH_POOR_HELP_LOCALIZATIONS="$WITH_POOR_HELP_LOCALIZATIONS $l"
14461         fi
14462     done
14464 AC_SUBST(WITH_POOR_HELP_LOCALIZATIONS)
14466 if test -n "$with_locales" -a "$with_locales" != ALL; then
14467     WITH_LOCALES="$with_locales"
14469     just_langs="`echo $WITH_LOCALES | sed -e 's/_[A-Z]*//g'`"
14470     # Only languages and scripts for which we actually have ifdefs need to be handled. Also see
14471     # config_host/config_locales.h.in
14472     for locale in $WITH_LOCALES; do
14473         lang=${locale%_*}
14475         AC_DEFINE_UNQUOTED(WITH_LOCALE_$lang, 1)
14477         case $lang in
14478         hi|mr*ne)
14479             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Deva)
14480             ;;
14481         bg|ru)
14482             AC_DEFINE(WITH_LOCALE_FOR_SCRIPT_Cyrl)
14483             ;;
14484         esac
14485     done
14486 else
14487     AC_DEFINE(WITH_LOCALE_ALL)
14489 AC_SUBST(WITH_LOCALES)
14491 dnl git submodule update --reference
14492 dnl ===================================================================
14493 if test -n "${GIT_REFERENCE_SRC}"; then
14494     for repo in ${GIT_NEEDED_SUBMODULES}; do
14495         if ! test -d "${GIT_REFERENCE_SRC}"/${repo}; then
14496             AC_MSG_ERROR([referenced git: required repository does not exist: ${GIT_REFERENCE_SRC}/${repo}])
14497         fi
14498     done
14500 AC_SUBST(GIT_REFERENCE_SRC)
14502 dnl git submodules linked dirs
14503 dnl ===================================================================
14504 if test -n "${GIT_LINK_SRC}"; then
14505     for repo in ${GIT_NEEDED_SUBMODULES}; do
14506         if ! test -d "${GIT_LINK_SRC}"/${repo}; then
14507             AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
14508         fi
14509     done
14511 AC_SUBST(GIT_LINK_SRC)
14513 dnl branding
14514 dnl ===================================================================
14515 AC_MSG_CHECKING([for alternative branding images directory])
14516 # initialize mapped arrays
14517 BRAND_INTRO_IMAGES="intro.png intro-highres.png"
14518 brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg logo-sc.svg logo-sc_inverted.svg about.svg"
14520 if test -z "$with_branding" -o "$with_branding" = "no"; then
14521     AC_MSG_RESULT([none])
14522     DEFAULT_BRAND_IMAGES="$brand_files"
14523 else
14524     if ! test -d $with_branding ; then
14525         AC_MSG_ERROR([No directory $with_branding, falling back to default branding])
14526     else
14527         AC_MSG_RESULT([$with_branding])
14528         CUSTOM_BRAND_DIR="$with_branding"
14529         for lfile in $brand_files
14530         do
14531             if ! test -f $with_branding/$lfile ; then
14532                 AC_MSG_WARN([Branded file $lfile does not exist, using the default one])
14533                 DEFAULT_BRAND_IMAGES="$DEFAULT_BRAND_IMAGES $lfile"
14534             else
14535                 CUSTOM_BRAND_IMAGES="$CUSTOM_BRAND_IMAGES $lfile"
14536             fi
14537         done
14538         check_for_progress="yes"
14539     fi
14541 AC_SUBST([BRAND_INTRO_IMAGES])
14542 AC_SUBST([CUSTOM_BRAND_DIR])
14543 AC_SUBST([CUSTOM_BRAND_IMAGES])
14544 AC_SUBST([DEFAULT_BRAND_IMAGES])
14547 AC_MSG_CHECKING([for 'intro' progress settings])
14548 PROGRESSBARCOLOR=
14549 PROGRESSSIZE=
14550 PROGRESSPOSITION=
14551 PROGRESSFRAMECOLOR=
14552 PROGRESSTEXTCOLOR=
14553 PROGRESSTEXTBASELINE=
14555 if test "$check_for_progress" = "yes" -a -f "$with_branding/progress.conf" ; then
14556     source "$with_branding/progress.conf"
14557     AC_MSG_RESULT([settings found in $with_branding/progress.conf])
14558 else
14559     AC_MSG_RESULT([none])
14562 AC_SUBST(PROGRESSBARCOLOR)
14563 AC_SUBST(PROGRESSSIZE)
14564 AC_SUBST(PROGRESSPOSITION)
14565 AC_SUBST(PROGRESSFRAMECOLOR)
14566 AC_SUBST(PROGRESSTEXTCOLOR)
14567 AC_SUBST(PROGRESSTEXTBASELINE)
14570 dnl ===================================================================
14571 dnl Custom build version
14572 dnl ===================================================================
14573 AC_MSG_CHECKING([for extra build ID])
14574 if test -n "$with_extra_buildid" -a "$with_extra_buildid" != "yes" ; then
14575     EXTRA_BUILDID="$with_extra_buildid"
14577 # in tinderboxes, it is easier to set EXTRA_BUILDID via the environment variable instead of configure switch
14578 if test -n "$EXTRA_BUILDID" ; then
14579     AC_MSG_RESULT([$EXTRA_BUILDID])
14580 else
14581     AC_MSG_RESULT([not set])
14583 AC_DEFINE_UNQUOTED([EXTRA_BUILDID], ["$EXTRA_BUILDID"])
14585 OOO_VENDOR=
14586 AC_MSG_CHECKING([for vendor])
14587 if test -z "$with_vendor" -o "$with_vendor" = "no"; then
14588     OOO_VENDOR="$USERNAME"
14590     if test -z "$OOO_VENDOR"; then
14591         OOO_VENDOR="$USER"
14592     fi
14594     if test -z "$OOO_VENDOR"; then
14595         OOO_VENDOR="`id -u -n`"
14596     fi
14598     AC_MSG_RESULT([not set, using $OOO_VENDOR])
14599 else
14600     OOO_VENDOR="$with_vendor"
14601     AC_MSG_RESULT([$OOO_VENDOR])
14603 AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR")
14604 AC_SUBST(OOO_VENDOR)
14606 if test "$_os" = "Android" ; then
14607     ANDROID_PACKAGE_NAME=
14608     AC_MSG_CHECKING([for Android package name])
14609     if test -z "$with_android_package_name" -o "$with_android_package_name" = "no"; then
14610         if test -n "$ENABLE_DEBUG"; then
14611             # Default to the package name that makes ndk-gdb happy.
14612             ANDROID_PACKAGE_NAME="org.libreoffice"
14613         else
14614             ANDROID_PACKAGE_NAME="org.example.libreoffice"
14615         fi
14617         AC_MSG_RESULT([not set, using $ANDROID_PACKAGE_NAME])
14618     else
14619         ANDROID_PACKAGE_NAME="$with_android_package_name"
14620         AC_MSG_RESULT([$ANDROID_PACKAGE_NAME])
14621     fi
14622     AC_SUBST(ANDROID_PACKAGE_NAME)
14625 AC_MSG_CHECKING([whether to install the compat oo* wrappers])
14626 if test "$with_compat_oowrappers" = "yes"; then
14627     WITH_COMPAT_OOWRAPPERS=TRUE
14628     AC_MSG_RESULT(yes)
14629 else
14630     WITH_COMPAT_OOWRAPPERS=
14631     AC_MSG_RESULT(no)
14633 AC_SUBST(WITH_COMPAT_OOWRAPPERS)
14635 INSTALLDIRNAME=`echo AC_PACKAGE_NAME | $AWK '{print tolower($0)}'`
14636 AC_MSG_CHECKING([for install dirname])
14637 if test -n "$with_install_dirname" -a "$with_install_dirname" != "no" -a "$with_install_dirname" != "yes"; then
14638     INSTALLDIRNAME="$with_install_dirname"
14640 AC_MSG_RESULT([$INSTALLDIRNAME])
14641 AC_SUBST(INSTALLDIRNAME)
14643 AC_MSG_CHECKING([for prefix])
14644 test "x$prefix" = xNONE && prefix=$ac_default_prefix
14645 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
14646 PREFIXDIR="$prefix"
14647 AC_MSG_RESULT([$PREFIXDIR])
14648 AC_SUBST(PREFIXDIR)
14650 LIBDIR=[$(eval echo $(eval echo $libdir))]
14651 AC_SUBST(LIBDIR)
14653 DATADIR=[$(eval echo $(eval echo $datadir))]
14654 AC_SUBST(DATADIR)
14656 MANDIR=[$(eval echo $(eval echo $mandir))]
14657 AC_SUBST(MANDIR)
14659 DOCDIR=[$(eval echo $(eval echo $docdir))]
14660 AC_SUBST(DOCDIR)
14662 BINDIR=[$(eval echo $(eval echo $bindir))]
14663 AC_SUBST(BINDIR)
14665 INSTALLDIR="$LIBDIR/$INSTALLDIRNAME"
14666 AC_SUBST(INSTALLDIR)
14668 TESTINSTALLDIR="${BUILDDIR}/test-install"
14669 AC_SUBST(TESTINSTALLDIR)
14672 # ===================================================================
14673 # OAuth2 id and secrets
14674 # ===================================================================
14676 AC_MSG_CHECKING([for Google Drive client id and secret])
14677 if test "$with_gdrive_client_id" = "no" -o -z "$with_gdrive_client_id"; then
14678     AC_MSG_RESULT([not set])
14679     GDRIVE_CLIENT_ID="\"\""
14680     GDRIVE_CLIENT_SECRET="\"\""
14681 else
14682     AC_MSG_RESULT([set])
14683     GDRIVE_CLIENT_ID="\"$with_gdrive_client_id\""
14684     GDRIVE_CLIENT_SECRET="\"$with_gdrive_client_secret\""
14686 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_ID, $GDRIVE_CLIENT_ID)
14687 AC_DEFINE_UNQUOTED(GDRIVE_CLIENT_SECRET, $GDRIVE_CLIENT_SECRET)
14689 AC_MSG_CHECKING([for Alfresco Cloud client id and secret])
14690 if test "$with_alfresco_cloud_client_id" = "no" -o -z "$with_alfresco_cloud_client_id"; then
14691     AC_MSG_RESULT([not set])
14692     ALFRESCO_CLOUD_CLIENT_ID="\"\""
14693     ALFRESCO_CLOUD_CLIENT_SECRET="\"\""
14694 else
14695     AC_MSG_RESULT([set])
14696     ALFRESCO_CLOUD_CLIENT_ID="\"$with_alfresco_cloud_client_id\""
14697     ALFRESCO_CLOUD_CLIENT_SECRET="\"$with_alfresco_cloud_client_secret\""
14699 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_ID, $ALFRESCO_CLOUD_CLIENT_ID)
14700 AC_DEFINE_UNQUOTED(ALFRESCO_CLOUD_CLIENT_SECRET, $ALFRESCO_CLOUD_CLIENT_SECRET)
14702 AC_MSG_CHECKING([for OneDrive client id and secret])
14703 if test "$with_onedrive_client_id" = "no" -o -z "$with_onedrive_client_id"; then
14704     AC_MSG_RESULT([not set])
14705     ONEDRIVE_CLIENT_ID="\"\""
14706     ONEDRIVE_CLIENT_SECRET="\"\""
14707 else
14708     AC_MSG_RESULT([set])
14709     ONEDRIVE_CLIENT_ID="\"$with_onedrive_client_id\""
14710     ONEDRIVE_CLIENT_SECRET="\"$with_onedrive_client_secret\""
14712 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_ID, $ONEDRIVE_CLIENT_ID)
14713 AC_DEFINE_UNQUOTED(ONEDRIVE_CLIENT_SECRET, $ONEDRIVE_CLIENT_SECRET)
14716 dnl ===================================================================
14717 dnl Hook up LibreOffice's nodep environmental variable to automake's equivalent
14718 dnl --enable-dependency-tracking configure option
14719 dnl ===================================================================
14720 AC_MSG_CHECKING([whether to enable dependency tracking])
14721 if test "$enable_dependency_tracking" = "no"; then
14722     nodep=TRUE
14723     AC_MSG_RESULT([no])
14724 else
14725     AC_MSG_RESULT([yes])
14727 AC_SUBST(nodep)
14729 dnl ===================================================================
14730 dnl Number of CPUs to use during the build
14731 dnl ===================================================================
14732 AC_MSG_CHECKING([for number of processors to use])
14733 # plain --with-parallelism is just the default
14734 if test -n "$with_parallelism" -a "$with_parallelism" != "yes"; then
14735     if test "$with_parallelism" = "no"; then
14736         PARALLELISM=0
14737     else
14738         PARALLELISM=$with_parallelism
14739     fi
14740 else
14741     if test "$enable_icecream" = "yes"; then
14742         PARALLELISM="40"
14743     else
14744         case `uname -s` in
14746         Darwin|FreeBSD|NetBSD|OpenBSD)
14747             PARALLELISM=`sysctl -n hw.ncpu`
14748             ;;
14750         Linux)
14751             PARALLELISM=`getconf _NPROCESSORS_ONLN`
14752         ;;
14753         # what else than above does profit here *and* has /proc?
14754         *)
14755             PARALLELISM=`grep $'^processor\t*:' /proc/cpuinfo | wc -l`
14756             ;;
14757         esac
14759         # If we hit the catch-all case, but /proc/cpuinfo doesn't exist or has an
14760         # unexpected format, 'wc -l' will have returned 0 (and we won't use -j at all).
14761     fi
14764 if test $PARALLELISM -eq 0; then
14765     AC_MSG_RESULT([explicit make -j option needed])
14766 else
14767     AC_MSG_RESULT([$PARALLELISM])
14769 AC_SUBST(PARALLELISM)
14772 # Set up ILIB for MSVC build
14774 ILIB1=
14775 if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
14776     ILIB="."
14777     if test -n "$JAVA_HOME"; then
14778         ILIB="$ILIB;$JAVA_HOME/lib"
14779     fi
14780     ILIB1=-link
14781     PathFormat "${COMPATH}/lib/$WIN_HOST_ARCH"
14782     ILIB="$ILIB;$formatted_path"
14783     ILIB1="$ILIB1 -LIBPATH:$formatted_path"
14784     ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14785     ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$WIN_HOST_ARCH"
14786     if test $WINDOWS_SDK_VERSION = 80 -o $WINDOWS_SDK_VERSION = 81 -o $WINDOWS_SDK_VERSION = 10; then
14787         ILIB="$ILIB;$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14788         ILIB1="$ILIB1 -LIBPATH:$WINDOWS_SDK_HOME/lib/$winsdklibsubdir/um/$WIN_HOST_ARCH"
14789     fi
14790     PathFormat "${UCRTSDKDIR}lib/$UCRTVERSION/ucrt/$WIN_HOST_ARCH"
14791     ucrtlibpath_formatted=$formatted_path
14792     ILIB="$ILIB;$ucrtlibpath_formatted"
14793     ILIB1="$ILIB1 -LIBPATH:$ucrtlibpath_formatted"
14794     if test -f "$DOTNET_FRAMEWORK_HOME/lib/mscoree.lib"; then
14795         PathFormat "$DOTNET_FRAMEWORK_HOME/lib"
14796         ILIB="$ILIB;$formatted_path"
14797     else
14798         PathFormat "$DOTNET_FRAMEWORK_HOME/Lib/um/$WIN_HOST_ARCH"
14799         ILIB="$ILIB;$formatted_path"
14800     fi
14802     if test "$cross_compiling" != "yes"; then
14803         ILIB_FOR_BUILD="$ILIB"
14804     fi
14806 AC_SUBST(ILIB)
14807 AC_SUBST(ILIB_FOR_BUILD)
14809 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 consteval])
14810 dnl ...that does not suffer from <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994> "Missing code
14811 dnl from consteval constructor initializing const variable",
14812 dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98752> "wrong 'error: â€˜this’ is not a constant
14813 dnl expression' with consteval constructor", <https://bugs.llvm.org/show_bug.cgi?id=50063> "code
14814 dnl using consteval: 'clang/lib/CodeGen/Address.h:38: llvm::Value*
14815 dnl clang::CodeGen::Address::getPointer() const: Assertion `isValid()' failed.'" (which should be
14816 dnl fixed since Clang 14), <https://developercommunity.visualstudio.com/t/1581879> "Bogus error
14817 dnl C7595 with consteval constructor in ternary expression (/std:c++latest)" (which appears to be
14818 dnl fixed at least in Visual Studio Community 2022 Preview 17.9.0 Preview 5.0),
14819 dnl <https://github.com/llvm/llvm-project/issues/54612> "C++20, consteval, anonymous union:
14820 dnl llvm/lib/IR/Instructions.cpp:1491: void llvm::StoreInst::AssertOK(): Assertion
14821 dnl `cast<PointerType>(getOperand(1)->getType())->isOpaqueOrPointeeTypeMatches(getOperand(0)->getType())
14822 dnl && "Ptr must be a pointer to Val type!"' failed." (which should be fixed since Clang 17), or
14823 dnl <https://developercommunity.visualstudio.com/t/Bogus-error-C2440-with-consteval-constru/10579616>
14824 dnl "Bogus error C2440 with consteval constructor (/std:c++20)":
14825 have_cpp_consteval=
14826 AC_LANG_PUSH([C++])
14827 save_CXX=$CXX
14828 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14829     CXX="env LIB=$ILIB $CXX"
14831 save_CXXFLAGS=$CXXFLAGS
14832 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14833 AC_RUN_IFELSE([AC_LANG_PROGRAM([
14834         struct S {
14835             consteval S() { i = 1; }
14836             int i = 0;
14837         };
14838         S const s;
14840         struct S1 {
14841              int a;
14842              consteval S1(int n): a(n) {}
14843         };
14844         struct S2 {
14845             S1 x;
14846             S2(): x(0) {}
14847         };
14849         struct S3 {
14850             consteval S3() {}
14851             union {
14852                 int a;
14853                 unsigned b = 0;
14854             };
14855         };
14856         void f() { S3(); }
14858         struct S4 { consteval S4() = default; };
14859         void f4(bool b) { b ? S4() : S4(); }
14861         struct S5 {
14862             consteval S5() { c = 0; }
14863             char * f() { return &c; }
14864             union {
14865                 char c;
14866                 int i;
14867             };
14868         };
14869         auto s5 = S5().f();
14871         struct S6 {
14872             consteval S6(char const (&lit)[[2]]) {
14873                 buf[[0]] = lit[[0]];
14874                 buf[[1]] = lit[[1]];
14875             }
14876             union {
14877                 int x;
14878                 char buf[[2]];
14879             };
14880         };
14881         void f6() { S6("a"); }
14882     ], [
14883         return (s.i == 1) ? 0 : 1;
14884     ])], [
14885         have_cpp_consteval=1
14886         AC_MSG_RESULT([yes])
14887     ], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([assumed no (cross compiling)])])
14888 CXX=$save_CXX
14889 CXXFLAGS=$save_CXXFLAGS
14890 AC_LANG_POP([C++])
14891 if test -n "$have_cpp_consteval" && test "$COM_IS_CLANG" = TRUE && test -n "$BUILDING_PCH_WITH_OBJ"
14892 then
14893     AC_MSG_CHECKING([whether $CXX_BASE has working consteval in combination with PCH])
14894     dnl ...that does not suffer from <https://github.com/llvm/llvm-project/issues/81745> "undefined
14895     dnl reference to consteval constructor exported from module" (which also affects PCH, see
14896     dnl <https://lists.freedesktop.org/archives/libreoffice/2024-February/091564.html> "Our Clang
14897     dnl --enable-pch setup is known broken"):
14898     printf 'export module M;\nexport struct S1 { consteval S1(int) {} };' >conftest.cppm
14899     $CXX $CXXFLAGS $CXXFLAGS_CXX11 --precompile conftest.cppm
14900     rm conftest.cppm
14901     AC_LANG_PUSH([C++])
14902     save_CXXFLAGS=$CXXFLAGS
14903     save_LDFLAGS=$LDFLAGS
14904     CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14905     LDFLAGS="$LDFLAGS -fmodule-file=M=conftest.pcm conftest.pcm"
14906     AC_LINK_IFELSE([AC_LANG_PROGRAM([
14907         import M;
14908     ], [
14909         struct S2 { S1 s = 0; };
14910         S2 s;
14911     ])], [
14912         AC_MSG_RESULT([yes])
14913     ], [
14914         have_cpp_consteval=
14915         AC_MSG_RESULT([no])])
14916     CXXFLAGS=$save_CXXFLAGS
14917     LDFLAGS=$save_LDFLAGS
14918     AC_LANG_POP([C++])
14919     rm conftest.pcm
14921 if test -n "$have_cpp_consteval"; then
14922     AC_DEFINE([HAVE_CPP_CONSTEVAL],[1])
14925 AC_MSG_CHECKING([whether $CXX_BASE supports a working C++20 std::strong_order])
14926 dnl ...which is known to not be implemented in libc++ prior to
14927 dnl <https://github.com/llvm/llvm-project/commit/d8380ad977e94498e170b06449c81f1fc27da7b5> "[libc++]
14928 dnl [P1614] Implement [cmp.alg]'s std::{strong,weak,partial}_order" in LLVM 14:
14929 AC_LANG_PUSH([C++])
14930 save_CXX=$CXX
14931 if test "$COM" = MSC && test "$COM_IS_CLANG" != TRUE; then
14932     CXX="env LIB=$ILIB $CXX"
14934 save_CXXFLAGS=$CXXFLAGS
14935 CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
14936 AC_LINK_IFELSE([AC_LANG_PROGRAM([
14937         #include <compare>
14938     ], [
14939         (void) (std::strong_order(1.0, 2.0) < 0);
14940     ])], [
14941         AC_DEFINE([HAVE_CPP_STRONG_ORDER],[1])
14942         AC_MSG_RESULT([yes])
14943     ], [AC_MSG_RESULT([no])])
14944 CXX=$save_CXX
14945 CXXFLAGS=$save_CXXFLAGS
14946 AC_LANG_POP([C++])
14948 # ===================================================================
14949 # Creating bigger shared library to link against
14950 # ===================================================================
14951 AC_MSG_CHECKING([whether to create huge library])
14952 MERGELIBS=
14953 MERGELIBS_MORE=
14955 if test $_os = iOS -o $_os = Android; then
14956     # Never any point in mergelibs for these as we build just static
14957     # libraries anyway...
14958     enable_mergelibs=no
14961 if test -n "$enable_mergelibs" -a "$enable_mergelibs" != "no"; then
14962     if test "$enable_mergelibs" = "more"; then
14963         MERGELIBS="TRUE"
14964         MERGELIBS_MORE="TRUE"
14965         AC_MSG_RESULT([yes (more)])
14966         AC_DEFINE(ENABLE_MERGELIBS)
14967         AC_DEFINE(ENABLE_MERGELIBS_MORE)
14968     elif test "$enable_mergelibs" = "yes" -o "$enable_mergelibs" = ""; then
14969         MERGELIBS="TRUE"
14970         AC_MSG_RESULT([yes])
14971         AC_DEFINE(ENABLE_MERGELIBS)
14972     else
14973         AC_MSG_ERROR([unknown value --enable-mergelibs=$enable_mergelibs])
14974     fi
14975 else
14976     AC_MSG_RESULT([no])
14978 AC_SUBST([MERGELIBS])
14979 AC_SUBST([MERGELIBS_MORE])
14981 dnl ===================================================================
14982 dnl icerun is a wrapper that stops us spawning tens of processes
14983 dnl locally - for tools that can't be executed on the compile cluster
14984 dnl this avoids a dozen javac's ganging up on your laptop to kill it.
14985 dnl ===================================================================
14986 AC_MSG_CHECKING([whether to use icerun wrapper])
14987 ICECREAM_RUN=
14988 if test "$enable_icecream" = "yes" && command -v icerun >/dev/null ; then
14989     ICECREAM_RUN=icerun
14990     AC_MSG_RESULT([yes])
14991 else
14992     AC_MSG_RESULT([no])
14994 AC_SUBST(ICECREAM_RUN)
14996 dnl ===================================================================
14997 dnl Setup the ICECC_VERSION for the build the same way it was set for
14998 dnl configure, so that CC/CXX and ICECC_VERSION are in sync
14999 dnl ===================================================================
15000 x_ICECC_VERSION=[\#]
15001 if test -n "$ICECC_VERSION" ; then
15002     x_ICECC_VERSION=
15004 AC_SUBST(x_ICECC_VERSION)
15005 AC_SUBST(ICECC_VERSION)
15007 dnl ===================================================================
15009 AC_MSG_CHECKING([MPL subset])
15010 MPL_SUBSET=
15011 LICENSE="LGPL"
15013 if test "$enable_mpl_subset" = "yes"; then
15014     mpl_error_string=
15015     newline=$'\n    *'
15016     warn_report=false
15017     if test "$enable_report_builder" != "no" -a "$with_java" != "no"; then
15018         warn_report=true
15019     elif test "$ENABLE_REPORTBUILDER" = "TRUE"; then
15020         warn_report=true
15021     fi
15022     if test "$warn_report" = "true"; then
15023         mpl_error_string="$mpl_error_string$newline Need to --disable-report-builder - extended database report builder."
15024     fi
15025     if test "x$enable_postgresql_sdbc" != "xno"; then
15026         mpl_error_string="$mpl_error_string$newline Need to --disable-postgresql-sdbc - the PostgreSQL database backend."
15027     fi
15028     if test "$enable_lotuswordpro" = "yes"; then
15029         mpl_error_string="$mpl_error_string$newline Need to --disable-lotuswordpro - a Lotus Word Pro file format import filter."
15030     fi
15031     if test -n "$ENABLE_POPPLER"; then
15032         if test "x$SYSTEM_POPPLER" = "x"; then
15033             mpl_error_string="$mpl_error_string$newline Need to disable PDF import via poppler (--disable-poppler) or use system library."
15034         fi
15035     fi
15036     # cf. m4/libo_check_extension.m4
15037     if test "x$WITH_EXTRA_EXTENSIONS" != "x"; then
15038         mpl_error_string="$mpl_error_string$newline Need to disable extra extensions enabled using --enable-ext-XXXX."
15039     fi
15040     denied_themes=
15041     filtered_themes=
15042     for theme in $WITH_THEMES; do
15043         case $theme in
15044         breeze|breeze_dark|breeze_dark_svg|breeze_svg|elementary|elementary_svg|karasa_jaga|karasa_jaga_svg) #denylist of icon themes under GPL or LGPL
15045             denied_themes="${denied_themes:+$denied_themes }$theme" ;;
15046         *)
15047             filtered_themes="${filtered_themes:+$filtered_themes }$theme" ;;
15048         esac
15049     done
15050     if test "x$denied_themes" != "x"; then
15051         if test "x$filtered_themes" == "x"; then
15052             filtered_themes="colibre"
15053         fi
15054         mpl_error_string="$mpl_error_string$newline Need to disable icon themes: $denied_themes, use --with-theme=$filtered_themes."
15055     fi
15057     ENABLE_OPENGL_TRANSITIONS=
15059     if test "$enable_lpsolve" != "no" -o "x$ENABLE_LPSOLVE" = "xTRUE"; then
15060         mpl_error_string="$mpl_error_string$newline Need to --disable-lpsolve - calc linear programming solver."
15061     fi
15063     if test "x$mpl_error_string" != "x"; then
15064         AC_MSG_ERROR([$mpl_error_string])
15065     fi
15067     MPL_SUBSET="TRUE"
15068     LICENSE="MPL-2.0"
15069     AC_DEFINE(MPL_HAVE_SUBSET)
15070     AC_MSG_RESULT([only])
15071 else
15072     AC_MSG_RESULT([no restrictions])
15074 AC_SUBST(MPL_SUBSET)
15075 AC_SUBST(LICENSE)
15077 dnl ===================================================================
15079 AC_MSG_CHECKING([formula logger])
15080 ENABLE_FORMULA_LOGGER=
15082 if test "x$enable_formula_logger" = "xyes"; then
15083     AC_MSG_RESULT([yes])
15084     AC_DEFINE(ENABLE_FORMULA_LOGGER)
15085     ENABLE_FORMULA_LOGGER=TRUE
15086 elif test -n "$ENABLE_DBGUTIL" ; then
15087     AC_MSG_RESULT([yes])
15088     AC_DEFINE(ENABLE_FORMULA_LOGGER)
15089     ENABLE_FORMULA_LOGGER=TRUE
15090 else
15091     AC_MSG_RESULT([no])
15094 AC_SUBST(ENABLE_FORMULA_LOGGER)
15096 dnl ===================================================================
15097 dnl Checking for active Antivirus software.
15098 dnl ===================================================================
15100 if test $_os = WINNT -a -f "$SRC_ROOT/antivirusDetection.vbs" ; then
15101     AC_MSG_CHECKING([for active Antivirus software])
15102     PathFormat "$SRC_ROOT/antivirusDetection.vbs"
15103     ANTIVIRUS_LIST=`cscript.exe //Nologo ${formatted_path}`
15104     if [ [ "$ANTIVIRUS_LIST" != "NULL" ] ]; then
15105         if [ [ "$ANTIVIRUS_LIST" != "NOT_FOUND" ] ]; then
15106             AC_MSG_RESULT([found])
15107             EICAR_STRING='X5O!P%@AP@<:@4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
15108             echo $EICAR_STRING > $SRC_ROOT/eicar
15109             EICAR_TEMP_FILE_CONTENTS=`cat $SRC_ROOT/eicar`
15110             rm $SRC_ROOT/eicar
15111             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
15112                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
15113             fi
15114             echo $EICAR_STRING > $BUILDDIR/eicar
15115             EICAR_TEMP_FILE_CONTENTS=`cat $BUILDDIR/eicar`
15116             rm $BUILDDIR/eicar
15117             if [ [ "$EICAR_STRING" != "$EICAR_TEMP_FILE_CONTENTS" ] ]; then
15118                 AC_MSG_ERROR([Exclude the build and source directories associated with LibreOffice in the following Antivirus software: $ANTIVIRUS_LIST])
15119             fi
15120             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"
15121         else
15122             AC_MSG_RESULT([not found])
15123         fi
15124     else
15125         AC_MSG_RESULT([n/a])
15126     fi
15129 dnl ===================================================================
15131 AC_MSG_CHECKING([for coredumpctl support])
15132 if test -z "$with_coredumpctl" && test $_os != Linux; then
15133     with_coredumpctl=no
15135 if test "$with_coredumpctl" = no; then
15136     WITH_COREDUMPCTL=
15137 else
15138     AC_PATH_PROG(COREDUMPCTL, coredumpctl)
15139     AC_PATH_PROG(JQ, jq)
15140     AC_PATH_PROG(SYSTEMD_ESCAPE, systemd-escape)
15141     AC_PATH_PROG(SYSTEMD_RUN, systemd-run)
15142     if test -z "$COREDUMPCTL" || test -z "$JQ" || test -z "$SYSTEMD_ESCAPE" \
15143         || test -z "$SYSTEMD_RUN"
15144     then
15145         if test -z "$with_coredumpctl"; then
15146             WITH_COREDUMPCTL=
15147         else
15148             if test -z "$COREDUMPCTL"; then
15149                 AC_MSG_ERROR([coredumpctl not found])
15150             fi
15151             if test -z "$JQ"; then
15152                 AC_MSG_ERROR([jq not found])
15153             fi
15154             if test -z "$SYSTEMD_ESCAPE"; then
15155                 AC_MSG_ERROR([systemd-escape not found])
15156             fi
15157             if test -z "$SYSTEMD_RUN"; then
15158                 AC_MSG_ERROR([systemd-run not found])
15159             fi
15160         fi
15161     else
15162         WITH_COREDUMPCTL=TRUE
15163     fi
15165 if test -z "$WITH_COREDUMPCTL"; then
15166     AC_MSG_RESULT([no])
15167 else
15168     AC_MSG_RESULT([yes])
15170 AC_SUBST(COREDUMPCTL)
15171 AC_SUBST(JQ)
15172 AC_SUBST(SYSTEMD_ESCAPE)
15173 AC_SUBST(SYSTEMD_RUN)
15174 AC_SUBST(WITH_COREDUMPCTL)
15176 dnl ===================================================================
15177 dnl Setting up the environment.
15178 dnl ===================================================================
15179 AC_MSG_NOTICE([setting up the build environment variables...])
15181 AC_SUBST(COMPATH)
15183 if test "$build_os" = "cygwin" -o "$build_os" = wsl; then
15184     if test -d "$COMPATH_unix/atlmfc/lib/spectre"; then
15185         ATL_LIB="$COMPATH/atlmfc/lib/spectre"
15186         ATL_INCLUDE="$COMPATH/atlmfc/include"
15187     elif test -d "$COMPATH_unix/atlmfc/lib"; then
15188         ATL_LIB="$COMPATH/atlmfc/lib"
15189         ATL_INCLUDE="$COMPATH/atlmfc/include"
15190     else
15191         ATL_LIB="$WINDOWS_SDK_HOME/lib" # Doesn't exist for VSE
15192         ATL_INCLUDE="$WINDOWS_SDK_HOME/include/atl"
15193     fi
15194     ATL_LIB="$ATL_LIB/$WIN_HOST_ARCH"
15195     ATL_LIB=`win_short_path_for_make "$ATL_LIB"`
15196     ATL_INCLUDE=`win_short_path_for_make "$ATL_INCLUDE"`
15199 if test "$build_os" = "cygwin"; then
15200     # sort.exe and find.exe also exist in C:/Windows/system32 so need /usr/bin/
15201     PathFormat "/usr/bin/find.exe"
15202     FIND="$formatted_path"
15203     PathFormat "/usr/bin/sort.exe"
15204     SORT="$formatted_path"
15205     PathFormat "/usr/bin/grep.exe"
15206     WIN_GREP="$formatted_path"
15207     PathFormat "/usr/bin/ls.exe"
15208     WIN_LS="$formatted_path"
15209     PathFormat "/usr/bin/touch.exe"
15210     WIN_TOUCH="$formatted_path"
15211 else
15212     FIND=find
15213     SORT=sort
15216 AC_SUBST(ATL_INCLUDE)
15217 AC_SUBST(ATL_LIB)
15218 AC_SUBST(FIND)
15219 AC_SUBST(SORT)
15220 AC_SUBST(WIN_GREP)
15221 AC_SUBST(WIN_LS)
15222 AC_SUBST(WIN_TOUCH)
15224 AC_SUBST(BUILD_TYPE)
15226 AC_SUBST(SOLARINC)
15228 PathFormat "$PERL"
15229 PERL="$formatted_path"
15230 AC_SUBST(PERL)
15232 if test -n "$TMPDIR"; then
15233     TEMP_DIRECTORY="$TMPDIR"
15234 else
15235     TEMP_DIRECTORY="/tmp"
15237 CYGWIN_BASH="C:/cygwin64/bin/bash.exe"
15238 if test "$build_os" = "cygwin"; then
15239     TEMP_DIRECTORY=`cygpath -m "$TEMP_DIRECTORY"`
15240     CYGWIN_BASH=`cygpath -m /usr/bin/bash`
15242 AC_SUBST(TEMP_DIRECTORY)
15243 AC_SUBST(CYGWIN_BASH)
15245 # setup the PATH for the environment
15246 if test -n "$LO_PATH_FOR_BUILD"; then
15247     LO_PATH="$LO_PATH_FOR_BUILD"
15248     case "$host_os" in
15249     cygwin*|wsl*)
15250         pathmunge "$MSVC_HOST_PATH" "before"
15251         ;;
15252     esac
15253 else
15254     LO_PATH="$PATH"
15256     case "$host_os" in
15258     dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
15259         if test "$ENABLE_JAVA" != ""; then
15260             pathmunge "$JAVA_HOME/bin" "after"
15261         fi
15262         ;;
15264     cygwin*|wsl*)
15265         # Win32 make needs native paths
15266         if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
15267             LO_PATH=`cygpath -p -m "$PATH"`
15268         fi
15269         if test "$WIN_BUILD_ARCH" = "x64"; then
15270             # needed for msi packaging
15271             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/x86" "before"
15272         fi
15273         if test "$WIN_BUILD_ARCH" = "arm64"; then
15274             # needed for msi packaging - as of 10.0.22621 SDK no arm64 ones yet
15275             # the x86 ones probably would work just as well...
15276             pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/arm" "before"
15277         fi
15278         # .NET 4.6 and higher don't have bin directory
15279         if test -f "$DOTNET_FRAMEWORK_HOME/bin"; then
15280             pathmunge "$DOTNET_FRAMEWORK_HOME/bin" "before"
15281         fi
15282         pathmunge "$WINDOWS_SDK_HOME/bin" "before"
15283         pathmunge "$CSC_PATH" "before"
15284         pathmunge "$MIDL_PATH" "before"
15285         pathmunge "$AL_PATH" "before"
15286         pathmunge "$MSVC_MULTI_PATH" "before"
15287         pathmunge "$MSVC_BUILD_PATH" "before"
15288         if test -n "$MSBUILD_PATH" ; then
15289             pathmunge "$MSBUILD_PATH" "before"
15290         fi
15291         pathmunge "$WINDOWS_SDK_BINDIR_NO_ARCH/$WIN_BUILD_ARCH" "before"
15292         if test "$ENABLE_JAVA" != ""; then
15293             if test -d "$JAVA_HOME/jre/bin/client"; then
15294                 pathmunge "$JAVA_HOME/jre/bin/client" "before"
15295             fi
15296             if test -d "$JAVA_HOME/jre/bin/hotspot"; then
15297                 pathmunge "$JAVA_HOME/jre/bin/hotspot" "before"
15298             fi
15299             pathmunge "$JAVA_HOME/bin" "before"
15300         fi
15301         pathmunge "$MSVC_HOST_PATH" "before"
15302         ;;
15304     solaris*)
15305         pathmunge "/usr/css/bin" "before"
15306         if test "$ENABLE_JAVA" != ""; then
15307             pathmunge "$JAVA_HOME/bin" "after"
15308         fi
15309         ;;
15310     esac
15313 AC_SUBST(LO_PATH)
15315 # Allow to pass LO_ELFCHECK_ALLOWLIST from autogen.input to bin/check-elf-dynamic-objects:
15316 if test "$LO_ELFCHECK_ALLOWLIST" = x || test "${LO_ELFCHECK_ALLOWLIST-x}" != x; then
15317     x_LO_ELFCHECK_ALLOWLIST=
15318 else
15319     x_LO_ELFCHECK_ALLOWLIST=[\#]
15321 AC_SUBST(x_LO_ELFCHECK_ALLOWLIST)
15322 AC_SUBST(LO_ELFCHECK_ALLOWLIST)
15324 libo_FUZZ_SUMMARY
15326 # Generate a configuration sha256 we can use for deps
15327 if test -f config_host.mk; then
15328     config_sha256=`$SHA256SUM config_host.mk | sed "s/ .*//"`
15330 if test -f config_host_lang.mk; then
15331     config_lang_sha256=`$SHA256SUM config_host_lang.mk | sed "s/ .*//"`
15334 CFLAGS=$my_original_CFLAGS
15335 CXXFLAGS=$my_original_CXXFLAGS
15336 CPPFLAGS=$my_original_CPPFLAGS
15338 AC_CONFIG_LINKS([include:include])
15340 # Keep in sync with list of files far up, at AC_MSG_CHECKING([for
15341 # BUILD platform configuration] - otherwise breaks cross building
15342 AC_CONFIG_FILES([config_host.mk
15343                  config_host_lang.mk
15344                  Makefile
15345                  bin/bffvalidator.sh
15346                  bin/odfvalidator.sh
15347                  bin/officeotron.sh
15348                  instsetoo_native/util/openoffice.lst
15349                  sysui/desktop/macosx/Info.plist
15350                  hardened_runtime.xcent:sysui/desktop/macosx/hardened_runtime.xcent.in
15351                  lo.xcent:sysui/desktop/macosx/lo.xcent.in
15352                  vs-code.code-workspace.template:.vscode/vs-code-template.code-workspace.in])
15354 AC_CONFIG_HEADERS([config_host/config_atspi.h])
15355 AC_CONFIG_HEADERS([config_host/config_buildconfig.h])
15356 AC_CONFIG_HEADERS([config_host/config_buildid.h])
15357 AC_CONFIG_HEADERS([config_host/config_box2d.h])
15358 AC_CONFIG_HEADERS([config_host/config_clang.h])
15359 AC_CONFIG_HEADERS([config_host/config_crypto.h])
15360 AC_CONFIG_HEADERS([config_host/config_dconf.h])
15361 AC_CONFIG_HEADERS([config_host/config_eot.h])
15362 AC_CONFIG_HEADERS([config_host/config_extensions.h])
15363 AC_CONFIG_HEADERS([config_host/config_cairo_canvas.h])
15364 AC_CONFIG_HEADERS([config_host/config_cairo_rgba.h])
15365 AC_CONFIG_HEADERS([config_host/config_cxxabi.h])
15366 AC_CONFIG_HEADERS([config_host/config_dbus.h])
15367 AC_CONFIG_HEADERS([config_host/config_features.h])
15368 AC_CONFIG_HEADERS([config_host/config_feature_desktop.h])
15369 AC_CONFIG_HEADERS([config_host/config_feature_opencl.h])
15370 AC_CONFIG_HEADERS([config_host/config_firebird.h])
15371 AC_CONFIG_HEADERS([config_host/config_folders.h])
15372 AC_CONFIG_HEADERS([config_host/config_fonts.h])
15373 AC_CONFIG_HEADERS([config_host/config_fuzzers.h])
15374 AC_CONFIG_HEADERS([config_host/config_gio.h])
15375 AC_CONFIG_HEADERS([config_host/config_global.h])
15376 AC_CONFIG_HEADERS([config_host/config_gpgme.h])
15377 AC_CONFIG_HEADERS([config_host/config_java.h])
15378 AC_CONFIG_HEADERS([config_host/config_langs.h])
15379 AC_CONFIG_HEADERS([config_host/config_lgpl.h])
15380 AC_CONFIG_HEADERS([config_host/config_libcxx.h])
15381 AC_CONFIG_HEADERS([config_host/config_liblangtag.h])
15382 AC_CONFIG_HEADERS([config_host/config_locales.h])
15383 AC_CONFIG_HEADERS([config_host/config_mpl.h])
15384 AC_CONFIG_HEADERS([config_host/config_oox.h])
15385 AC_CONFIG_HEADERS([config_host/config_options.h])
15386 AC_CONFIG_HEADERS([config_host/config_options_calc.h])
15387 AC_CONFIG_HEADERS([config_host/config_zxing.h])
15388 AC_CONFIG_HEADERS([config_host/config_skia.h])
15389 AC_CONFIG_HEADERS([config_host/config_typesizes.h])
15390 AC_CONFIG_HEADERS([config_host/config_validation.h])
15391 AC_CONFIG_HEADERS([config_host/config_vendor.h])
15392 AC_CONFIG_HEADERS([config_host/config_vclplug.h])
15393 AC_CONFIG_HEADERS([config_host/config_version.h])
15394 AC_CONFIG_HEADERS([config_host/config_oauth2.h])
15395 AC_CONFIG_HEADERS([config_host/config_poppler.h])
15396 AC_CONFIG_HEADERS([config_host/config_python.h])
15397 AC_CONFIG_HEADERS([config_host/config_writerperfect.h])
15398 AC_CONFIG_HEADERS([config_host/config_wasm_strip.h])
15399 AC_CONFIG_HEADERS([solenv/lockfile/autoconf.h])
15400 AC_OUTPUT
15402 if test "$CROSS_COMPILING" = TRUE; then
15403     (echo; echo export BUILD_TYPE_FOR_HOST=$BUILD_TYPE) >>config_build.mk
15406 # touch the config timestamp file
15407 if test ! -f config_host.mk.stamp; then
15408     echo > config_host.mk.stamp
15409 elif test "$config_sha256" = `$SHA256SUM config_host.mk | sed "s/ .*//"`; then
15410     echo "Host Configuration unchanged - avoiding scp2 stamp update"
15411 else
15412     echo > config_host.mk.stamp
15415 # touch the config lang timestamp file
15416 if test ! -f config_host_lang.mk.stamp; then
15417     echo > config_host_lang.mk.stamp
15418 elif test "$config_lang_sha256" = `$SHA256SUM config_host_lang.mk | sed "s/ .*//"`; then
15419     echo "Language Configuration unchanged - avoiding scp2 stamp update"
15420 else
15421     echo > config_host_lang.mk.stamp
15425 if test \( "$STALE_MAKE" = "TRUE" \) \
15426         -a "$build_os" = "cygwin"; then
15428 cat << _EOS
15429 ****************************************************************************
15430 WARNING:
15431 Your make version is known to be horribly slow, and hard to debug
15432 problems with. To get a reasonably functional make please do:
15434 to install a pre-compiled binary make for Win32
15436  mkdir -p /opt/lo/bin
15437  cd /opt/lo/bin
15438  wget https://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
15439  cp make-4.2.1-msvc.exe make
15440  chmod +x make
15442 to install from source:
15443 place yourself in a working directory of you choice.
15445  git clone git://git.savannah.gnu.org/make.git
15447  [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"]
15448  set PATH=%PATH%;C:\Cygwin\bin
15449  [or Cygwin64, if that is what you have]
15450  cd path-to-make-repo-you-cloned-above
15451  build_w32.bat --without-guile
15453 should result in a WinRel/gnumake.exe.
15454 Copy it to the Cygwin /opt/lo/bin directory as make.exe
15456 Then re-run autogen.sh
15458 Note: autogen.sh will try to use /opt/lo/bin/make if the environment variable GNUMAKE is not already defined.
15459 Alternatively, you can install the 'new' make where ever you want and make sure that `command -v make` finds it.
15461 _EOS
15465 cat << _EOF
15466 ****************************************************************************
15468 To show information on various make targets and make flags, run:
15469 $GNUMAKE help
15471 To just build, run:
15472 $GNUMAKE
15474 _EOF
15476 if test $_os != WINNT -a "$CROSS_COMPILING" != TRUE; then
15477     cat << _EOF
15478 After the build has finished successfully, you can immediately run what you built using the command:
15479 _EOF
15481     if test $_os = Darwin; then
15482         echo open instdir/$PRODUCTNAME_WITHOUT_SPACES.app
15483     else
15484         echo instdir/program/soffice
15485     fi
15486     cat << _EOF
15488 If you want to run the unit tests, run:
15489 $GNUMAKE check
15491 _EOF
15494 if test -s "$WARNINGS_FILE_FOR_BUILD"; then
15495     echo "BUILD / cross-toolset config, repeated ($WARNINGS_FILE_FOR_BUILD)"
15496     cat "$WARNINGS_FILE_FOR_BUILD"
15497     echo
15500 if test -s "$WARNINGS_FILE"; then
15501     echo "HOST config ($WARNINGS_FILE)"
15502     cat "$WARNINGS_FILE"
15505 # Remove unneeded emconfigure artifacts
15506 rm -f a.out a.wasm a.out.js a.out.wasm
15508 dnl vim:set shiftwidth=4 softtabstop=4 expandtab: