Quelle configure.ac
Sprache: unbekannt
|
|
dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; fill-column: 100 -*-
dnl configure.ac serves as input for the GNU autoconf package
dnl in order to create a configure script.
dnl cspell:enableCompoundWords
dnl cspell:includeRegExp ^\s*#.*$
dnl cspell:includeRegExp ^\s*dnl.*$
dnl cspell:includeRegExp /AC_MSG_[A-Z]*\([^)]*\)/
dnl cspell:ignoreRegExp /[A-Z]{4,}/
dnl cspell:ignoreRegExp /\${?[A-za-z]*/
dnl cspell:ignoreRegExp /[ ']-[fglmBWXZ][a-z][^ ]*/
dnl cspell:ignoreRegExp / -isystem /
# The version number in the second argument to AC_INIT should be four numbers separated by
# periods. Some parts of the code requires the first one to be less than 128 and the others to be less
# than 256. The four numbers can optionally be followed by a period and a free-form string containing
# no spaces or periods, like "frobozz-mumble-42" or "alpha0". If the free-form string ends with one or
# several non-alphanumeric characters, those are split off and used only for the
# ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
AC_INIT([LibreOffice],[25.8.3.2],[],[],[http://documentfoundation.org/])
dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
dnl so check for the version of autoconf that is actually used to create the configure script
AC_PREREQ([2.59])
m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.68]), -1,
[AC_MSG_ERROR([at least autoconf version 2.68 is needed (you can use AUTOCONF environment variable to point to a suitable one)])])
if test -n "$BUILD_TYPE"; then
AC_MSG_ERROR([You have sourced config_host.mk in this shell. This may lead to trouble, please run in a fresh (login) shell.])
fi
save_CC=$CC
save_CXX=$CXX
first_arg_basename()
{
for i in $1; do
basename "$i"
break
done
}
CC_BASE=`first_arg_basename "$CC"`
CXX_BASE=`first_arg_basename "$CXX"`
BUILD_TYPE="LibO"
SCPDEFS=""
GIT_NEEDED_SUBMODULES=""
LO_PATH= # used by path_munge to construct a PATH variable
FilterLibs()
{
# Return value: $filteredlibs
filteredlibs=
if test "$COM" = "MSC"; then
for f in $1; do
if test "x$f" != "x${f#-L}"; then
filteredlibs="$filteredlibs -LIBPATH:${f:2}"
elif test "x$f" != "x${f#-l}"; then
filteredlibs="$filteredlibs ${f:2}.lib"
else
filteredlibs="$filteredlibs $f"
fi
done
else
for f in $1; do
case "$f" in
# let's start with Fedora's paths for now
-L/lib|-L/lib/|-L/lib64|-L/lib64/|-L/usr/lib|-L/usr/lib/|-L/usr/lib64|-L/usr/lib64/)
# ignore it: on UNIXoids it is searched by default anyway
# but if it's given explicitly then it may override other paths
# (on macOS it would be an error to use it instead of SDK)
;;
*)
filteredlibs="$filteredlibs $f"
;;
esac
done
fi
}
PathFormat()
{
# Args: $1: A pathname. On Cygwin and WSL, in either the Unix or the Windows format. Note that this
# function is called also on Unix.
#
# Return value: $formatted_path and $formatted_path_unix.
#
# $formatted_path is the argument in Windows format, but using forward slashes instead of
# backslashes, using 8.3 pathname components if necessary (if it otherwise would contains spaces
# or shell metacharacters).
#
# $formatted_path_unix is the argument in a form usable in Cygwin or WSL, using 8.3 components if
# necessary. On Cygwin, it is the same as $formatted_path, but on WSL it is $formatted_path as a
# Unix pathname.
#
# Errors out if 8.3 names are needed but aren't present for some of the path components.
# Examples:
#
# /home/tml/lo/master-optimised => C:/cygwin64/home/tml/lo/master-optimised
#
# C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe => C:/PROGRA~2/MICROS~3/INSTAL~1/vswhere.exe
#
# C:\Program Files (x86)\Microsoft Visual Studio\2019\Community => C:/PROGRA~2/MICROS~3/2019/COMMUN~1
#
# C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt => C:/PROGRA~2/WI3CF2~1/10/Include/10.0.18362.0/ucrt
#
# /cygdrive/c/PROGRA~2/WI3CF2~1/10 => C:/PROGRA~2/WI3CF2~1/10
#
# C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\ => C:/PROGRA~2/WI3CF2~1/NETFXSDK/4.8/
#
# /usr/bin/find.exe => C:/cygwin64/bin/find.exe
if test -z "$1"; then
formatted_path=""
formatted_path_unix=""
return
fi
if test -n "$UNITTEST_WSL_PATHFORMAT"; then
printf "PathFormat $1 ==> "
fi
formatted_path="$1"
if test "$build_os" = "cygwin" -o "$build_os" = "wsl"; then
if test "$build_os" = "wsl"; then
formatted_path=$(echo "$formatted_path" | tr -d '\r')
fi
pf_conv_to_dos=
# spaces,parentheses,brackets,braces are problematic in pathname
# so are backslashes
case "$formatted_path" in
*\ * | *\)* | *\(* | *\{* | *\}* | *\[* | *\]* | *\\* )
pf_conv_to_dos="yes"
;;
esac
if test "$pf_conv_to_dos" = "yes"; then
if test "$build_os" = "wsl"; then
case "$formatted_path" in
/*)
formatted_path=$(wslpath -w "$formatted_path")
;;
esac
formatted_path=$($WSL_LO_HELPER --8.3 "$formatted_path")
elif test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
formatted_path=`cygpath -sm "$formatted_path"`
else
formatted_path=`cygpath -d "$formatted_path"`
fi
if test $? -ne 0; then
AC_MSG_ERROR([path conversion failed for "$1".])
fi
fi
fp_count_colon=`echo "$formatted_path" | $GREP -c "[:]"`
fp_count_slash=`echo "$formatted_path" | $GREP -c "[/]"`
if test "$fp_count_slash$fp_count_colon" != "00"; then
if test "$fp_count_colon" = "0"; then
new_formatted_path=`realpath "$formatted_path"`
if test $? -ne 0; then
AC_MSG_WARN([realpath failed for "$formatted_path", not necessarily a problem.])
else
formatted_path="$new_formatted_path"
fi
fi
if test "$build_os" = "wsl"; then
if test "$fp_count_colon" != "0"; then
formatted_path=$(wslpath "$formatted_path")
local final_slash=
case "$formatted_path" in
*/)
final_slash=/
;;
esac
formatted_path=$(wslpath -m $formatted_path)
case "$formatted_path" in
*/)
;;
*)
formatted_path="$formatted_path"$final_slash
;;
esac
else
formatted_path=$(wslpath -m "$formatted_path")
fi
else
formatted_path=`cygpath -m "$formatted_path"`
fi
if test $? -ne 0; then
AC_MSG_ERROR([path conversion failed for "$1".])
fi
fi
fp_count_space=`echo "$formatted_path" | $GREP -c "[ ]"`
if test "$fp_count_space" != "0"; then
AC_MSG_ERROR([converted path "$formatted_path" still contains spaces. Short filenames (8.3 filenames) support was disabled on this system?])
fi
fi
if test "$build_os" = "wsl"; then
# WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
formatted_path_unix=$(wslpath "$formatted_path")
else
# But Cygwin can
formatted_path_unix="$formatted_path"
fi
if test -n "$WSL_ONLY_AS_HELPER"; then
# if already in unix format, switch to windows format to create shortened path
case "$formatted_path" in
/*)
formatted_path=$(wslpath -m "$formatted_path")
;;
esac
# cd to /mnt/c to avoid wsl/cmd complaining about not supporting UNC paths/the current working directory
formatted_path_unix=$(wslpath -u "$(cd /mnt/c; cmd.exe /c $shortpath_cmd "$formatted_path" | tr -d '\r')")
# WSL can't run Windows binaries from Windows pathnames so we need a separate return value in Unix format
formatted_path=$(wslpath -m "$formatted_path_unix")
fi
}
AbsolutePath()
{
# There appears to be no simple and portable method to get an absolute and
# canonical path, so we try creating the directory if does not exist and
# utilizing the shell and pwd.
# Args: $1: A possibly relative pathname
# Return value: $absolute_path
# Convert to unix path, mkdir would treat c:/path as a relative path.
PathFormat "$1"
local rel="$formatted_path_unix"
absolute_path=""
test ! -e "$rel" && mkdir -p "$rel"
if test -d "$rel" ; then
cd "$rel" || AC_MSG_ERROR([absolute path resolution failed for "$rel".])
absolute_path="$(pwd)"
cd - > /dev/null
else
AC_MSG_ERROR([Failed to resolve absolute path. "$rel" does not exist or is not a directory.])
fi
}
WARNINGS_FILE=config.warn
WARNINGS_FILE_FOR_BUILD=config.Build.warn
rm -f "$WARNINGS_FILE" "$WARNINGS_FILE_FOR_BUILD"
have_WARNINGS="no"
add_warning()
{
if test "$have_WARNINGS" = "no"; then
echo "*************************************" > "$WARNINGS_FILE"
have_WARNINGS="yes"
if command -v tput >/dev/null && test "`tput colors 2>/dev/null || echo 0`" -ge 8; then
dnl <esc> as actual byte (U+1b), [ escaped using quadrigraph @<:@
COLORWARN='*@<:@1;33;40m WARNING @<:@0m:'
else
COLORWARN="* WARNING :"
fi
fi
echo "$COLORWARN $@" >> "$WARNINGS_FILE"
}
dnl Some Mac User have the bad habit of letting a lot of crap
dnl accumulate in their PATH and even adding stuff in /usr/local/bin
dnl that confuse the build.
dnl For the ones that use LODE, let's be nice and protect them
dnl from themselves
mac_sanitize_path()
{
mac_path="$LODE_HOME/opt/bin:/usr/bin:/bin:/usr/sbin:/sbin"
dnl a common but nevertheless necessary thing that may be in a fancy
dnl path location is git, so make sure we have it
mac_git_path=`command -v git`
if test -n "$mac_git_path" -a -x "$mac_git_path" -a "$mac_git_path" != "/usr/bin/git" ; then
mac_path="$mac_path:`dirname $mac_git_path`"
fi
dnl a not so common but nevertheless quite helpful thing that may be in a fancy
dnl path location is gpg, so make sure we find it
mac_gpg_path=`command -v gpg`
if test -n "$mac_gpg_path" -a -x "$mac_gpg_path" -a "$mac_gpg_path" != "/usr/bin/gpg" ; then
mac_path="$mac_path:`dirname $mac_gpg_path`"
fi
PATH="$mac_path"
unset mac_path
unset mac_git_path
unset mac_gpg_path
}
dnl semantically test a three digits version
dnl $1 - $3 = minimal version
dnl $4 - $6 = current version
check_semantic_version_three()
{
test "$4" -gt "$1" \
-o \( "$4" -eq "$1" -a "$5" -gt "$2" \) \
-o \( "$4" -eq "$1" -a "$5" -eq "$2" -a "$6" -ge "$3" \)
return $?
}
dnl calls check_semantic_version_three with digits in named variables $1_MAJOR, $1_MINOR, $1_TINY
dnl $1 = current version prefix, e.g. EMSCRIPTEN => EMSCRIPTEN_
dnl $2 = postfix to $1, e.g. MIN => EMSCRIPTEN_MIN_
check_semantic_version_three_prefixed()
{
eval local MIN_MAJOR="\$${1}_${2}_MAJOR"
eval local MIN_MINOR="\$${1}_${2}_MINOR"
eval local MIN_TINY="\$${1}_${2}_TINY"
eval local CUR_MAJOR="\$${1}_MAJOR"
eval local CUR_MINOR="\$${1}_MINOR"
eval local CUR_TINY="\$${1}_TINY"
check_semantic_version_three $MIN_MAJOR $MIN_MINOR $MIN_TINY $CUR_MAJOR $CUR_MINOR $CUR_TINY
return $?
}
echo "********************************************************************"
echo "*"
echo "* Running ${PACKAGE_NAME} build configuration."
echo "*"
echo "********************************************************************"
echo ""
dnl ===================================================================
dnl checks build and host OSes
dnl do this before argument processing to allow for platform dependent defaults
dnl ===================================================================
# are we running in wsl but are called from git-bash/env with mingw64 or clangarm64 in path?
# if so, we aim to run nearly everything in the Windows realm, and only run autogen/configure
# in wsl and run a few tools via wsl
WSL_ONLY_AS_HELPER=
if test -n "$WSL_DISTRO_NAME" && $(echo $PATH |grep -q -e mingw64 -e clangarm64); then
WSL_ONLY_AS_HELPER=TRUE
AC_ARG_WITH([strawberry-perl-portable],
[AS_HELP_STRING([--with-strawberry-perl-portable],
[Specify the base path to strawberry perl portable])],
[],
[AC_MSG_ERROR(
[for the moment strawberry-perl-portable is a requirement, feel free to replace it])])
shortpath_cmd=$(wslpath -m $srcdir/solenv/bin/shortpath.cmd)
PathFormat "$with_strawberry_perl_portable"
if test ! -f "$formatted_path_unix/perl/bin/perl.exe" -o ! -d "$formatted_path_unix/c/bin"; then
AC_MSG_ERROR([$formatted_path doesn't contain perl or the utilities - sure you provided the base path?])
fi
STRAWBERRY_TOOLS="$formatted_path/c/bin"
STRAWBERRY_PERL="$formatted_path/perl/bin/perl.exe"
STRAWBERRY_PERL_UNIX="$formatted_path_unix/perl/bin/perl.exe"
AC_ARG_WITH([wsl-command],
[AS_HELP_STRING([--with-wsl-command],
[Specify your wsl distro command if it isn't the default/the one used with just wsl.exe –
for example: wsl.exe -d MyDistro -u NonDefaultUser])],
[],
[with_wsl_command="wsl.exe"])
WSL="$with_wsl_command"
fi
AC_SUBST([STRAWBERRY_PERL])
AC_SUBST([WSL])
# Check for WSL (version 2, at least). But if --host is explicitly specified (to really do build for
# Linux on WSL) trust that.
if test -z "$host" -a -z "$build" -a "`wslsys -v 2>/dev/null`" != ""; then
ac_cv_host="x86_64-pc-wsl"
ac_cv_host_cpu="x86_64"
ac_cv_host_os="wsl"
ac_cv_build="$ac_cv_host"
ac_cv_build_cpu="$ac_cv_host_cpu"
ac_cv_build_os="$ac_cv_host_os"
# Emulation of Cygwin's cygpath command for WSL.
cygpath()
{
if test -n "$UNITTEST_WSL_CYGPATH"; then
echo -n cygpath "$@" "==> "
fi
# Cygwin's real cygpath has a plethora of options but we use only a few here.
local args="$@"
local opt
local opt_d opt_m opt_u opt_w opt_l opt_s opt_p
OPTIND=1
while getopts dmuwlsp opt; do
case "$opt" in
\?)
AC_MSG_ERROR([Unimplemented cygpath emulation option in invocation: cygpath $args])
;;
?)
eval opt_$opt=yes
;;
esac
done
shift $((OPTIND-1))
if test $# -ne 1; then
AC_MSG_ERROR([Invalid cygpath emulation invocation: Pathname missing]);
fi
local input="$1"
local result
if test -n "$opt_d" -o -n "$opt_m" -o -n "$opt_w"; then
# Print Windows path, possibly in 8.3 form (-d) or with forward slashes (-m)
if test -n "$opt_u"; then
AC_MSG_ERROR([Invalid cygpath invocation: Both Windows and Unix path output requested])
fi
case "$input" in
/mnt/*)
# A Windows file in WSL format
input=$(wslpath -w "$input")
;;
[[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
# Already in Windows format
;;
/*)
input=$(wslpath -w "$input")
;;
*)
AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
;;
esac
if test -n "$opt_d" -o -n "$opt_s"; then
input=$($WSL_LO_HELPER --8.3 "$input")
fi
if test -n "$opt_m"; then
input="${input//\\//}"
fi
echo "$input"
else
# Print Unix path
case "$input" in
[[a-zA-Z]]:\\* | \\* | [[a-zA-Z]]:/* | /*)
wslpath -u "$input"
;;
/)
echo "$input"
;;
*)
AC_MSG_ERROR([Invalid cygpath invocation: Path '$input' is not absolute])
;;
esac
fi
}
if test -n "$UNITTEST_WSL_CYGPATH"; then
BUILDDIR=.
# Nothing special with these file names, just arbitrary ones picked to test with
cygpath -d /usr/lib64/ld-linux-x86-64.so.2
cygpath -w /usr/lib64/ld-linux-x86-64.so.2
cygpath -m /usr/lib64/ld-linux-x86-64.so.2
cygpath -m -s /usr/lib64/ld-linux-x86-64.so.2
# At least on my machine for instance this file does have an 8.3 name
cygpath -d /mnt/c/windows/WindowsUpdate.log
# But for instance this one doesn't
cygpath -w /mnt/c/windows/system32/AboutSettingsHandlers.dll
cygpath -ws /mnt/c/windows/WindowsUpdate.log
cygpath -m /mnt/c/windows/system32/AboutSettingsHandlers.dll
cygpath -ms /mnt/c/windows/WindowsUpdate.log
cygpath -u 'c:\windows\system32\AboutSettingsHandlers.dll'
cygpath -u 'c:/windows/system32/AboutSettingsHandlers.dll'
exit 0
fi
if test -z "$WSL_LO_HELPER"; then
if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/wsl-lo-helper" ; then
WSL_LO_HELPER="$LODE_HOME/opt/bin/wsl-lo-helper"
elif test -x "/opt/lo/bin/wsl-lo-helper"; then
WSL_LO_HELPER="/opt/lo/bin/wsl-lo-helper"
fi
fi
if test -z "$WSL_LO_HELPER"; then
AC_MSG_ERROR([wsl-lo-helper not found. See solenv/wsl/README.])
fi
fi
AC_CANONICAL_HOST
AC_CANONICAL_BUILD
if test -n "$UNITTEST_WSL_PATHFORMAT"; then
BUILDDIR=.
GREP=grep
# Use of PathFormat must be after AC_CANONICAL_BUILD above
PathFormat /
printf "$formatted_path , $formatted_path_unix\n"
PathFormat $PWD
printf "$formatted_path , $formatted_path_unix\n"
PathFormat "$PROGRAMFILESX86"
printf "$formatted_path , $formatted_path_unix\n"
exit 0
fi
AC_MSG_CHECKING([for product name])
PRODUCTNAME="AC_PACKAGE_NAME"
if test -n "$with_product_name" -a "$with_product_name" != no; then
PRODUCTNAME="$with_product_name"
fi
if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then
PRODUCTNAME="${PRODUCTNAME}Dev"
fi
AC_MSG_RESULT([$PRODUCTNAME])
AC_SUBST(PRODUCTNAME)
PRODUCTNAME_WITHOUT_SPACES=$(printf %s "$PRODUCTNAME" | sed 's/ //g')
AC_SUBST(PRODUCTNAME_WITHOUT_SPACES)
dnl ===================================================================
dnl Our version is defined by the AC_INIT() at the top of this script.
dnl ===================================================================
AC_MSG_CHECKING([for package version])
if test -n "$with_package_version" -a "$with_package_version" != no; then
PACKAGE_VERSION="$with_package_version"
fi
AC_MSG_RESULT([$PACKAGE_VERSION])
set `echo "$PACKAGE_VERSION" | sed "s/\./ /g"`
LIBO_VERSION_MAJOR=$1
LIBO_VERSION_MINOR=$2
LIBO_VERSION_MICRO=$3
LIBO_VERSION_PATCH=$4
LIBO_VERSION_SUFFIX=$5
# Split out LIBO_VERSION_SUFFIX_SUFFIX... horrible crack. But apparently wanted separately in
# openoffice.lst as ABOUTBOXPRODUCTVERSIONSUFFIX. Note that the double brackets are for m4's sake,
# they get undoubled before actually passed to sed.
LIBO_VERSION_SUFFIX_SUFFIX=`echo "$LIBO_VERSION_SUFFIX" | sed -e 's/.*[[a-zA-Z0-9]]\([[^a-zA-Z0-9]]*\)$/\1/'`
test -n "$LIBO_VERSION_SUFFIX_SUFFIX" && LIBO_VERSION_SUFFIX="${LIBO_VERSION_SUFFIX%${LIBO_VERSION_SUFFIX_SUFFIX}}"
# LIBO_VERSION_SUFFIX, if non-empty, should include the period separator
test -n "$LIBO_VERSION_SUFFIX" && LIBO_VERSION_SUFFIX=".$LIBO_VERSION_SUFFIX"
# The value for key CFBundleVersion in the Info.plist file must be a period-separated list of at most
# three non-negative integers. Please find more information about CFBundleVersion at
# https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion
# The value for key CFBundleShortVersionString in the Info.plist file must be a period-separated list
# of at most three non-negative integers. Please find more information about
# CFBundleShortVersionString at
# https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
# But that is enforced only in the App Store, and we apparently want to break the rules otherwise.
if test "$enable_macosx_sandbox" = yes; then
MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.`expr $LIBO_VERSION_MICRO '*' 1000 + $LIBO_VERSION_PATCH`
MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION
else
MACOSX_BUNDLE_SHORTVERSION=$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR.$LIBO_VERSION_MICRO.$LIBO_VERSION_PATCH
MACOSX_BUNDLE_VERSION=$MACOSX_BUNDLE_SHORTVERSION$LIBO_VERSION_SUFFIX
fi
AC_SUBST(LIBO_VERSION_MAJOR)
AC_SUBST(LIBO_VERSION_MINOR)
AC_SUBST(LIBO_VERSION_MICRO)
AC_SUBST(LIBO_VERSION_PATCH)
AC_SUBST(LIBO_VERSION_SUFFIX)
AC_SUBST(LIBO_VERSION_SUFFIX_SUFFIX)
AC_SUBST(MACOSX_BUNDLE_SHORTVERSION)
AC_SUBST(MACOSX_BUNDLE_VERSION)
AC_DEFINE_UNQUOTED(LIBO_VERSION_MAJOR,$LIBO_VERSION_MAJOR)
AC_DEFINE_UNQUOTED(LIBO_VERSION_MINOR,$LIBO_VERSION_MINOR)
AC_DEFINE_UNQUOTED(LIBO_VERSION_MICRO,$LIBO_VERSION_MICRO)
AC_DEFINE_UNQUOTED(LIBO_VERSION_PATCH,$LIBO_VERSION_PATCH)
git_date=`git log -1 --pretty=format:"%cd" --date=format:'%Y' 2>/dev/null`
LIBO_THIS_YEAR=${git_date:-2025}
AC_DEFINE_UNQUOTED(LIBO_THIS_YEAR,$LIBO_THIS_YEAR)
dnl ===================================================================
dnl Product version
dnl ===================================================================
AC_MSG_CHECKING([for product version])
PRODUCTVERSION="$LIBO_VERSION_MAJOR.$LIBO_VERSION_MINOR"
AC_MSG_RESULT([$PRODUCTVERSION])
AC_SUBST(PRODUCTVERSION)
AC_PROG_EGREP
# AC_PROG_EGREP doesn't set GREP on all systems as well
AC_PATH_PROG(GREP, grep)
BUILDDIR=`pwd`
cd $srcdir
SRC_ROOT=`pwd`
cd $BUILDDIR
x_Cygwin=[\#]
dnl ======================================
dnl Required GObject introspection version
dnl ======================================
INTROSPECTION_REQUIRED_VERSION=1.32.0
dnl ===================================================================
dnl Search all the common names for GNU Make
dnl ===================================================================
AC_MSG_CHECKING([for GNU Make])
# try to use our own make if it is available and GNUMAKE was not already defined
if test -z "$GNUMAKE"; then
if test -n "$LODE_HOME" -a -x "$LODE_HOME/opt/bin/make" ; then
GNUMAKE="$LODE_HOME/opt/bin/make"
elif test -x "/opt/lo/bin/make"; then
GNUMAKE="/opt/lo/bin/make"
fi
fi
GNUMAKE_WIN_NATIVE=
for a in "$MAKE" "$GNUMAKE" make gmake gnumake; do
if test -n "$a"; then
$a --version 2> /dev/null | grep GNU 2>&1 > /dev/null
if test $? -eq 0; then
if test "$build_os" = "cygwin"; then
if test -n "$($a -v | grep 'Built for Windows')" ; then
GNUMAKE="$(cygpath -m "$(command -v "$(cygpath -u $a)")")"
GNUMAKE_WIN_NATIVE="TRUE"
else
GNUMAKE=`command -v $a`
fi
else
GNUMAKE=`command -v $a`
fi
break
fi
fi
done
AC_MSG_RESULT($GNUMAKE)
if test -z "$GNUMAKE"; then
AC_MSG_ERROR([not found. install GNU Make.])
else
if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
AC_MSG_NOTICE([Using a native Win32 GNU Make version.])
fi
fi
win_short_path_for_make()
{
local short_path="$1"
if test "$GNUMAKE_WIN_NATIVE" = "TRUE" ; then
cygpath -sm "$short_path"
elif test -n "$WSL_ONLY_AS_HELPER"; then
# when already unix-style path, wslpath doesn't return anything
case "$short_path" in
/*)
echo $short_path
exit
;;
esac
wslpath -m "$(wslpath -u "$short_path")"
else
cygpath -u "$(cygpath -d "$short_path")"
fi
}
if test "$build_os" = "cygwin"; then
PathFormat "$SRC_ROOT"
SRC_ROOT="$formatted_path"
PathFormat "$BUILDDIR"
BUILDDIR="$formatted_path"
x_Cygwin=
AC_MSG_CHECKING(for explicit COMSPEC)
if test -z "$COMSPEC"; then
AC_MSG_ERROR([COMSPEC not set in environment, please set it and rerun])
else
AC_MSG_RESULT([found: $COMSPEC])
fi
fi
AC_SUBST(SRC_ROOT)
AC_SUBST(BUILDDIR)
AC_SUBST(x_Cygwin)
AC_DEFINE_UNQUOTED(SRCDIR,"$SRC_ROOT")
AC_DEFINE_UNQUOTED(SRC_ROOT,"$SRC_ROOT")
AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
if test "z$EUID" = "z0" -a "`uname -o 2>/dev/null`" = "Cygwin"; then
AC_MSG_ERROR([You must build LibreOffice as a normal user - not using an administrative account])
fi
# need sed in os checks...
AC_PATH_PROGS(SED, sed)
if test -z "$SED"; then
AC_MSG_ERROR([install sed to run this script])
fi
if test "$build_os" = "cygwin" -o -n "$WSL_ONLY_AS_HELPER"; then
# convenience check for a custom pkgconf used by meson - needs to be a version that uses windows
# style paths. Needs to be checked before the configure-switches that use PKG_CHECK_MODULES as
# that would already set the PKG_CONFIG var and then bypass/skip this autoselection
AC_PATH_PROG(PKG_CONFIG,pkgconf-2.4.3.exe,,[$PATH:$LODE_HOME/opt/bin])
if test -z "$PKG_CONFIG"; then
AC_MSG_ERROR([
A windows version of pkgconf is required to build harfbuzz.
Add PKG_CONFIG=/path/to/pkgconf-2.4.3.exe to autogen.input or put it in PATH])
fi
else
case "$build_os" in
darwin*)
# convenience check for LODE's custom pkgconf used by meson
# Needs to be checked before the configure-switches that use PKG_CHECK_MODULES as
# that would already set the PKG_CONFIG var and then bypass/skip this autoselection
AC_PATH_PROG(PKG_CONFIG,pkgconf,,[$PATH:$LODE_HOME/opt/bin])
if test -z "$PKG_CONFIG"; then
AC_MSG_WARN([pkgconf not found - pkgconf is required to build harfbuzz])
add_warning "please add PKG_CONFIG=/path/to/pkgconf to autogen.input or put it in PATH, pkgconf is required to build harfbuzz"
fi
;;
esac
fi
# Set the ENABLE_LTO variable
# ===================================================================
AC_MSG_CHECKING([whether to use link-time optimization])
if test -n "$enable_lto" -a "$enable_lto" != "no"; then
ENABLE_LTO="TRUE"
AC_MSG_RESULT([yes])
else
ENABLE_LTO=""
AC_MSG_RESULT([no])
fi
AC_SUBST(ENABLE_LTO)
AC_ARG_ENABLE(fuzz-options,
AS_HELP_STRING([--enable-fuzz-options],
[Randomly enable or disable each of those configurable options
that are supposed to be freely selectable without interdependencies,
or where bad interaction from interdependencies is automatically avoided.])
)
dnl ===================================================================
dnl When building for Android, --with-android-ndk and
dnl --with-android-sdk are mandatory
dnl ===================================================================
AC_ARG_WITH(android-ndk,
AS_HELP_STRING([--with-android-ndk],
[Specify location of the Android Native Development Kit. Mandatory when building for Android.]),
,)
AC_ARG_WITH(android-sdk,
AS_HELP_STRING([--with-android-sdk],
[Specify location of the Android SDK. Mandatory when building for Android.]),
,)
AC_ARG_WITH(android-api-level,
AS_HELP_STRING([--with-android-api-level],
[Specify the API level when building for Android. Defaults to 16 for ARM and x86 and to 21 for ARM64 and x86-64]),
,)
ANDROID_NDK_DIR=
if test -z "$with_android_ndk" -a -e "$SRC_ROOT/external/android-ndk" -a "$build" != "$host"; then
with_android_ndk="$SRC_ROOT/external/android-ndk"
fi
if test -n "$with_android_ndk"; then
eval ANDROID_NDK_DIR=$with_android_ndk
ANDROID_API_LEVEL=21
if test -n "$with_android_api_level" ; then
ANDROID_API_LEVEL="$with_android_api_level"
fi
if test $host_cpu = arm; then
LLVM_TRIPLE=armv7a-linux-androideabi
ANDROID_SYSROOT_PLATFORM=arm-linux-androideabi
ANDROID_APP_ABI=armeabi-v7a
ANDROIDCFLAGS="-mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8"
elif test $host_cpu = aarch64; then
LLVM_TRIPLE=aarch64-linux-android
ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
ANDROID_APP_ABI=arm64-v8a
elif test $host_cpu = x86_64; then
LLVM_TRIPLE=x86_64-linux-android
ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
ANDROID_APP_ABI=x86_64
else
# host_cpu is something like "i386" or "i686" I guess, NDK uses
# "x86" in some contexts
LLVM_TRIPLE=i686-linux-android
ANDROID_SYSROOT_PLATFORM=$LLVM_TRIPLE
ANDROID_APP_ABI=x86
fi
# Set up a lot of pre-canned defaults
if test ! -f $ANDROID_NDK_DIR/RELEASE.TXT; then
if test ! -f $ANDROID_NDK_DIR/source.properties; then
AC_MSG_ERROR([Unrecognized Android NDK. Missing RELEASE.TXT or source.properties file in $ANDROID_NDK_DIR.])
fi
ANDROID_NDK_VERSION=`sed -n -e 's/Pkg.Revision = //p' $ANDROID_NDK_DIR/source.properties`
else
ANDROID_NDK_VERSION=`cut -f1 -d' ' <$ANDROID_NDK_DIR/RELEASE.TXT`
fi
if test -z "$ANDROID_NDK_VERSION"; then
AC_MSG_ERROR([Failed to determine Android NDK version. Please check your installation.])
fi
case $ANDROID_NDK_VERSION in
r9*|r10*)
AC_MSG_ERROR([Building for Android requires NDK version >= 27.*])
;;
11.1.*|12.1.*|13.1.*|14.1.*|16.*|17.*|18.*|19.*|20.*|21.*|22.*|23.*|24.*|25.*|26.*)
AC_MSG_ERROR([Building for Android requires NDK version >= 27.*])
;;
27.*|28.*)
;;
*)
AC_MSG_WARN([Untested Android NDK version $ANDROID_NDK_VERSION, only versions 27.* to 28.* have been used successfully. Proceed at your own risk.])
add_warning "Untested Android NDK version $ANDROID_NDK_VERSION, only versions 27.* to 28.* have been used successfully. Proceed at your own risk."
;;
esac
AC_MSG_NOTICE([using the Android API level... $ANDROID_API_LEVEL])
# NDK 15 or later toolchain is 64bit-only, except for Windows that we don't support. Using a 64-bit
# linker is required if you compile large parts of the code with -g. A 32-bit linker just won't
# manage to link the (app-specific) single huge .so that is built for the app in
# android/source/ if there is debug information in a significant part of the object files.
# (A 64-bit ld.gold grows too much over 10 gigabytes of virtual space when linking such a .so if
# all objects have been built with debug information.)
case $build_os in
linux-gnu*)
android_HOST_TAG=linux-x86_64
;;
darwin*)
android_HOST_TAG=darwin-x86_64
;;
*)
AC_MSG_ERROR([We only support building for Android from Linux or macOS])
# ndk would also support windows and windows-x86_64
;;
esac
ANDROID_TOOLCHAIN=$ANDROID_NDK_DIR/toolchains/llvm/prebuilt/$android_HOST_TAG
ANDROID_COMPILER_BIN=$ANDROID_TOOLCHAIN/bin
test -z "$AR" && AR=$ANDROID_COMPILER_BIN/llvm-ar
test -z "$NM" && NM=$ANDROID_COMPILER_BIN/llvm-nm
test -z "$OBJDUMP" && OBJDUMP=$ANDROID_COMPILER_BIN/llvm-objdump
test -z "$RANLIB" && RANLIB=$ANDROID_COMPILER_BIN/llvm-ranlib
test -z "$STRIP" && STRIP=$ANDROID_COMPILER_BIN/llvm-strip
ANDROIDCFLAGS="$ANDROIDCFLAGS -target ${LLVM_TRIPLE}${ANDROID_API_LEVEL}"
ANDROIDCFLAGS="$ANDROIDCFLAGS -no-canonical-prefixes -ffunction-sections -fdata-sections -Qunused-arguments"
if test "$ENABLE_LTO" = TRUE; then
# -flto comes from com_GCC_defs.mk, too, but we need to make sure it gets passed as part of
# $CC and $CXX when building external libraries
ANDROIDCFLAGS="$ANDROIDCFLAGS -flto -fuse-linker-plugin -O2"
fi
ANDROIDCXXFLAGS="$ANDROIDCFLAGS -stdlib=libc++"
if test -z "$CC"; then
CC="$ANDROID_COMPILER_BIN/clang $ANDROIDCFLAGS"
CC_BASE="clang"
fi
if test -z "$CXX"; then
CXX="$ANDROID_COMPILER_BIN/clang++ $ANDROIDCXXFLAGS"
CXX_BASE="clang++"
fi
fi
AC_SUBST(ANDROID_NDK_DIR)
AC_SUBST(ANDROID_NDK_VERSION)
AC_SUBST(ANDROID_API_LEVEL)
AC_SUBST(ANDROID_APP_ABI)
AC_SUBST(ANDROID_SYSROOT_PLATFORM)
AC_SUBST(ANDROID_TOOLCHAIN)
dnl ===================================================================
dnl --with-android-sdk
dnl ===================================================================
ANDROID_SDK_DIR=
if test -z "$with_android_sdk" -a -e "$SRC_ROOT/external/android-sdk-linux" -a "$build" != "$host"; then
with_android_sdk="$SRC_ROOT/external/android-sdk-linux"
fi
if test -n "$with_android_sdk"; then
eval ANDROID_SDK_DIR=$with_android_sdk
PATH="$ANDROID_SDK_DIR/platform-tools:$ANDROID_SDK_DIR/tools:$PATH"
fi
AC_SUBST(ANDROID_SDK_DIR)
AC_ARG_ENABLE([android-lok],
AS_HELP_STRING([--enable-android-lok],
[The Android app from the android/ subdir needs several tweaks all
over the place that break the LOK when used in the Online-based
Android app. This switch indicates that the intent of this build is
actually the Online-based, non-modified LOK.])
)
ENABLE_ANDROID_LOK=
if test -n "$ANDROID_NDK_DIR" ; then
if test "$enable_android_lok" = yes; then
ENABLE_ANDROID_LOK=TRUE
AC_DEFINE(HAVE_FEATURE_ANDROID_LOK)
AC_MSG_NOTICE([building the Android version... for the Online-based Android app])
else
AC_MSG_NOTICE([building the Android version... for the app from the android/ subdir])
fi
fi
AC_SUBST([ENABLE_ANDROID_LOK])
libo_FUZZ_ARG_ENABLE([android-editing],
AS_HELP_STRING([--enable-android-editing],
[Enable the experimental editing feature on Android.])
)
ENABLE_ANDROID_EDITING=
if test "$enable_android_editing" = yes; then
ENABLE_ANDROID_EDITING=TRUE
fi
AC_SUBST([ENABLE_ANDROID_EDITING])
disable_database_connectivity_dependencies()
{
enable_evolution2=no
enable_firebird_sdbc=no
enable_mariadb_sdbc=no
enable_postgresql_sdbc=no
enable_report_builder=no
}
# ===================================================================
#
# Start initial platform setup
#
# The using_* variables reflect platform support and should not be
# changed after the "End initial platform setup" block.
# This is also true for most test_* variables.
# ===================================================================
build_crypto=yes
test_clucene=no
test_gdb_index=no
test_openldap=yes
test_split_debug=no
test_webdav=yes
usable_dlapi=yes
# There is currently just iOS not using salplug, so this explicitly enables it.
# must: using_freetype_fontconfig
# may: using_headless_plugin defaults to $using_freetype_fontconfig
# must: using_x11
# Default values, as such probably valid just for Linux, set
# differently below just for Mac OSX, but at least better than
# hardcoding these as we used to do. Much of this is duplicated also
# in solenv for old build system and for gbuild, ideally we should
# perhaps define stuff like this only here in configure.ac?
LINKFLAGSSHL="-shared"
PICSWITCH="-fpic"
DLLPOST=".so"
LINKFLAGSNOUNDEFS="-Wl,-z,defs"
INSTROOTBASESUFFIX=
INSTROOTCONTENTSUFFIX=
SDKDIRNAME=sdk
HOST_PLATFORM="$host"
host_cpu_for_clang="$host_cpu"
case "$host_os" in
solaris*)
using_freetype_fontconfig=yes
using_x11=yes
build_skia=yes
_os=SunOS
dnl ===========================================================
dnl Check whether we're using Solaris 10 - SPARC or Intel.
dnl ===========================================================
AC_MSG_CHECKING([the Solaris operating system release])
_os_release=`echo $host_os | $SED -e s/solaris2\.//`
if test "$_os_release" -lt "10"; then
AC_MSG_ERROR([use Solaris >= 10 to build LibreOffice])
else
AC_MSG_RESULT([ok ($_os_release)])
fi
dnl Check whether we're using a SPARC or i386 processor
AC_MSG_CHECKING([the processor type])
if test "$host_cpu" = "sparc" -o "$host_cpu" = "i386"; then
AC_MSG_RESULT([ok ($host_cpu)])
else
AC_MSG_ERROR([only SPARC and i386 processors are supported])
fi
;;
linux-gnu*|k*bsd*-gnu*|linux-musl*)
using_freetype_fontconfig=yes
using_x11=yes
build_skia=yes
test_gdb_index=yes
test_split_debug=yes
if test "$enable_fuzzers" = yes; then
test_system_freetype=no
fi
_os=Linux
;;
gnu)
using_freetype_fontconfig=yes
using_x11=no
_os=GNU
;;
cygwin*|wsl*)
# When building on Windows normally with MSVC under Cygwin,
# configure thinks that the host platform (the platform the
# built code will run on) is Cygwin, even if it obviously is
# Windows, which in Autoconf terminology is called
# "mingw32". (Which is misleading as MinGW is the name of the
# tool-chain, not an operating system.)
# Somewhat confusing, yes. But this configure script doesn't
# look at $host etc that much, it mostly uses its own $_os
# variable, set here in this case statement.
using_freetype_fontconfig=no
using_x11=no
test_unix_dlapi=no
test_openldap=no
enable_pagein=no
build_skia=yes
_os=WINNT
DLLPOST=".dll"
LINKFLAGSNOUNDEFS=
# bypass check for ninja, it is not in default path, but it can be used nevertheless by default
NINJA="assumed to be available from Visual Studio"
if test "$host_cpu" = "aarch64"; then
build_skia=yes
enable_gpgmepp=no
enable_coinmp=no
enable_firebird_sdbc=no
fi
;;
darwin*) # macOS
using_freetype_fontconfig=no
using_x11=no
build_skia=yes
enable_pagein=no
if test -n "$LODE_HOME" ; then
mac_sanitize_path
AC_MSG_NOTICE([sanitized the PATH to $PATH])
fi
_os=Darwin
INSTROOTBASESUFFIX=/$PRODUCTNAME_WITHOUT_SPACES.app
INSTROOTCONTENTSUFFIX=/Contents
SDKDIRNAME=${PRODUCTNAME_WITHOUT_SPACES}${PRODUCTVERSION}_SDK
# See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
LINKFLAGSSHL="-dynamiclib"
# -fPIC is default
PICSWITCH=""
DLLPOST=".dylib"
# -undefined error is the default
LINKFLAGSNOUNDEFS=""
case "$host_cpu" in
aarch64|arm64)
# Apple's Clang uses "arm64"
host_cpu_for_clang=arm64
esac
;;
ios*) # iOS
using_freetype_fontconfig=no
using_x11=no
build_crypto=no
test_libcmis=no
test_openldap=no
test_webdav=no
with_gssapi=no
if test -n "$LODE_HOME" ; then
mac_sanitize_path
AC_MSG_NOTICE([sanitized the PATH to $PATH])
fi
enable_gpgmepp=no
_os=iOS
enable_mpl_subset=yes
enable_lotuswordpro=no
disable_database_connectivity_dependencies
enable_coinmp=no
enable_lpsolve=no
enable_extension_integration=no
enable_xmlhelp=no
with_ppds=no
if test "$enable_ios_simulator" = "yes"; then
host=x86_64-apple-darwin
fi
# See "Default values, as such probably valid just for Linux" comment above the case "$host_os"
LINKFLAGSSHL="-dynamiclib"
# -fPIC is default
PICSWITCH=""
DLLPOST=".dylib"
# -undefined error is the default
LINKFLAGSNOUNDEFS=""
# HOST_PLATFORM is used for external projects and their configury typically doesn't like the "ios"
# part, so use aarch64-apple-darwin for now.
HOST_PLATFORM=aarch64-apple-darwin
# Apple's Clang uses "arm64"
host_cpu_for_clang=arm64
;;
freebsd*)
using_freetype_fontconfig=yes
using_x11=yes
build_skia=yes
AC_MSG_CHECKING([the FreeBSD operating system release])
if test -n "$with_os_version"; then
OSVERSION="$with_os_version"
else
OSVERSION=`/sbin/sysctl -n kern.osreldate`
fi
AC_MSG_RESULT([found OSVERSION=$OSVERSION])
AC_MSG_CHECKING([which thread library to use])
if test "$OSVERSION" -lt "500016"; then
PTHREAD_CFLAGS="-D_THREAD_SAFE"
PTHREAD_LIBS="-pthread"
elif test "$OSVERSION" -lt "502102"; then
PTHREAD_CFLAGS="-D_THREAD_SAFE"
PTHREAD_LIBS="-lc_r"
else
PTHREAD_CFLAGS=""
PTHREAD_LIBS="-pthread"
fi
AC_MSG_RESULT([$PTHREAD_LIBS])
_os=FreeBSD
;;
*netbsd*)
using_freetype_fontconfig=yes
using_x11=yes
test_gtk3_kde5=no
build_skia=yes
PTHREAD_LIBS="-pthread -lpthread"
_os=NetBSD
;;
openbsd*)
using_freetype_fontconfig=yes
using_x11=yes
PTHREAD_CFLAGS="-D_THREAD_SAFE"
PTHREAD_LIBS="-pthread"
_os=OpenBSD
;;
dragonfly*)
using_freetype_fontconfig=yes
using_x11=yes
build_skia=yes
PTHREAD_LIBS="-pthread"
_os=DragonFly
;;
linux-android*)
# API exists, but seems not really usable since Android 7 AFAIK
usable_dlapi=no
using_freetype_fontconfig=yes
using_headless_plugin=no
using_x11=no
build_crypto=no
test_openldap=no
test_system_freetype=no
test_webdav=no
with_gssapi=no
disable_database_connectivity_dependencies
enable_lotuswordpro=no
enable_mpl_subset=yes
enable_cairo_canvas=no
enable_coinmp=yes
enable_lpsolve=no
enable_odk=no
enable_python=no
enable_xmlhelp=no
_os=Android
;;
haiku*)
using_freetype_fontconfig=yes
using_x11=no
test_gtk3=no
test_gtk3_kde5=no
test_kf5=yes
test_kf6=yes
enable_odk=no
enable_coinmp=no
enable_pdfium=no
enable_sdremote=no
enable_postgresql_sdbc=no
enable_firebird_sdbc=no
_os=Haiku
;;
emscripten)
# API currently just exists in headers, not code
usable_dlapi=no
using_freetype_fontconfig=yes
using_x11=yes
test_openldap=no
test_qt5=yes
test_split_debug=yes
test_system_freetype=no
enable_compiler_plugins=no
enable_customtarget_components=yes
enable_split_debug=yes
enable_wasm_strip=yes
with_system_zlib=no
with_theme="colibre"
_os=Emscripten
;;
*)
AC_MSG_ERROR([$host_os operating system is not suitable to build LibreOffice for!])
;;
esac
AC_SUBST(HOST_PLATFORM)
if test -z "$using_x11" -o -z "$using_freetype_fontconfig"; then
AC_MSG_ERROR([You must set \$using_freetype_fontconfig and \$using_x11 for your platform])
fi
# Set defaults, if not set by platform
test "${test_cpdb+set}" = set || test_cpdb="$using_x11"
test "${test_cups+set}" = set || test_cups="$using_x11"
test "${test_dbus+set}" = set || test_dbus="$using_x11"
test "${test_gen+set}" = set || test_gen="$using_x11"
test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11"
test "${test_gtk3+set}" = set || test_gtk3="$using_x11"
test "${test_gtk4+set}" = set || test_gtk4="$using_x11"
test "${test_kf5+set}" = set || test_kf5="$using_x11"
test "${test_kf6+set}" = set || test_kf6="$using_x11"
# don't handle test_qt5, so it can disable test_kf5 later
test "${test_qt6+set}" = set || test_qt6="$using_x11"
test "${test_randr+set}" = set || test_randr="$using_x11"
test "${test_xrender+set}" = set || test_xrender="$using_x11"
test "${using_headless_plugin+set}" = set || using_headless_plugin="$using_freetype_fontconfig"
test "${test_gtk3_kde5+set}" != set -a "$test_kf5" = yes -a "$test_gtk3" = yes && test_gtk3_kde5="yes"
# Make sure fontconfig and freetype test both either system or not
test "${test_system_fontconfig+set}" != set -a "${test_system_freetype+set}" = set && test_system_fontconfig="$test_system_freetype"
test "${test_system_freetype+set}" != set -a "${test_system_fontconfig+set}" = set && test_system_freetype="$test_system_fontconfig"
# convenience / platform overriding "fixes"
# Don't sort!
test "$test_kf5" = yes -a "$test_qt5" = no && test_kf5=no
test "$test_kf5" = yes && test_qt5=yes
test "$test_gtk3" != yes && enable_gtk3=no
test "$test_gtk3" != yes -o "$test_kf5" != yes && test_gtk3_kde5=no
test "$using_freetype_fontconfig" = no && using_headless_plugin=no
test "$using_freetype_fontconfig" = yes && test_cairo=yes
# Keep in sync with the above $using_x11 depending test default list
disable_x11_tests()
{
test_cpdb=no
test_cups=no
test_dbus=no
test_gen=no
test_gstreamer_1_0=no
test_gtk3_kde5=no
test_gtk3=no
test_gtk4=no
test_kf5=no
test_kf6=no
test_qt5=no
test_qt6=no
test_randr=no
test_xrender=no
}
test "$using_x11" = yes && USING_X11=TRUE
if test "$using_freetype_fontconfig" = yes; then
AC_DEFINE(USE_HEADLESS_CODE)
USE_HEADLESS_CODE=TRUE
if test "$using_headless_plugin" = yes; then
AC_DEFINE(ENABLE_HEADLESS)
ENABLE_HEADLESS=TRUE
fi
else
test_fontconfig=no
test_freetype=no
fi
AC_SUBST(ENABLE_HEADLESS)
AC_SUBST(USE_HEADLESS_CODE)
AC_MSG_NOTICE([VCL platform has a usable dynamic loading API: $usable_dlapi])
AC_MSG_NOTICE([VCL platform uses freetype+fontconfig: $using_freetype_fontconfig])
AC_MSG_NOTICE([VCL platform uses headless plugin: $using_headless_plugin])
AC_MSG_NOTICE([VCL platform uses X11: $using_x11])
# ===================================================================
#
# End initial platform setup
#
# ===================================================================
if test "$_os" = "Android" ; then
# Verify that the NDK and SDK options are proper
if test -z "$with_android_ndk"; then
AC_MSG_ERROR([the --with-android-ndk option is mandatory, unless it is available at external/android-ndk/.])
elif test ! -f "$ANDROID_NDK_DIR/meta/abis.json"; then
AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
fi
if test -z "$ANDROID_SDK_DIR"; then
AC_MSG_ERROR([the --with-android-sdk option is mandatory, unless it is available at external/android-sdk-linux/.])
elif test ! -d "$ANDROID_SDK_DIR/platforms"; then
AC_MSG_ERROR([the --with-android-sdk option does not point to an Android SDK])
fi
fi
AC_SUBST(SDKDIRNAME)
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_LIBS)
# Check for explicit A/C/CXX/OBJC/OBJCXX/LDFLAGS.
# By default use the ones specified by our build system,
# but explicit override is possible.
AC_MSG_CHECKING(for explicit AFLAGS)
if test -n "$AFLAGS"; then
AC_MSG_RESULT([$AFLAGS])
x_AFLAGS=
else
AC_MSG_RESULT(no)
x_AFLAGS=[\#]
fi
AC_MSG_CHECKING(for explicit CFLAGS)
if test -n "$CFLAGS"; then
AC_MSG_RESULT([$CFLAGS])
x_CFLAGS=
else
AC_MSG_RESULT(no)
x_CFLAGS=[\#]
fi
AC_MSG_CHECKING(for explicit CXXFLAGS)
if test -n "$CXXFLAGS"; then
AC_MSG_RESULT([$CXXFLAGS])
x_CXXFLAGS=
else
AC_MSG_RESULT(no)
x_CXXFLAGS=[\#]
fi
AC_MSG_CHECKING(for explicit OBJCFLAGS)
if test -n "$OBJCFLAGS"; then
AC_MSG_RESULT([$OBJCFLAGS])
x_OBJCFLAGS=
else
AC_MSG_RESULT(no)
x_OBJCFLAGS=[\#]
fi
AC_MSG_CHECKING(for explicit OBJCXXFLAGS)
if test -n "$OBJCXXFLAGS"; then
AC_MSG_RESULT([$OBJCXXFLAGS])
x_OBJCXXFLAGS=
else
AC_MSG_RESULT(no)
x_OBJCXXFLAGS=[\#]
fi
AC_MSG_CHECKING(for explicit LDFLAGS)
if test -n "$LDFLAGS"; then
AC_MSG_RESULT([$LDFLAGS])
x_LDFLAGS=
else
AC_MSG_RESULT(no)
x_LDFLAGS=[\#]
fi
AC_SUBST(AFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(CXXFLAGS)
AC_SUBST(OBJCFLAGS)
AC_SUBST(OBJCXXFLAGS)
AC_SUBST(LDFLAGS)
AC_SUBST(x_AFLAGS)
AC_SUBST(x_CFLAGS)
AC_SUBST(x_CXXFLAGS)
AC_SUBST(x_OBJCFLAGS)
AC_SUBST(x_OBJCXXFLAGS)
AC_SUBST(x_LDFLAGS)
dnl These are potentially set for MSVC, in the code checking for UCRT below:
my_original_CFLAGS=$CFLAGS
my_original_CXXFLAGS=$CXXFLAGS
my_original_CPPFLAGS=$CPPFLAGS
dnl The following checks for gcc, cc and then cl (if it weren't guarded for win32)
dnl Needs to precede the AC_C_BIGENDIAN and AC_SEARCH_LIBS calls below, which apparently call
dnl AC_PROG_CC internally.
if test "$_os" != "WINNT"; then
# AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that (and avoid -O2 during AC_PROG_CC,
# Clang 12.0.1 occasionally SEGVs on some of the test invocations during AC_PROG_CC with -O2):
save_CFLAGS=$CFLAGS
CFLAGS=-g
AC_PROG_CC
CFLAGS=$save_CFLAGS
if test -z "$CC_BASE"; then
CC_BASE=`first_arg_basename "$CC"`
fi
fi
if test "$_os" != "WINNT"; then
AC_C_BIGENDIAN([ENDIANNESS=big], [ENDIANNESS=little])
else
ENDIANNESS=little
fi
AC_SUBST(ENDIANNESS)
if test "$usable_dlapi" != no; then
AC_DEFINE([HAVE_DLAPI])
if test "$test_unix_dlapi" != no; then
save_LIBS="$LIBS"
AC_SEARCH_LIBS([dlsym], [dl],
[case "$ac_cv_search_dlsym" in -l*) UNIX_DLAPI_LIBS="$ac_cv_search_dlsym";; esac],
[AC_MSG_ERROR([dlsym not found in either libc nor libdl])])
LIBS="$save_LIBS"
AC_DEFINE([HAVE_UNIX_DLAPI])
fi
fi
AC_SUBST(UNIX_DLAPI_LIBS)
# Check for a (GNU) backtrace implementation
AC_ARG_VAR([BACKTRACE_CFLAGS], [Compiler flags needed to use backtrace(3)])
AC_ARG_VAR([BACKTRACE_LIBS], [Linker flags needed to use backtrace(3)])
AS_IF([test "x$BACKTRACE_LIBS$BACKTRACE_CFLAGS" = x], [
save_LIBS="$LIBS"
AC_SEARCH_LIBS([backtrace], [libexecinfo],
[case "$ac_cv_search_backtrace" in -l*) BACKTRACE_LIBS="$ac_cv_search_backtrace";; esac],
[PKG_CHECK_MODULES([BACKTRACE], [libexecinfo], [ac_cv_search_backtrace=], [:])])
LIBS="$save_LIBS"
])
AS_IF([test "x$ac_cv_search_backtrace" != xno ], [
AC_DEFINE([HAVE_FEATURE_BACKTRACE])
])
dnl ===================================================================
dnl Sanity checks for Emscripten SDK setup
dnl ===================================================================
EMSCRIPTEN_MIN_MAJOR=3
EMSCRIPTEN_MIN_MINOR=1
EMSCRIPTEN_MIN_TINY=46
EMSCRIPTEN_MIN_VERSION="${EMSCRIPTEN_MIN_MAJOR}.${EMSCRIPTEN_MIN_MINOR}.${EMSCRIPTEN_MIN_TINY}"
EMSCRIPTEN_WORKERJS=
if test "$_os" = "Emscripten"; then
AC_MSG_CHECKING([if Emscripten is at least $EMSCRIPTEN_MIN_VERSION])
if test -z "$EMSCRIPTEN_VERSION_H"; then
AS_IF([test -z "$EMSDK"],
[AC_MSG_ERROR([No \$EMSDK environment variable.])])
EMSCRIPTEN_VERSION_H=$EMSDK/upstream/emscripten/cache/sysroot/include/emscripten/version.h
if test ! -f "$EMSCRIPTEN_VERSION_H"; then
EMSCRIPTEN_VERSION_H=$EMSDK/emscripten/main/cache/sysroot/include/emscripten/version.h
fi
fi
if test -f "$EMSCRIPTEN_VERSION_H"; then
EMSCRIPTEN_MAJOR=$($GREP __EMSCRIPTEN_major__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
EMSCRIPTEN_MINOR=$($GREP __EMSCRIPTEN_minor__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
EMSCRIPTEN_TINY=$($GREP __EMSCRIPTEN_tiny__ "$EMSCRIPTEN_VERSION_H" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
else
EMSCRIPTEN_DEFINES=$(echo | emcc -dM -E - | $GREP __EMSCRIPTEN_)
EMSCRIPTEN_MAJOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_major__ //p')
EMSCRIPTEN_MINOR=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_minor__ //p')
EMSCRIPTEN_TINY=$(echo "$EMSCRIPTEN_DEFINES" | $SED -ne 's/.*__EMSCRIPTEN_tiny__ //p')
fi
EMSCRIPTEN_VERSION="${EMSCRIPTEN_MAJOR}.${EMSCRIPTEN_MINOR}.${EMSCRIPTEN_TINY}"
check_semantic_version_three_prefixed EMSCRIPTEN MIN
if test $? -eq 0; then
AC_MSG_RESULT([yes ($EMSCRIPTEN_VERSION)])
else
AC_MSG_ERROR([no, found $EMSCRIPTEN_VERSION])
fi
EMSCRIPTEN_ERROR=0
if ! command -v emconfigure >/dev/null 2>&1; then
AC_MSG_WARN([emconfigure must be in your \$PATH])
EMSCRIPTEN_ERROR=1
fi
if test -z "$EMMAKEN_JUST_CONFIGURE"; then
AC_MSG_WARN(["\$EMMAKEN_JUST_CONFIGURE wasn't set by emconfigure. Prefix configure or use autogen.sh])
EMSCRIPTEN_ERROR=1
fi
EMSDK_FILE_PACKAGER="$(em-config EMSCRIPTEN_ROOT)"/tools/file_packager
if ! test -x "$EMSDK_FILE_PACKAGER"; then
AC_MSG_WARN([No file_packager found in $(em-config EMSCRIPTEN_ROOT)/tools/file_packager.])
EMSCRIPTEN_ERROR=1
fi
if test $EMSCRIPTEN_ERROR -ne 0; then
AC_MSG_ERROR(["Please fix your EMSDK setup to build with Emscripten!"])
fi
dnl Some build-side things are conditional on "EMSCRIPTEN in BUILD_TYPE_FOR_HOST":
BUILD_TYPE="$BUILD_TYPE EMSCRIPTEN"
dnl Generation of .worker.js files has been dropped completely from Emscripten 3.1.68, and the
dnl generated files were just unused dummies since Emscripten 3.1.58:
AC_MSG_CHECKING([if Emscripten still depends on a separate .worker.js file])
check_semantic_version_three 3 1 58 "$EMSCRIPTEN_MAJOR" "$EMSCRIPTEN_MINOR" "$EMSCRIPTEN_TINY"
if test $? -ne 0; then
AC_MSG_RESULT([yes])
EMSCRIPTEN_WORKERJS=TRUE
else
AC_MSG_RESULT([no])
fi
fi
AC_SUBST(EMSDK_FILE_PACKAGER)
AC_SUBST(EMSCRIPTEN_EXTRA_QTLOADER_CONFIG)
AC_SUBST(EMSCRIPTEN_EXTRA_SOFFICE_PRE_JS)
AC_SUBST(EMSCRIPTEN_WORKERJS)
###############################################################################
# Extensions switches --enable/--disable
###############################################################################
# By default these should be enabled unless having extra dependencies.
# If there is extra dependency over configure options then the enable should
# be automagic based on whether the requiring feature is enabled or not.
# All this options change anything only with --enable-extension-integration.
# The name of this option and its help string makes it sound as if
# extensions are built anyway, just not integrated in the installer,
# if you use --disable-extension-integration. Is that really the
# case?
AC_ARG_ENABLE(ios-simulator,
AS_HELP_STRING([--enable-ios-simulator],
[build for iOS simulator])
)
libo_FUZZ_ARG_ENABLE(extension-integration,
AS_HELP_STRING([--disable-extension-integration],
[Disable integration of the built extensions in the installer of the
product. Use this switch to disable the integration.])
)
AC_ARG_ENABLE(avmedia,
AS_HELP_STRING([--disable-avmedia],
[Disable displaying and inserting AV media in documents. Work in progress, use only if you are hacking on it.]),
,test "${enable_avmedia+set}" = set || enable_avmedia=yes)
AC_ARG_ENABLE(database-connectivity,
AS_HELP_STRING([--disable-database-connectivity],
[Disable various database connectivity. Work in progress, use only if you are hacking on it.])
)
# This doesn't mean not building (or "integrating") extensions
# (although it probably should; i.e. it should imply
# --disable-extension-integration I guess), it means not supporting
# any extension mechanism at all
libo_FUZZ_ARG_ENABLE(extensions,
AS_HELP_STRING([--disable-extensions],
[Disable all add-on extension functionality. Work in progress, use only if you are hacking on it.])
)
AC_ARG_ENABLE(scripting,
AS_HELP_STRING([--disable-scripting],
[Disable BASIC, Java, Python and .NET. Work in progress, use only if you are hacking on it.]),
,test "${enable_scripting+set}" = set || enable_scripting=yes)
# This is mainly for Android and iOS, but could potentially be used in some
# special case otherwise, too, so factored out as a separate setting
AC_ARG_ENABLE(dynamic-loading,
AS_HELP_STRING([--disable-dynamic-loading],
[Disable any use of dynamic loading of code. Work in progress, use only if you are hacking on it.])
)
libo_FUZZ_ARG_ENABLE(report-builder,
AS_HELP_STRING([--disable-report-builder],
[Disable the Report Builder.])
)
libo_FUZZ_ARG_ENABLE(ext-wiki-publisher,
AS_HELP_STRING([--enable-ext-wiki-publisher],
[Enable the Wiki Publisher extension.])
)
libo_FUZZ_ARG_ENABLE(lpsolve,
AS_HELP_STRING([--disable-lpsolve],
[Disable compilation of the lp solve solver ])
)
libo_FUZZ_ARG_ENABLE(coinmp,
AS_HELP_STRING([--disable-coinmp],
[Disable compilation of the CoinMP solver ])
)
libo_FUZZ_ARG_ENABLE(pdfimport,
AS_HELP_STRING([--disable-pdfimport],
[Disable building the PDF import feature.])
)
libo_FUZZ_ARG_ENABLE(pdfium,
AS_HELP_STRING([--disable-pdfium],
[Disable building PDFium. Results in insecure PDF signature verification.])
)
libo_FUZZ_ARG_ENABLE(skia,
AS_HELP_STRING([--disable-skia],
[Disable building Skia. Use --enable-skia=debug to build without optimizations.])
)
libo_FUZZ_ARG_ENABLE(skia-vulkan-validation,
AS_HELP_STRING([--enable-skia-vulkan-validation],
[Enable Vulkan validation layers under Skia. The Vulkan SDK must be installed externally.])
)
###############################################################################
dnl ---------- *** ----------
libo_FUZZ_ARG_ENABLE(mergelibs,
AS_HELP_STRING([--enable-mergelibs=yes/no/more],
[Merge several of the smaller libraries into one big "merged" library.
The "more" option will link even more of the smaller libraries.
"more" not appropriate for distros which split up LibreOffice into multiple packages.
It is only appropriate for situations where all of LO is delivered in a single install/package. ])
)
libo_FUZZ_ARG_ENABLE(breakpad,
AS_HELP_STRING([--enable-breakpad],
[Enables breakpad for crash reporting.])
)
libo_FUZZ_ARG_ENABLE(crashdump,
AS_HELP_STRING([--disable-crashdump],
[Disable dump.ini and dump-file, when --enable-breakpad])
)
AC_ARG_ENABLE(fetch-external,
AS_HELP_STRING([--disable-fetch-external],
[Disables fetching external tarballs from web sources.])
)
AC_ARG_ENABLE(fuzzers,
AS_HELP_STRING([--enable-fuzzers],
[Enables building libfuzzer targets for fuzz testing.])
)
libo_FUZZ_ARG_ENABLE(pch,
AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>],
[Enables precompiled header support for C++. Forced default on Windows/VC build.
Using 'system' will include only external headers, 'base' will add also headers
from base modules, 'normal' will also add all headers except from the module built,
'full' will use all suitable headers even from a module itself.])
)
libo_FUZZ_ARG_ENABLE(epm,
AS_HELP_STRING([--enable-epm],
[LibreOffice includes self-packaging code, that requires epm, however epm is
useless for large scale package building.])
)
libo_FUZZ_ARG_ENABLE(odk,
AS_HELP_STRING([--enable-odk],
[Enable building the Office Development Kit, the part that extensions need to build against])
)
AC_ARG_ENABLE(mpl-subset,
AS_HELP_STRING([--enable-mpl-subset],
[Don't compile any pieces which are not MPL or more liberally licensed])
)
libo_FUZZ_ARG_ENABLE(evolution2,
AS_HELP_STRING([--enable-evolution2],
[Allows the built-in evolution 2 addressbook connectivity build to be
enabled.])
)
AC_ARG_ENABLE(avahi,
AS_HELP_STRING([--enable-avahi],
[Determines whether to use Avahi to advertise Impress to remote controls.])
)
AC_ARG_ENABLE(msvc-analyze,
AS_HELP_STRING([--enable-msvc-analyze],
[Determines whether to enable the Microsoft Visual Studio /analyze flag to provide additional warnings.])
)
libo_FUZZ_ARG_ENABLE(werror,
AS_HELP_STRING([--enable-werror],
[Turn warnings to errors. (Has no effect in modules where the treating
of warnings as errors is disabled explicitly.)]),
,)
libo_FUZZ_ARG_ENABLE(assert-always-abort,
AS_HELP_STRING([--enable-assert-always-abort],
[make assert() failures abort even when building without --enable-debug or --enable-dbgutil.]),
,)
libo_FUZZ_ARG_ENABLE(dbgutil,
AS_HELP_STRING([--enable-dbgutil],
[Provide debugging support from --enable-debug and include additional debugging
utilities such as object counting or more expensive checks.
This is the recommended option for developers.
Note that this makes the build ABI incompatible, it is not possible to mix object
files or libraries from a --enable-dbgutil and a --disable-dbgutil build.]))
libo_FUZZ_ARG_ENABLE(debug,
AS_HELP_STRING([--enable-debug],
[Include debugging information, disable compiler optimization and inlining plus
extra debugging code like assertions. Extra large build! (enables -g compiler flag).]))
libo_FUZZ_ARG_ENABLE(split-debug,
AS_HELP_STRING([--disable-split-debug],
[Disable using split debug information (-gsplit-dwarf compile flag). Split debug information
saves disk space and build time, but requires tools that support it (both build tools and debuggers).]))
libo_FUZZ_ARG_ENABLE(gdb-index,
AS_HELP_STRING([--disable-gdb-index],
[Disables creating debug information in the gdb index format, which makes gdb start faster.
The feature requires a linker that supports the --gdb-index option.]))
libo_FUZZ_ARG_ENABLE(sal-log,
AS_HELP_STRING([--enable-sal-log],
[Make SAL_INFO and SAL_WARN calls do something even in a non-debug build.]))
libo_FUZZ_ARG_ENABLE(symbols,
AS_HELP_STRING([--enable-symbols],
[Generate debug information.
By default, enabled for --enable-debug and --enable-dbgutil, disabled
otherwise. It is possible to explicitly specify gbuild build targets
(where 'all' means everything, '-' prepended means to not enable, '/' appended means
everything in the directory; there is no ordering, more specific overrides
more general, and disabling takes precedence).
Example: --enable-symbols="all -sw/ -Library_sc".]))
libo_FUZZ_ARG_ENABLE(optimized,
AS_HELP_STRING([--enable-optimized=<yes/no/debug>],
[Whether to compile with optimization flags.
By default, disabled for --enable-debug and --enable-dbgutil, enabled
otherwise. Using 'debug' will try to use only optimizations that should
not interfere with debugging. For Emscripten we default to optimized (-O1)
debug build, as otherwise binaries become too large.]))
libo_FUZZ_ARG_ENABLE(runtime-optimizations,
AS_HELP_STRING([--disable-runtime-optimizations],
[Statically disable certain runtime optimizations (like rtl/alloc.h or
JVM JIT) that are known to interact badly with certain dynamic analysis
tools (like -fsanitize=address or Valgrind). By default, disabled iff
CC contains "-fsanitize=*". (For Valgrind, those runtime optimizations
are typically disabled dynamically via RUNNING_ON_VALGRIND.)]))
AC_ARG_WITH(valgrind,
AS_HELP_STRING([--with-valgrind],
[Make availability of Valgrind headers a hard requirement.]))
libo_FUZZ_ARG_ENABLE(compiler-plugins,
AS_HELP_STRING([--enable-compiler-plugins],
[Enable compiler plugins that will perform additional checks during
building. Enabled automatically by --enable-dbgutil.
Use --enable-compiler-plugins=debug to also enable debug code in the plugins.]))
COMPILER_PLUGINS_DEBUG=
if test "$enable_compiler_plugins" = debug; then
enable_compiler_plugins=yes
COMPILER_PLUGINS_DEBUG=TRUE
fi
libo_FUZZ_ARG_ENABLE(compiler-plugins-analyzer-pch,
AS_HELP_STRING([--disable-compiler-plugins-analyzer-pch],
[Disable use of precompiled headers when running the Clang compiler plugin analyzer. Not
relevant in the --disable-compiler-plugins case.]))
libo_FUZZ_ARG_ENABLE(ooenv,
AS_HELP_STRING([--enable-ooenv],
[Enable ooenv for the instdir installation.]))
AC_ARG_ENABLE(lto,
AS_HELP_STRING([--enable-lto],
[Enable link-time optimization. Suitable for (optimised) product builds. Building might take
longer but libraries and executables are optimized for speed. For GCC, best to use the 'gold'
linker.)]))
AC_ARG_ENABLE(python,
AS_HELP_STRING([--enable-python=<no/auto/system/internal/fully-internal>],
[Enables or disables Python support at run-time.
Also specifies what Python to use at build-time.
'fully-internal' even forces the internal version for uses of Python
during the build.
On macOS the only choices are
'internal' (default) or 'fully-internal'. Otherwise the default is 'auto'.
]))
libo_FUZZ_ARG_ENABLE(gtk3,
AS_HELP_STRING([--disable-gtk3],
[Determines whether to use Gtk+ 3.0 vclplug on platforms where Gtk+ 3.0 is available.]),
,test "${test_gtk3}" = no -o "${enable_gtk3+set}" = set || enable_gtk3=yes)
AC_ARG_ENABLE(gtk4,
AS_HELP_STRING([--enable-gtk4],
[Determines whether to use Gtk+ 4.0 vclplug on platforms where Gtk+ 4.0 is available.]))
AC_ARG_ENABLE(atspi-tests,
AS_HELP_STRING([--disable-atspi-tests],
--> --------------------
--> maximum size reached
--> --------------------
[ Dauer der Verarbeitung: 0.54 Sekunden
(vorverarbeitet)
]
|
2026-03-28
|