2007-12-08 23:42:33 +01:00
|
|
|
# -*- Autoconf -*-
|
|
|
|
# Process this file with autoconf to produce a configure script.
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
#
|
2009-04-13 10:27:40 +02:00
|
|
|
# Author: Lasse Collin
|
2007-12-08 23:42:33 +01:00
|
|
|
#
|
2009-04-13 10:27:40 +02:00
|
|
|
# This file has been put into the public domain.
|
|
|
|
# You can do whatever you want with this file.
|
2007-12-08 23:42:33 +01:00
|
|
|
#
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# NOTE: Don't add useless checks. autoscan detects this and that, but don't
|
|
|
|
# let it confuse you. For example, we don't care about checking for behavior
|
|
|
|
# of malloc(), stat(), or lstat(), since we don't use those functions in
|
|
|
|
# a way that would cause the problems the autoconf macros check.
|
|
|
|
|
2020-02-15 14:07:11 +01:00
|
|
|
AC_PREREQ([2.69])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2010-09-28 09:59:53 +02:00
|
|
|
AC_INIT([XZ Utils], m4_esyscmd([/bin/sh build-aux/version.sh]),
|
2017-04-19 21:17:35 +02:00
|
|
|
[lasse.collin@tukaani.org], [xz], [https://tukaani.org/xz/])
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_CONFIG_SRCDIR([src/liblzma/common/common.h])
|
2009-07-18 17:54:55 +02:00
|
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
2009-03-01 08:00:06 +01:00
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
2022-10-25 22:45:03 +02:00
|
|
|
AC_CONFIG_HEADERS([config.h])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
echo
|
2008-12-12 23:54:11 +01:00
|
|
|
echo "$PACKAGE_STRING"
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo "System type:"
|
|
|
|
# This is needed to know if assembler optimizations can be used.
|
|
|
|
AC_CANONICAL_HOST
|
|
|
|
|
2009-06-30 16:09:57 +02:00
|
|
|
# We do some special things on Windows (32-bit or 64-bit) builds.
|
|
|
|
case $host_os in
|
2015-08-11 12:23:04 +02:00
|
|
|
mingw* | cygwin | msys) is_w32=yes ;;
|
|
|
|
*) is_w32=no ;;
|
2009-06-30 16:09:57 +02:00
|
|
|
esac
|
|
|
|
AM_CONDITIONAL([COND_W32], [test "$is_w32" = yes])
|
|
|
|
|
2009-09-11 09:24:09 +02:00
|
|
|
# We need to use $EXEEXT with $(LN_S) when creating symlinks to
|
|
|
|
# executables. Cygwin is an exception to this, since it is recommended
|
|
|
|
# that symlinks don't have the .exe suffix. To make this work, we
|
|
|
|
# define LN_EXEEXT.
|
2015-08-11 12:21:52 +02:00
|
|
|
#
|
|
|
|
# MSYS2 is treated the same way as Cygwin. It uses plain "msys" like
|
|
|
|
# the original MSYS when building MSYS/MSYS2-binaries. Hopefully this
|
|
|
|
# doesn't break things for the original MSYS developers. Note that this
|
|
|
|
# doesn't affect normal MSYS/MSYS2 users building non-MSYS/MSYS2 binaries
|
|
|
|
# since in that case the $host_os is usually mingw32.
|
2009-09-11 09:24:09 +02:00
|
|
|
case $host_os in
|
2015-08-11 12:21:52 +02:00
|
|
|
cygwin | msys) LN_EXEEXT= ;;
|
|
|
|
*) LN_EXEEXT='$(EXEEXT)' ;;
|
2009-09-11 09:24:09 +02:00
|
|
|
esac
|
|
|
|
AC_SUBST([LN_EXEEXT])
|
2008-08-28 21:53:15 +02:00
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
echo
|
|
|
|
echo "Configure options:"
|
2009-02-09 13:54:31 +01:00
|
|
|
AM_CFLAGS=
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
|
|
|
|
#############
|
|
|
|
# Debugging #
|
|
|
|
#############
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_CHECKING([if debugging code should be compiled])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [Enable debugging code.]),
|
2007-12-08 23:42:33 +01:00
|
|
|
[], enable_debug=no)
|
|
|
|
if test "x$enable_debug" = xyes; then
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
2008-12-30 23:57:27 +01:00
|
|
|
AC_DEFINE([NDEBUG], [1], [Define to 1 to disable debugging code.])
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
|
|
|
|
###########
|
|
|
|
# Filters #
|
|
|
|
###########
|
|
|
|
|
2010-05-26 08:55:47 +02:00
|
|
|
m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,sparc])dnl
|
2008-08-28 21:53:15 +02:00
|
|
|
m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,sparc])
|
2008-09-27 18:09:21 +02:00
|
|
|
m4_define([LZ_FILTERS], [lzma1,lzma2])
|
2008-08-28 21:53:15 +02:00
|
|
|
|
|
|
|
m4_foreach([NAME], [SUPPORTED_FILTERS],
|
|
|
|
[enable_filter_[]NAME=no
|
|
|
|
enable_encoder_[]NAME=no
|
|
|
|
enable_decoder_[]NAME=no
|
|
|
|
])dnl
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([which encoders to build])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([encoders], AS_HELP_STRING([--enable-encoders=LIST],
|
2008-08-28 21:53:15 +02:00
|
|
|
[Comma-separated list of encoders to build. Default=all.
|
|
|
|
Available encoders:]
|
|
|
|
m4_translit(m4_defn([SUPPORTED_FILTERS]), [,], [ ])),
|
|
|
|
[], [enable_encoders=SUPPORTED_FILTERS])
|
2010-05-26 08:55:47 +02:00
|
|
|
enable_encoders=`echo "$enable_encoders" | sed 's/,/ /g'`
|
2008-08-28 21:53:15 +02:00
|
|
|
if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then
|
2015-11-03 19:35:19 +01:00
|
|
|
enable_encoders=no
|
2008-08-28 21:53:15 +02:00
|
|
|
AC_MSG_RESULT([(none)])
|
2007-12-08 23:42:33 +01:00
|
|
|
else
|
2008-08-28 21:53:15 +02:00
|
|
|
for arg in $enable_encoders
|
2007-12-08 23:42:33 +01:00
|
|
|
do
|
2008-08-28 21:53:15 +02:00
|
|
|
case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [
|
|
|
|
NAME)
|
|
|
|
enable_filter_[]NAME=yes
|
|
|
|
enable_encoder_[]NAME=yes
|
|
|
|
AC_DEFINE(HAVE_ENCODER_[]m4_toupper(NAME), [1],
|
|
|
|
[Define to 1 if] NAME [encoder is enabled.])
|
|
|
|
;;])
|
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([unknown filter: $arg])
|
2007-12-08 23:42:33 +01:00
|
|
|
;;
|
2008-08-28 21:53:15 +02:00
|
|
|
esac
|
|
|
|
done
|
2015-11-03 19:29:33 +01:00
|
|
|
AC_DEFINE([HAVE_ENCODERS], [1],
|
|
|
|
[Define to 1 if any of HAVE_ENCODER_foo have been defined.])
|
2008-08-28 21:53:15 +02:00
|
|
|
AC_MSG_RESULT([$enable_encoders])
|
|
|
|
fi
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([which decoders to build])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([decoders], AS_HELP_STRING([--enable-decoders=LIST],
|
2008-08-28 21:53:15 +02:00
|
|
|
[Comma-separated list of decoders to build. Default=all.
|
|
|
|
Available decoders are the same as available encoders.]),
|
|
|
|
[], [enable_decoders=SUPPORTED_FILTERS])
|
2010-05-26 08:55:47 +02:00
|
|
|
enable_decoders=`echo "$enable_decoders" | sed 's/,/ /g'`
|
2008-08-28 21:53:15 +02:00
|
|
|
if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then
|
2015-11-03 19:35:19 +01:00
|
|
|
enable_decoders=no
|
2008-08-28 21:53:15 +02:00
|
|
|
AC_MSG_RESULT([(none)])
|
|
|
|
else
|
|
|
|
for arg in $enable_decoders
|
|
|
|
do
|
|
|
|
case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [
|
|
|
|
NAME)
|
|
|
|
enable_filter_[]NAME=yes
|
|
|
|
enable_decoder_[]NAME=yes
|
|
|
|
AC_DEFINE(HAVE_DECODER_[]m4_toupper(NAME), [1],
|
|
|
|
[Define to 1 if] NAME [decoder is enabled.])
|
|
|
|
;;])
|
2007-12-08 23:42:33 +01:00
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([unknown filter: $arg])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2015-11-03 19:29:33 +01:00
|
|
|
AC_DEFINE([HAVE_DECODERS], [1],
|
|
|
|
[Define to 1 if any of HAVE_DECODER_foo have been defined.])
|
2008-08-28 21:53:15 +02:00
|
|
|
AC_MSG_RESULT([$enable_decoders])
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
2008-08-28 21:53:15 +02:00
|
|
|
|
2008-09-27 18:09:21 +02:00
|
|
|
if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \
|
|
|
|
|| test "x$enable_decoder_lzma2$enable_decoder_lzma1" = xyesno; then
|
|
|
|
AC_MSG_ERROR([LZMA2 requires that LZMA1 is also enabled.])
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
2008-08-28 21:53:15 +02:00
|
|
|
|
2015-11-03 19:35:19 +01:00
|
|
|
AM_CONDITIONAL(COND_MAIN_ENCODER, test "x$enable_encoders" != xno)
|
|
|
|
AM_CONDITIONAL(COND_MAIN_DECODER, test "x$enable_decoders" != xno)
|
2009-05-02 13:46:50 +02:00
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
m4_foreach([NAME], [SUPPORTED_FILTERS],
|
|
|
|
[AM_CONDITIONAL(COND_FILTER_[]m4_toupper(NAME), test "x$enable_filter_[]NAME" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_ENCODER_[]m4_toupper(NAME), test "x$enable_encoder_[]NAME" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_DECODER_[]m4_toupper(NAME), test "x$enable_decoder_[]NAME" = xyes)
|
|
|
|
])dnl
|
|
|
|
|
|
|
|
# The so called "simple filters" share common code.
|
|
|
|
enable_filter_simple=no
|
|
|
|
enable_encoder_simple=no
|
|
|
|
enable_decoder_simple=no
|
|
|
|
m4_foreach([NAME], [SIMPLE_FILTERS],
|
|
|
|
[test "x$enable_filter_[]NAME" = xyes && enable_filter_simple=yes
|
|
|
|
test "x$enable_encoder_[]NAME" = xyes && enable_encoder_simple=yes
|
|
|
|
test "x$enable_decoder_[]NAME" = xyes && enable_decoder_simple=yes
|
|
|
|
])dnl
|
|
|
|
AM_CONDITIONAL(COND_FILTER_SIMPLE, test "x$enable_filter_simple" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_ENCODER_SIMPLE, test "x$enable_encoder_simple" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_DECODER_SIMPLE, test "x$enable_decoder_simple" = xyes)
|
|
|
|
|
|
|
|
# LZ-based filters share common code.
|
|
|
|
enable_filter_lz=no
|
|
|
|
enable_encoder_lz=no
|
|
|
|
enable_decoder_lz=no
|
|
|
|
m4_foreach([NAME], [LZ_FILTERS],
|
|
|
|
[test "x$enable_filter_[]NAME" = xyes && enable_filter_lz=yes
|
|
|
|
test "x$enable_encoder_[]NAME" = xyes && enable_encoder_lz=yes
|
|
|
|
test "x$enable_decoder_[]NAME" = xyes && enable_decoder_lz=yes
|
|
|
|
])dnl
|
|
|
|
AM_CONDITIONAL(COND_FILTER_LZ, test "x$enable_filter_lz" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_ENCODER_LZ, test "x$enable_encoder_lz" = xyes)
|
|
|
|
AM_CONDITIONAL(COND_DECODER_LZ, test "x$enable_decoder_lz" = xyes)
|
|
|
|
|
|
|
|
|
|
|
|
#################
|
|
|
|
# Match finders #
|
|
|
|
#################
|
|
|
|
|
|
|
|
m4_define([SUPPORTED_MATCH_FINDERS], [hc3,hc4,bt2,bt3,bt4])
|
|
|
|
|
|
|
|
m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS],
|
|
|
|
[enable_match_finder_[]NAME=no
|
|
|
|
])
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_CHECKING([which match finders to build])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([match-finders], AS_HELP_STRING([--enable-match-finders=LIST],
|
2007-12-08 23:42:33 +01:00
|
|
|
[Comma-separated list of match finders to build. Default=all.
|
|
|
|
At least one match finder is required for encoding with
|
2008-09-27 18:09:21 +02:00
|
|
|
the LZMA1 and LZMA2 filters. Available match finders:]
|
2008-08-28 21:53:15 +02:00
|
|
|
m4_translit(m4_defn([SUPPORTED_MATCH_FINDERS]), [,], [ ])), [],
|
|
|
|
[enable_match_finders=SUPPORTED_MATCH_FINDERS])
|
2007-12-08 23:42:33 +01:00
|
|
|
enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'`
|
2009-05-02 13:46:50 +02:00
|
|
|
if test "x$enable_encoder_lz" = xyes ; then
|
2022-07-25 17:20:01 +02:00
|
|
|
if test -z "$enable_match_finders"; then
|
|
|
|
AC_MSG_ERROR([At least one match finder is required for an LZ-based encoder.])
|
|
|
|
fi
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
for arg in $enable_match_finders
|
|
|
|
do
|
2008-08-28 21:53:15 +02:00
|
|
|
case $arg in m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], [
|
|
|
|
NAME)
|
|
|
|
enable_match_finder_[]NAME=yes
|
|
|
|
AC_DEFINE(HAVE_MF_[]m4_toupper(NAME), [1],
|
|
|
|
[Define to 1 to enable] NAME [match finder.])
|
|
|
|
;;])
|
2007-12-08 23:42:33 +01:00
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([unknown match finder: $arg])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
AC_MSG_RESULT([$enable_match_finders])
|
|
|
|
else
|
2008-08-28 21:53:15 +02:00
|
|
|
AC_MSG_RESULT([(none because not building any LZ-based encoder)])
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
|
|
|
|
####################
|
|
|
|
# Integrity checks #
|
|
|
|
####################
|
|
|
|
|
|
|
|
m4_define([SUPPORTED_CHECKS], [crc32,crc64,sha256])
|
|
|
|
|
2011-05-17 11:01:37 +02:00
|
|
|
m4_foreach([NAME], [SUPPORTED_CHECKS],
|
2008-08-28 21:53:15 +02:00
|
|
|
[enable_check_[]NAME=no
|
|
|
|
])dnl
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_CHECKING([which integrity checks to build])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([checks], AS_HELP_STRING([--enable-checks=LIST],
|
2007-12-08 23:42:33 +01:00
|
|
|
[Comma-separated list of integrity checks to build.
|
2008-08-28 21:53:15 +02:00
|
|
|
Default=all. Available integrity checks:]
|
|
|
|
m4_translit(m4_defn([SUPPORTED_CHECKS]), [,], [ ])),
|
|
|
|
[], [enable_checks=SUPPORTED_CHECKS])
|
2007-12-08 23:42:33 +01:00
|
|
|
enable_checks=`echo "$enable_checks" | sed 's/,/ /g'`
|
|
|
|
if test "x$enable_checks" = xno || test "x$enable_checks" = x; then
|
|
|
|
AC_MSG_RESULT([(none)])
|
|
|
|
else
|
|
|
|
for arg in $enable_checks
|
|
|
|
do
|
2008-08-28 21:53:15 +02:00
|
|
|
case $arg in m4_foreach([NAME], [SUPPORTED_CHECKS], [
|
|
|
|
NAME)
|
|
|
|
enable_check_[]NAME=yes
|
|
|
|
AC_DEFINE(HAVE_CHECK_[]m4_toupper(NAME), [1],
|
|
|
|
[Define to 1 if] NAME
|
|
|
|
[integrity check is enabled.])
|
|
|
|
;;])
|
2007-12-08 23:42:33 +01:00
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([unknown integrity check: $arg])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
AC_MSG_RESULT([$enable_checks])
|
|
|
|
fi
|
2013-07-15 13:08:02 +02:00
|
|
|
if test "x$enable_check_crc32" = xno ; then
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_ERROR([For now, the CRC32 check must always be enabled.])
|
|
|
|
fi
|
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
m4_foreach([NAME], [SUPPORTED_CHECKS],
|
|
|
|
[AM_CONDITIONAL(COND_CHECK_[]m4_toupper(NAME), test "x$enable_check_[]NAME" = xyes)
|
|
|
|
])dnl
|
|
|
|
|
2016-03-13 19:21:49 +01:00
|
|
|
AC_MSG_CHECKING([if external SHA-256 should be used])
|
|
|
|
AC_ARG_ENABLE([external-sha256], AS_HELP_STRING([--enable-external-sha256],
|
|
|
|
[Use SHA-256 code from the operating system.
|
|
|
|
See INSTALL for possible subtle problems.]),
|
|
|
|
[], [enable_external_sha256=no])
|
|
|
|
if test "x$enable_check_sha256" != "xyes"; then
|
|
|
|
enable_external_sha256=no
|
|
|
|
fi
|
|
|
|
if test "x$enable_external_sha256" = xyes; then
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
else
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
fi
|
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
|
|
|
|
###########################
|
|
|
|
# Assembler optimizations #
|
|
|
|
###########################
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_CHECKING([if assembler optimizations should be used])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([assembler], AS_HELP_STRING([--disable-assembler],
|
2007-12-08 23:42:33 +01:00
|
|
|
[Do not use assembler optimizations even if such exist
|
|
|
|
for the architecture.]),
|
2008-06-18 17:02:10 +02:00
|
|
|
[], [enable_assembler=yes])
|
2007-12-08 23:42:33 +01:00
|
|
|
if test "x$enable_assembler" = xyes; then
|
2009-11-22 11:00:30 +01:00
|
|
|
enable_assembler=no
|
|
|
|
case $host_os in
|
|
|
|
# Darwin should work too but only if not creating universal
|
|
|
|
# binaries. Solaris x86 could work too but I cannot test.
|
2015-08-11 12:23:04 +02:00
|
|
|
linux* | *bsd* | mingw* | cygwin | msys | *djgpp*)
|
2009-11-22 11:00:30 +01:00
|
|
|
case $host_cpu in
|
|
|
|
i?86) enable_assembler=x86 ;;
|
|
|
|
x86_64) enable_assembler=x86_64 ;;
|
|
|
|
esac
|
|
|
|
;;
|
2008-01-15 12:29:14 +01:00
|
|
|
esac
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
|
|
|
case $enable_assembler in
|
2009-11-22 11:00:30 +01:00
|
|
|
x86 | x86_64 | no)
|
|
|
|
AC_MSG_RESULT([$enable_assembler])
|
2008-01-15 12:29:14 +01:00
|
|
|
;;
|
2007-12-08 23:42:33 +01:00
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
2014-11-17 17:43:19 +01:00
|
|
|
AC_MSG_ERROR([--enable-assembler accepts only `yes', `no', `x86', or `x86_64'.])
|
2007-12-08 23:42:33 +01:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86)
|
2008-08-28 21:53:15 +02:00
|
|
|
AM_CONDITIONAL(COND_ASM_X86_64, test "x$enable_assembler" = xx86_64)
|
|
|
|
|
|
|
|
|
|
|
|
#####################
|
|
|
|
# Size optimization #
|
|
|
|
#####################
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_CHECKING([if small size is preferred over speed])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([small], AS_HELP_STRING([--enable-small],
|
2008-08-28 21:53:15 +02:00
|
|
|
[Make liblzma smaller and a little slower.
|
|
|
|
This is disabled by default to optimize for speed.]),
|
2008-06-18 17:02:10 +02:00
|
|
|
[], [enable_small=no])
|
2007-12-08 23:42:33 +01:00
|
|
|
if test "x$enable_small" = xyes; then
|
2008-12-30 23:57:27 +01:00
|
|
|
AC_DEFINE([HAVE_SMALL], [1], [Define to 1 if optimizing for size.])
|
2007-12-08 23:42:33 +01:00
|
|
|
elif test "x$enable_small" != xno; then
|
|
|
|
AC_MSG_RESULT([])
|
2014-11-17 17:43:19 +01:00
|
|
|
AC_MSG_ERROR([--enable-small accepts only `yes' or `no'])
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
|
|
|
AC_MSG_RESULT([$enable_small])
|
|
|
|
AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes)
|
|
|
|
|
2008-08-28 21:53:15 +02:00
|
|
|
|
2008-12-30 23:30:49 +01:00
|
|
|
#############
|
|
|
|
# Threading #
|
|
|
|
#############
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if threading support is wanted])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([threads], AS_HELP_STRING([--enable-threads=METHOD],
|
2013-09-17 10:52:28 +02:00
|
|
|
[Supported METHODS are `yes', `no', `posix', `win95', and
|
|
|
|
`vista'. The default is `yes'. Using `no' together with
|
|
|
|
--enable-small makes liblzma thread unsafe.]),
|
2008-12-30 23:30:49 +01:00
|
|
|
[], [enable_threads=yes])
|
2013-09-17 10:52:28 +02:00
|
|
|
|
|
|
|
if test "x$enable_threads" = xyes; then
|
|
|
|
case $host_os in
|
|
|
|
mingw*)
|
|
|
|
case $host_cpu in
|
|
|
|
i?86) enable_threads=win95 ;;
|
|
|
|
*) enable_threads=vista ;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
enable_threads=posix
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
|
|
|
case $enable_threads in
|
|
|
|
posix | win95 | vista)
|
|
|
|
AC_MSG_RESULT([yes, $enable_threads])
|
|
|
|
;;
|
|
|
|
no)
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
2014-11-17 17:43:19 +01:00
|
|
|
AC_MSG_ERROR([--enable-threads only accepts `yes', `no', `posix', `win95', or `vista'])
|
2013-09-17 10:52:28 +02:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# The Win95 threading lacks thread-safe one-time initialization function.
|
|
|
|
# It's better to disallow it instead of allowing threaded but thread-unsafe
|
|
|
|
# build.
|
|
|
|
if test "x$enable_small$enable_threads" = xyeswin95; then
|
|
|
|
AC_MSG_ERROR([--enable-threads=win95 and --enable-small cannot be
|
|
|
|
used at the same time])
|
2008-12-30 23:30:49 +01:00
|
|
|
fi
|
2013-09-17 10:52:28 +02:00
|
|
|
|
2008-12-30 23:30:49 +01:00
|
|
|
# We use the actual result a little later.
|
|
|
|
|
|
|
|
|
2009-10-02 13:35:56 +02:00
|
|
|
#########################
|
|
|
|
# Assumed amount of RAM #
|
|
|
|
#########################
|
|
|
|
|
2010-03-07 12:34:34 +01:00
|
|
|
# We use 128 MiB as default, because it will allow decompressing files
|
|
|
|
# created with "xz -9". It would be slightly safer to guess a lower value,
|
|
|
|
# but most systems, on which we don't have any way to determine the amount
|
|
|
|
# of RAM, will probably have at least 128 MiB of RAM.
|
2009-10-02 13:35:56 +02:00
|
|
|
AC_MSG_CHECKING([how much RAM to assume if the real amount is unknown])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([assume-ram], AS_HELP_STRING([--enable-assume-ram=SIZE],
|
2009-10-02 13:35:56 +02:00
|
|
|
[If and only if the real amount of RAM cannot be determined,
|
2010-03-07 12:34:34 +01:00
|
|
|
assume SIZE MiB. The default is 128 MiB. This affects the
|
2009-10-02 13:35:56 +02:00
|
|
|
default memory usage limit.]),
|
2010-03-07 12:34:34 +01:00
|
|
|
[], [enable_assume_ram=128])
|
2009-10-02 13:35:56 +02:00
|
|
|
assume_ram_check=`echo "$enable_assume_ram" | tr -d 0123456789`
|
|
|
|
if test -z "$enable_assume_ram" || test -n "$assume_ram_check"; then
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([--enable-assume-ram accepts only an integer argument])
|
|
|
|
fi
|
|
|
|
AC_MSG_RESULT([$enable_assume_ram MiB])
|
|
|
|
AC_DEFINE_UNQUOTED([ASSUME_RAM], [$enable_assume_ram],
|
|
|
|
[How many MiB of RAM to assume if the real amount cannot
|
|
|
|
be determined.])
|
|
|
|
|
|
|
|
|
2010-10-08 14:25:45 +02:00
|
|
|
#########################
|
|
|
|
# Components to install #
|
|
|
|
#########################
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([xz], [AS_HELP_STRING([--disable-xz],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not build the xz tool])],
|
|
|
|
[], [enable_xz=yes])
|
|
|
|
AM_CONDITIONAL([COND_XZ], [test x$enable_xz != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([xzdec], [AS_HELP_STRING([--disable-xzdec],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not build xzdec])],
|
|
|
|
[], [enable_xzdec=yes])
|
2015-11-03 19:47:07 +01:00
|
|
|
test "x$enable_decoders" = xno && enable_xzdec=no
|
2010-10-08 14:25:45 +02:00
|
|
|
AM_CONDITIONAL([COND_XZDEC], [test x$enable_xzdec != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([lzmadec], [AS_HELP_STRING([--disable-lzmadec],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not build lzmadec
|
|
|
|
(it exists primarily for LZMA Utils compatibility)])],
|
|
|
|
[], [enable_lzmadec=yes])
|
2015-11-03 19:47:07 +01:00
|
|
|
test "x$enable_decoder_lzma1" = xno && enable_lzmadec=no
|
2010-10-08 14:25:45 +02:00
|
|
|
AM_CONDITIONAL([COND_LZMADEC], [test x$enable_lzmadec != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([lzmainfo], [AS_HELP_STRING([--disable-lzmainfo],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not build lzmainfo
|
|
|
|
(it exists primarily for LZMA Utils compatibility)])],
|
|
|
|
[], [enable_lzmainfo=yes])
|
2015-11-03 19:47:07 +01:00
|
|
|
test "x$enable_decoder_lzma1" = xno && enable_lzmainfo=no
|
2010-10-08 14:25:45 +02:00
|
|
|
AM_CONDITIONAL([COND_LZMAINFO], [test x$enable_lzmainfo != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([lzma-links], [AS_HELP_STRING([--disable-lzma-links],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not create symlinks for LZMA Utils compatibility])],
|
|
|
|
[], [enable_lzma_links=yes])
|
|
|
|
AM_CONDITIONAL([COND_LZMALINKS], [test x$enable_lzma_links != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([scripts], [AS_HELP_STRING([--disable-scripts],
|
2010-10-08 14:25:45 +02:00
|
|
|
[do not install the scripts xzdiff, xzgrep, xzless, xzmore,
|
|
|
|
and their symlinks])],
|
|
|
|
[], [enable_scripts=yes])
|
|
|
|
AM_CONDITIONAL([COND_SCRIPTS], [test x$enable_scripts != xno])
|
|
|
|
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([doc], [AS_HELP_STRING([--disable-doc],
|
2014-04-25 16:44:26 +02:00
|
|
|
[do not install documentation files to docdir
|
|
|
|
(man pages will still be installed)])],
|
|
|
|
[], [enable_doc=yes])
|
|
|
|
AM_CONDITIONAL([COND_DOC], [test x$enable_doc != xno])
|
|
|
|
|
2010-10-08 14:25:45 +02:00
|
|
|
|
2011-05-28 14:55:39 +02:00
|
|
|
#####################
|
|
|
|
# Symbol versioning #
|
|
|
|
#####################
|
|
|
|
|
2011-05-28 18:24:56 +02:00
|
|
|
AC_MSG_CHECKING([if library symbol versioning should be used])
|
2014-11-17 17:52:21 +01:00
|
|
|
AC_ARG_ENABLE([symbol-versions], [AS_HELP_STRING([--enable-symbol-versions],
|
2011-05-28 14:55:39 +02:00
|
|
|
[Use symbol versioning for liblzma. Enabled by default on
|
|
|
|
GNU/Linux, other GNU-based systems, and FreeBSD.])],
|
|
|
|
[], [enable_symbol_versions=auto])
|
|
|
|
if test "x$enable_symbol_versions" = xauto; then
|
|
|
|
case $host_os in
|
2012-07-04 16:11:31 +02:00
|
|
|
# NOTE: Even if one omits -gnu on GNU/Linux (e.g.
|
|
|
|
# i486-slackware-linux), configure will (via config.sub)
|
|
|
|
# append -gnu (e.g. i486-slackware-linux-gnu), and this
|
|
|
|
# test will work correctly.
|
2011-05-28 14:55:39 +02:00
|
|
|
gnu* | *-gnu* | freebsd*)
|
|
|
|
enable_symbol_versions=yes
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
enable_symbol_versions=no
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
2011-05-28 18:24:56 +02:00
|
|
|
AC_MSG_RESULT([$enable_symbol_versions])
|
liblzma: Vaccinate against an ill patch from RHEL/CentOS 7.
RHEL/CentOS 7 shipped with 5.1.2alpha, including the threaded
encoder that is behind #ifdef LZMA_UNSTABLE in the API headers.
In 5.1.2alpha these symbols are under XZ_5.1.2alpha in liblzma.map.
API/ABI compatibility tracking isn't done between development
releases so newer releases didn't have XZ_5.1.2alpha anymore.
Later RHEL/CentOS 7 updated xz to 5.2.2 but they wanted to keep
the exported symbols compatible with 5.1.2alpha. After checking
the ABI changes it turned out that >= 5.2.0 ABI is backward
compatible with the threaded encoder functions from 5.1.2alpha
(but not vice versa as fixes and extensions to these functions
were made between 5.1.2alpha and 5.2.0).
In RHEL/CentOS 7, XZ Utils 5.2.2 was patched with
xz-5.2.2-compat-libs.patch to modify liblzma.map:
- XZ_5.1.2alpha was added with lzma_stream_encoder_mt and
lzma_stream_encoder_mt_memusage. This matched XZ Utils 5.1.2alpha.
- XZ_5.2 was replaced with XZ_5.2.2. It is clear that this was
an error; the intention was to keep using XZ_5.2 (XZ_5.2.2
has never been used in XZ Utils). So XZ_5.2.2 lists all
symbols that were listed under XZ_5.2 before the patch.
lzma_stream_encoder_mt and _mt_memusage are included too so
they are listed both here and under XZ_5.1.2alpha.
The patch didn't add any __asm__(".symver ...") lines to the .c
files. Thus the resulting liblzma.so exports the threaded encoder
functions under XZ_5.1.2alpha only. Listing the two functions
also under XZ_5.2.2 in liblzma.map has no effect without
matching .symver lines.
The lack of XZ_5.2 in RHEL/CentOS 7 means that binaries linked
against unpatched XZ Utils 5.2.x won't run on RHEL/CentOS 7.
This is unfortunate but this alone isn't too bad as the problem
is contained within RHEL/CentOS 7 and doesn't affect users
of other distributions. It could also be fixed internally in
RHEL/CentOS 7.
The second problem is more serious: In XZ Utils 5.2.2 the API
headers don't have #ifdef LZMA_UNSTABLE for obvious reasons.
This is true in RHEL/CentOS 7 version too. Thus now programs
using new APIs can be compiled without an extra #define. However,
the programs end up depending on symbol version XZ_5.1.2alpha
(and possibly also XZ_5.2.2) instead of XZ_5.2 as they would
with an unpatched XZ Utils 5.2.2. This means that such binaries
won't run on other distributions shipping XZ Utils >= 5.2.0 as
they don't provide XZ_5.1.2alpha or XZ_5.2.2; they only provide
XZ_5.2 (and XZ_5.0). (This includes RHEL/CentOS 8 as the patch
luckily isn't included there anymore with XZ Utils 5.2.4.)
Binaries built by RHEL/CentOS 7 users get distributed and then
people wonder why they don't run on some other distribution.
Seems that people have found out about the patch and been copying
it to some build scripts, seemingly curing the symptoms but
actually spreading the illness further and outside RHEL/CentOS 7.
The ill patch seems to be from late 2016 (RHEL 7.3) and in 2017 it
had spread at least to EasyBuild. I heard about the events only
recently. :-(
This commit splits liblzma.map into two versions: one for
GNU/Linux and another for other OSes that can use symbol versioning
(FreeBSD, Solaris, maybe others). The Linux-specific file and the
matching additions to .c files add full compatibility with binaries
that have been built against a RHEL/CentOS-patched liblzma. Builds
for OSes other than GNU/Linux won't get the vaccine as they should
be immune to the problem (I really hope that no build script uses
the RHEL/CentOS 7 patch outside GNU/Linux).
The RHEL/CentOS compatibility symbols XZ_5.1.2alpha and XZ_5.2.2
are intentionally put *after* XZ_5.2 in liblzma_linux.map. This way
if one forgets to #define HAVE_SYMBOL_VERSIONS_LINUX when building,
the resulting liblzma.so.5 will have lzma_stream_encoder_mt@@XZ_5.2
since XZ_5.2 {...} is the first one that lists that function.
Without HAVE_SYMBOL_VERSIONS_LINUX @XZ_5.1.2alpha and @XZ_5.2.2
will be missing but that's still a minor problem compared to
only having lzma_stream_encoder_mt@@XZ_5.1.2alpha!
The "local: *;" line was moved to XZ_5.0 so that it doesn't need
to be moved around. It doesn't matter where it is put.
Having two similar liblzma_*.map files is a bit silly as it is,
at least for now, easily possible to generate the generic one
from the Linux-specific file. But that adds extra steps and
increases the risk of mistakes when supporting more than one
build system. So I rather maintain two files in parallel and let
validate_map.sh check that they are in sync when "make mydist"
is run.
This adds .symver lines for lzma_stream_encoder_mt@XZ_5.2.2 and
lzma_stream_encoder_mt_memusage@XZ_5.2.2 even though these
weren't exported by RHEL/CentOS 7 (only @@XZ_5.1.2alpha was
for these two). I added these anyway because someone might
misunderstand the RHEL/CentOS 7 patch and think that @XZ_5.2.2
(@@XZ_5.2.2) versions were exported too.
At glance one could suggest using __typeof__ to copy the function
prototypes when making aliases. However, this doesn't work trivially
because __typeof__ won't copy attributes (lzma_nothrow, lzma_pure)
and it won't change symbol visibility from hidden to default (done
by LZMA_API()). Attributes could be copied with __copy__ attribute
but that needs GCC 9 and a fallback method would be needed anyway.
This uses __symver__ attribute with GCC >= 10 and
__asm__(".symver ...") with everything else. The attribute method
is required for LTO (-flto) support with GCC. Using -flto with
GCC older than 10 is now broken on GNU/Linux and will not be fixed
(can silently result in a broken liblzma build that has dangerously
incorrect symbol versions). LTO builds with Clang seem to work
with the traditional __asm__(".symver ...") method.
Thanks to Boud Roukema for reporting the problem and discussing
the details and testing the fix.
2022-09-04 22:23:00 +02:00
|
|
|
|
|
|
|
# There are two variants for symbol versioning.
|
|
|
|
# See src/liblzma/validate_map.sh for details.
|
|
|
|
if test "x$enable_symbol_versions" = xyes; then
|
|
|
|
case $host_os in
|
|
|
|
linux*)
|
|
|
|
enable_symbol_versions=linux
|
|
|
|
AC_DEFINE([HAVE_SYMBOL_VERSIONS_LINUX], [1],
|
|
|
|
[Define to 1 to if GNU/Linux-specific details
|
|
|
|
are wanted for symbol versioning. This must
|
|
|
|
be used together with liblzma_linux.map.])
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
enable_symbol_versions=generic
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
|
|
|
AM_CONDITIONAL([COND_SYMVERS_LINUX],
|
|
|
|
[test "x$enable_symbol_versions" = xlinux])
|
|
|
|
AM_CONDITIONAL([COND_SYMVERS_GENERIC],
|
|
|
|
[test "x$enable_symbol_versions" = xgeneric])
|
2011-05-28 14:55:39 +02:00
|
|
|
|
|
|
|
|
2015-03-31 21:19:34 +02:00
|
|
|
##############
|
|
|
|
# Sandboxing #
|
|
|
|
##############
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if sandboxing should be used])
|
|
|
|
AC_ARG_ENABLE([sandbox], [AS_HELP_STRING([--enable-sandbox=METHOD],
|
2020-02-05 18:56:09 +01:00
|
|
|
[Sandboxing METHOD can be `auto', `no', or `capsicum'.
|
|
|
|
The default is `auto' which enables sandboxing if
|
|
|
|
a supported sandboxing method is found.])],
|
|
|
|
[], [enable_sandbox=auto])
|
2015-03-31 21:19:34 +02:00
|
|
|
case $enable_sandbox in
|
|
|
|
auto)
|
|
|
|
AC_MSG_RESULT([maybe (autodetect)])
|
|
|
|
;;
|
|
|
|
no | capsicum)
|
|
|
|
AC_MSG_RESULT([$enable_sandbox])
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
AC_MSG_RESULT([])
|
|
|
|
AC_MSG_ERROR([--enable-sandbox only accepts `auto', `no', or `capsicum'.])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
2019-09-24 22:02:40 +02:00
|
|
|
###########################
|
|
|
|
# PATH prefix for scripts #
|
|
|
|
###########################
|
|
|
|
|
|
|
|
# The scripts can add a prefix to the search PATH so that POSIX tools
|
|
|
|
# or the xz binary is always in the PATH.
|
|
|
|
AC_ARG_ENABLE([path-for-scripts],
|
|
|
|
[AS_HELP_STRING([--enable-path-for-scripts=PREFIX],
|
|
|
|
[If PREFIX isn't empty, PATH=PREFIX:$PATH will be set in
|
|
|
|
the beginning of the scripts (xzgrep and others).
|
|
|
|
The default is empty except on Solaris the default is
|
|
|
|
/usr/xpg4/bin.])],
|
|
|
|
[], [
|
|
|
|
case $host_os in
|
|
|
|
solaris*) enable_path_for_scripts=/usr/xpg4/bin ;;
|
|
|
|
*) enable_path_for_scripts= ;;
|
|
|
|
esac
|
|
|
|
])
|
|
|
|
if test -n "$enable_path_for_scripts" && test "x$enable_path_for_scripts" != xno ; then
|
|
|
|
enable_path_for_scripts="PATH=$enable_path_for_scripts:\$PATH"
|
|
|
|
else
|
|
|
|
enable_path_for_scripts=
|
|
|
|
fi
|
|
|
|
AC_SUBST([enable_path_for_scripts])
|
|
|
|
|
|
|
|
|
2008-01-06 20:47:17 +01:00
|
|
|
###############################################################################
|
|
|
|
# Checks for programs.
|
|
|
|
###############################################################################
|
|
|
|
|
2009-07-05 21:25:17 +02:00
|
|
|
echo
|
2020-02-05 18:33:37 +01:00
|
|
|
case $host_os in
|
|
|
|
solaris*)
|
|
|
|
# The gnulib POSIX shell macro below may pick a shell that
|
|
|
|
# doesn't work with xzgrep. Workaround by picking a shell
|
|
|
|
# that is known to work.
|
|
|
|
if test -z "$gl_cv_posix_shell" && test -x /usr/xpg4/bin/sh; then
|
|
|
|
gl_cv_posix_shell=/usr/xpg4/bin/sh
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2009-07-05 21:25:17 +02:00
|
|
|
gl_POSIX_SHELL
|
2014-12-26 11:00:05 +01:00
|
|
|
if test -z "$POSIX_SHELL" && test "x$enable_scripts" = xyes ; then
|
2009-07-05 21:25:17 +02:00
|
|
|
AC_MSG_ERROR([No POSIX conforming shell (sh) was found.])
|
|
|
|
fi
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
echo
|
|
|
|
echo "Initializing Automake:"
|
|
|
|
|
2014-10-29 20:15:35 +01:00
|
|
|
# We don't use "subdir-objects" yet because it breaks "make distclean" when
|
|
|
|
# dependencies are enabled (as of Automake 1.14.1) due to this bug:
|
|
|
|
# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354
|
|
|
|
# The -Wno-unsupported is used to silence warnings about missing
|
|
|
|
# "subdir-objects".
|
|
|
|
AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 serial-tests -Wno-unsupported])
|
2008-01-06 20:47:17 +01:00
|
|
|
AC_PROG_LN_S
|
2008-05-11 13:17:21 +02:00
|
|
|
|
|
|
|
AC_PROG_CC_C99
|
|
|
|
if test x$ac_cv_prog_cc_c99 = xno ; then
|
|
|
|
AC_MSG_ERROR([No C99 compiler was found.])
|
|
|
|
fi
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AM_PROG_CC_C_O
|
|
|
|
AM_PROG_AS
|
2008-01-06 20:47:17 +01:00
|
|
|
AC_USE_SYSTEM_EXTENSIONS
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2013-09-17 10:52:28 +02:00
|
|
|
case $enable_threads in
|
|
|
|
posix)
|
|
|
|
echo
|
|
|
|
echo "POSIX threading support:"
|
|
|
|
AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro.
|
|
|
|
LIBS="$LIBS $PTHREAD_LIBS"
|
|
|
|
AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS"
|
|
|
|
|
|
|
|
dnl NOTE: PTHREAD_CC is ignored. It would be useful on AIX,
|
|
|
|
dnl but it's tricky to get it right together with
|
|
|
|
dnl AC_PROG_CC_C99. Thus, this is handled by telling the
|
|
|
|
dnl user in INSTALL to set the correct CC manually.
|
|
|
|
|
|
|
|
AC_DEFINE([MYTHREAD_POSIX], [1],
|
|
|
|
[Define to 1 when using POSIX threads (pthreads).])
|
|
|
|
|
|
|
|
# These are nice to have but not mandatory.
|
|
|
|
#
|
|
|
|
# FIXME: xz uses clock_gettime if it is available and can do
|
|
|
|
# it even when threading is disabled. Moving this outside
|
|
|
|
# of pthread detection may be undesirable because then
|
|
|
|
# liblzma may get linked against librt even when librt isn't
|
|
|
|
# needed by liblzma.
|
|
|
|
OLD_CFLAGS=$CFLAGS
|
|
|
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
|
|
AC_SEARCH_LIBS([clock_gettime], [rt])
|
|
|
|
AC_CHECK_FUNCS([clock_gettime pthread_condattr_setclock])
|
|
|
|
AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[#include <time.h>]])
|
|
|
|
CFLAGS=$OLD_CFLAGS
|
|
|
|
;;
|
|
|
|
win95)
|
|
|
|
AC_DEFINE([MYTHREAD_WIN95], [1], [Define to 1 when using
|
|
|
|
Windows 95 (and thus XP) compatible threads.
|
|
|
|
This avoids use of features that were added in
|
|
|
|
Windows Vista.])
|
|
|
|
;;
|
|
|
|
vista)
|
|
|
|
AC_DEFINE([MYTHREAD_VISTA], [1], [Define to 1 when using
|
|
|
|
Windows Vista compatible threads. This uses
|
|
|
|
features that are not available on Windows XP.])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
AM_CONDITIONAL([COND_THREADS], [test "x$enable_threads" != xno])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Initializing Libtool:"
|
2020-02-15 14:07:11 +01:00
|
|
|
LT_PREREQ([2.4])
|
2009-08-27 14:43:54 +02:00
|
|
|
LT_INIT([win32-dll])
|
|
|
|
LT_LANG([Windows Resource])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2009-06-30 16:09:57 +02:00
|
|
|
# This is a bit wrong since it is possible to request that only some libs
|
|
|
|
# are built as shared. Using that feature isn't so common though, and this
|
|
|
|
# breaks only on Windows (at least for now) if the user enables only some
|
|
|
|
# libs as shared.
|
|
|
|
AM_CONDITIONAL([COND_SHARED], [test "x$enable_shared" != xno])
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Checks for libraries.
|
|
|
|
###############################################################################
|
|
|
|
|
2020-02-15 02:08:32 +01:00
|
|
|
dnl Support for _REQUIRE_VERSION was added in gettext 0.19.6. If both
|
|
|
|
dnl _REQUIRE_VERSION and _VERSION are present, the _VERSION is ignored.
|
|
|
|
dnl We use both for compatibility with other programs in the Autotools family.
|
2007-12-08 23:42:33 +01:00
|
|
|
echo
|
|
|
|
echo "Initializing gettext:"
|
2020-02-15 02:08:32 +01:00
|
|
|
AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
|
|
|
|
AM_GNU_GETTEXT_VERSION([0.19.6])
|
2007-12-08 23:42:33 +01:00
|
|
|
AM_GNU_GETTEXT([external])
|
|
|
|
|
2014-07-25 19:57:20 +02:00
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
###############################################################################
|
|
|
|
# Checks for header files.
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "System headers and functions:"
|
|
|
|
|
|
|
|
# There is currently no workarounds in this package if some of
|
|
|
|
# these headers are missing.
|
|
|
|
AC_CHECK_HEADERS([fcntl.h limits.h sys/time.h],
|
|
|
|
[],
|
|
|
|
[AC_MSG_ERROR([Required header file(s) are missing.])])
|
|
|
|
|
2014-07-25 19:57:20 +02:00
|
|
|
# This allows the use of the intrinsic functions if they are available.
|
|
|
|
AC_CHECK_HEADERS([immintrin.h])
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
|
|
###############################################################################
|
|
|
|
|
2008-01-06 15:27:41 +01:00
|
|
|
AC_HEADER_STDBOOL
|
|
|
|
|
|
|
|
AC_TYPE_UINT8_T
|
2008-11-19 22:55:22 +01:00
|
|
|
AC_TYPE_UINT16_T
|
2008-01-06 15:27:41 +01:00
|
|
|
AC_TYPE_INT32_T
|
|
|
|
AC_TYPE_UINT32_T
|
|
|
|
AC_TYPE_INT64_T
|
|
|
|
AC_TYPE_UINT64_T
|
|
|
|
AC_TYPE_UINTPTR_T
|
|
|
|
|
|
|
|
AC_CHECK_SIZEOF([size_t])
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
# The command line tool can copy high resolution timestamps if such
|
2012-08-24 15:27:31 +02:00
|
|
|
# information is available in struct stat. Otherwise one second accuracy
|
2008-11-19 19:46:52 +01:00
|
|
|
# is used.
|
|
|
|
AC_CHECK_MEMBERS([
|
|
|
|
struct stat.st_atim.tv_nsec,
|
|
|
|
struct stat.st_atimespec.tv_nsec,
|
|
|
|
struct stat.st_atimensec,
|
|
|
|
struct stat.st_uatime,
|
|
|
|
struct stat.st_atim.st__tim.tv_nsec])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
AC_SYS_LARGEFILE
|
|
|
|
AC_C_BIGENDIAN
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Checks for library functions.
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
# Gnulib replacements as needed
|
|
|
|
gl_GETOPT
|
|
|
|
|
2008-11-19 19:46:52 +01:00
|
|
|
# Find the best function to set timestamps.
|
2016-06-30 19:27:36 +02:00
|
|
|
AC_CHECK_FUNCS([futimens futimes futimesat utimes _futime utime], [break])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2015-04-20 18:59:18 +02:00
|
|
|
# This is nice to have but not mandatory.
|
|
|
|
AC_CHECK_FUNCS([posix_fadvise])
|
2011-04-05 14:27:26 +02:00
|
|
|
|
2009-09-19 08:47:30 +02:00
|
|
|
TUKLIB_PROGNAME
|
2009-10-04 21:57:12 +02:00
|
|
|
TUKLIB_INTEGER
|
2009-09-19 08:47:30 +02:00
|
|
|
TUKLIB_PHYSMEM
|
|
|
|
TUKLIB_CPUCORES
|
2010-09-10 09:30:33 +02:00
|
|
|
TUKLIB_MBSTR
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2019-06-24 23:16:06 +02:00
|
|
|
# If requested, check for system-provided SHA-256. At least the following
|
2016-03-13 19:21:49 +01:00
|
|
|
# implementations are supported:
|
2011-05-21 14:08:44 +02:00
|
|
|
#
|
|
|
|
# OS Headers Library Type Function
|
2016-03-13 19:21:49 +01:00
|
|
|
# FreeBSD sys/types.h + sha256.h libmd SHA256_CTX SHA256_Init
|
2011-05-21 14:08:44 +02:00
|
|
|
# NetBSD sys/types.h + sha2.h SHA256_CTX SHA256_Init
|
|
|
|
# OpenBSD sys/types.h + sha2.h SHA2_CTX SHA256Init
|
|
|
|
# Solaris sys/types.h + sha2.h libmd SHA256_CTX SHA256Init
|
2016-03-13 19:21:49 +01:00
|
|
|
# MINIX 3 sys/types.h + sha2.h SHA256_CTX SHA256_Init
|
2011-05-21 14:08:44 +02:00
|
|
|
# Darwin CommonCrypto/CommonDigest.h CC_SHA256_CTX CC_SHA256_Init
|
|
|
|
#
|
2016-03-13 19:21:49 +01:00
|
|
|
# Note that Darwin's CC_SHA256_Update takes buffer size as uint32_t instead
|
|
|
|
# of size_t.
|
2016-03-10 19:26:49 +01:00
|
|
|
#
|
2016-03-13 19:21:49 +01:00
|
|
|
sha256_header_found=no
|
|
|
|
sha256_type_found=no
|
|
|
|
sha256_func_found=no
|
|
|
|
if test "x$enable_external_sha256" = "xyes"; then
|
2011-05-21 14:08:44 +02:00
|
|
|
# Test for Common Crypto before others, because Darwin has sha256.h
|
|
|
|
# too and we don't want to use that, because on older versions it
|
|
|
|
# uses OpenSSL functions, whose SHA256_Init is not guaranteed to
|
|
|
|
# succeed.
|
|
|
|
AC_CHECK_HEADERS(
|
2016-03-13 19:21:49 +01:00
|
|
|
[CommonCrypto/CommonDigest.h sha256.h sha2.h],
|
2011-05-21 14:08:44 +02:00
|
|
|
[sha256_header_found=yes ; break])
|
|
|
|
if test "x$sha256_header_found" = xyes; then
|
2016-03-13 19:21:49 +01:00
|
|
|
AC_CHECK_TYPES([CC_SHA256_CTX, SHA256_CTX, SHA2_CTX],
|
|
|
|
[sha256_type_found=yes], [],
|
2011-05-23 23:23:46 +02:00
|
|
|
[[#ifdef HAVE_SYS_TYPES_H
|
2011-05-21 14:08:44 +02:00
|
|
|
# include <sys/types.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_COMMONCRYPTO_COMMONDIGEST_H
|
|
|
|
# include <CommonCrypto/CommonDigest.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SHA256_H
|
|
|
|
# include <sha256.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SHA2_H
|
|
|
|
# include <sha2.h>
|
|
|
|
#endif]])
|
2016-03-13 19:21:49 +01:00
|
|
|
if test "x$sha256_type_found" = xyes ; then
|
|
|
|
AC_SEARCH_LIBS([SHA256Init], [md])
|
|
|
|
AC_SEARCH_LIBS([SHA256_Init], [md])
|
|
|
|
AC_CHECK_FUNCS([CC_SHA256_Init SHA256Init SHA256_Init],
|
|
|
|
[sha256_func_found=yes ; break])
|
|
|
|
fi
|
2011-05-21 14:08:44 +02:00
|
|
|
fi
|
|
|
|
fi
|
2016-03-13 19:21:49 +01:00
|
|
|
AM_CONDITIONAL([COND_INTERNAL_SHA256], [test "x$sha256_func_found" = xno])
|
|
|
|
if test "x$enable_external_sha256$sha256_func_found" = xyesno; then
|
|
|
|
AC_MSG_ERROR([--enable-external-sha256 was specified but no supported external SHA-256 implementation was found])
|
|
|
|
fi
|
2011-05-21 14:08:44 +02:00
|
|
|
|
2014-07-25 19:57:20 +02:00
|
|
|
# Check for SSE2 intrinsics.
|
|
|
|
AC_CHECK_DECL([_mm_movemask_epi8],
|
|
|
|
[AC_DEFINE([HAVE__MM_MOVEMASK_EPI8], [1],
|
|
|
|
[Define to 1 if _mm_movemask_epi8 is available.])],
|
|
|
|
[],
|
|
|
|
[#ifdef HAVE_IMMINTRIN_H
|
|
|
|
#include <immintrin.h>
|
|
|
|
#endif])
|
|
|
|
|
2015-03-31 21:19:34 +02:00
|
|
|
# Check for sandbox support. If one is found, set enable_sandbox=found.
|
|
|
|
case $enable_sandbox in
|
|
|
|
auto | capsicum)
|
|
|
|
AX_CHECK_CAPSICUM([enable_sandbox=found], [:])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# If a specific sandboxing method was explicitly requested and it wasn't
|
|
|
|
# found, give an error.
|
|
|
|
case $enable_sandbox in
|
|
|
|
auto | no | found)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
AC_MSG_ERROR([$enable_sandbox support not found])
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
###############################################################################
|
2009-02-09 13:54:31 +01:00
|
|
|
# If using GCC, set some additional AM_CFLAGS:
|
2007-12-08 23:42:33 +01:00
|
|
|
###############################################################################
|
|
|
|
|
2009-07-01 11:21:24 +02:00
|
|
|
if test "$GCC" = yes ; then
|
2007-12-08 23:42:33 +01:00
|
|
|
echo
|
|
|
|
echo "GCC extensions:"
|
2009-07-01 11:21:24 +02:00
|
|
|
fi
|
2009-06-30 16:09:57 +02:00
|
|
|
|
2009-07-01 11:21:24 +02:00
|
|
|
# Always do the visibility check but don't set AM_CFLAGS on Windows.
|
|
|
|
# This way things get set properly even on Windows.
|
|
|
|
gl_VISIBILITY
|
|
|
|
if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then
|
|
|
|
AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY"
|
|
|
|
fi
|
2007-12-08 23:42:33 +01:00
|
|
|
|
2009-07-01 11:21:24 +02:00
|
|
|
if test "$GCC" = yes ; then
|
2007-12-08 23:42:33 +01:00
|
|
|
# Enable as much warnings as possible. These commented warnings won't
|
2008-12-12 23:54:11 +01:00
|
|
|
# work for this package though:
|
2007-12-08 23:42:33 +01:00
|
|
|
# * -Wunreachable-code breaks several assert(0) cases, which are
|
|
|
|
# backed up with "return LZMA_PROG_ERROR".
|
|
|
|
# * -Wcast-qual would break various things where we need a non-const
|
|
|
|
# pointer although we don't modify anything through it.
|
|
|
|
# * -Wcast-align breaks optimized CRC32 and CRC64 implementation
|
|
|
|
# on some architectures (not on x86), where this warning is bogus,
|
|
|
|
# because we take care of correct alignment.
|
2007-12-10 14:02:50 +01:00
|
|
|
# * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations
|
|
|
|
# don't seem so useful here; at least the last one gives some
|
|
|
|
# warnings which are not bugs.
|
2008-01-05 18:42:04 +01:00
|
|
|
for NEW_FLAG in \
|
2009-02-09 13:54:31 +01:00
|
|
|
-Wall \
|
2008-01-05 18:42:04 +01:00
|
|
|
-Wextra \
|
2013-04-27 21:07:46 +02:00
|
|
|
-Wvla \
|
2009-02-09 13:54:31 +01:00
|
|
|
-Wformat=2 \
|
|
|
|
-Winit-self \
|
|
|
|
-Wmissing-include-dirs \
|
|
|
|
-Wstrict-aliasing \
|
|
|
|
-Wfloat-equal \
|
|
|
|
-Wundef \
|
|
|
|
-Wshadow \
|
|
|
|
-Wpointer-arith \
|
|
|
|
-Wbad-function-cast \
|
|
|
|
-Wwrite-strings \
|
|
|
|
-Wlogical-op \
|
|
|
|
-Waggregate-return \
|
|
|
|
-Wstrict-prototypes \
|
|
|
|
-Wold-style-definition \
|
|
|
|
-Wmissing-prototypes \
|
|
|
|
-Wmissing-declarations \
|
|
|
|
-Wmissing-noreturn \
|
|
|
|
-Wredundant-decls
|
2007-12-08 23:42:33 +01:00
|
|
|
do
|
|
|
|
AC_MSG_CHECKING([if $CC accepts $NEW_FLAG])
|
|
|
|
OLD_CFLAGS="$CFLAGS"
|
2014-09-25 17:38:48 +02:00
|
|
|
CFLAGS="$CFLAGS $NEW_FLAG -Werror"
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
|
|
|
|
[void foo(void); void foo(void) { }])], [
|
2009-02-09 13:54:31 +01:00
|
|
|
AM_CFLAGS="$AM_CFLAGS $NEW_FLAG"
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
2009-02-09 13:54:31 +01:00
|
|
|
CFLAGS="$OLD_CFLAGS"
|
2007-12-08 23:42:33 +01:00
|
|
|
done
|
|
|
|
|
|
|
|
AC_ARG_ENABLE([werror],
|
2014-11-17 17:52:21 +01:00
|
|
|
AS_HELP_STRING([--enable-werror], [Enable -Werror to abort
|
2007-12-08 23:42:33 +01:00
|
|
|
compilation on all compiler warnings.]),
|
|
|
|
[], [enable_werror=no])
|
|
|
|
if test "x$enable_werror" = "xyes"; then
|
2009-02-09 13:54:31 +01:00
|
|
|
AM_CFLAGS="$AM_CFLAGS -Werror"
|
2007-12-08 23:42:33 +01:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# Create the makefiles and config.h
|
|
|
|
###############################################################################
|
|
|
|
|
|
|
|
echo
|
|
|
|
|
|
|
|
# Don't build the lib directory at all if we don't need any replacement
|
|
|
|
# functions.
|
|
|
|
AM_CONDITIONAL([COND_GNULIB], test -n "$LIBOBJS")
|
|
|
|
|
2009-02-09 13:54:31 +01:00
|
|
|
# Add default AM_CFLAGS.
|
|
|
|
AC_SUBST([AM_CFLAGS])
|
|
|
|
|
2009-07-05 21:25:17 +02:00
|
|
|
# This is needed for src/scripts.
|
|
|
|
xz=`echo xz | sed "$program_transform_name"`
|
|
|
|
AC_SUBST([xz])
|
|
|
|
|
2007-12-08 23:42:33 +01:00
|
|
|
AC_CONFIG_FILES([
|
|
|
|
Doxyfile
|
|
|
|
Makefile
|
|
|
|
po/Makefile.in
|
|
|
|
lib/Makefile
|
|
|
|
src/Makefile
|
|
|
|
src/liblzma/Makefile
|
|
|
|
src/liblzma/api/Makefile
|
2008-11-19 22:52:24 +01:00
|
|
|
src/xz/Makefile
|
|
|
|
src/xzdec/Makefile
|
2009-08-13 11:55:45 +02:00
|
|
|
src/lzmainfo/Makefile
|
2007-12-08 23:42:33 +01:00
|
|
|
src/scripts/Makefile
|
|
|
|
tests/Makefile
|
2008-01-18 19:18:08 +01:00
|
|
|
debug/Makefile
|
2007-12-08 23:42:33 +01:00
|
|
|
])
|
2011-08-06 19:37:28 +02:00
|
|
|
AC_CONFIG_FILES([src/scripts/xzdiff], [chmod +x src/scripts/xzdiff])
|
|
|
|
AC_CONFIG_FILES([src/scripts/xzgrep], [chmod +x src/scripts/xzgrep])
|
|
|
|
AC_CONFIG_FILES([src/scripts/xzmore], [chmod +x src/scripts/xzmore])
|
|
|
|
AC_CONFIG_FILES([src/scripts/xzless], [chmod +x src/scripts/xzless])
|
2007-12-08 23:42:33 +01:00
|
|
|
|
|
|
|
AC_OUTPUT
|
2009-11-20 11:51:19 +01:00
|
|
|
|
|
|
|
# Some warnings
|
|
|
|
if test x$tuklib_cv_physmem_method = xunknown; then
|
|
|
|
echo
|
|
|
|
echo "WARNING:"
|
|
|
|
echo "No supported method to detect the amount of RAM."
|
|
|
|
echo "Consider using --enable-assume-ram (if you didn't already)"
|
|
|
|
echo "or make a patch to add support for this operating system."
|
|
|
|
fi
|
|
|
|
|
2011-04-19 09:44:48 +02:00
|
|
|
if test x$tuklib_cv_cpucores_method = xunknown; then
|
|
|
|
echo
|
|
|
|
echo "WARNING:"
|
|
|
|
echo "No supported method to detect the number of CPU cores."
|
|
|
|
fi
|
2013-09-17 10:52:28 +02:00
|
|
|
|
|
|
|
if test "x$enable_threads$enable_small" = xnoyes; then
|
|
|
|
echo
|
|
|
|
echo "NOTE:"
|
|
|
|
echo "liblzma will be thread unsafe due the combination"
|
|
|
|
echo "of --disable-threads --enable-small."
|
|
|
|
fi
|