bb0b1004f8
The code assumed that printing numbers with thousand separators and decimal points would always produce only US-ASCII characters. This was used for buffer sizes (with snprintf(), no overflows) and aligning columns of the progress indicator and --list. That assumption was wrong (e.g. LC_ALL=fi_FI.UTF-8 with glibc), so multibyte character support was added in this commit. The old way is used if the operating system doesn't have enough multibyte support (e.g. lacks wcwidth()). The sizes of buffers were increased to accomodate multibyte characters. I don't know how big they should be exactly, but they aren't used for anything critical, so it's not too bad. If they still aren't big enough, I hopefully get a bug report. snprintf() takes care of avoiding buffer overflows. Some static buffers were replaced with buffers allocated on stack. double_to_str() was removed. uint64_to_str() and uint64_to_nicestr() now share the static buffer and test for thousand separator support. Integrity check names "None" and "Unknown-N" (2 <= N <= 15) were marked to be translated. I had forgot these, plus they wouldn't have worked correctly anyway before this commit, because printing tables with multibyte strings didn't work. Thanks to Marek Černocký for reporting the bug about misaligned table columns in --list output.
695 lines
20 KiB
Plaintext
695 lines
20 KiB
Plaintext
# -*- Autoconf -*-
|
|
# Process this file with autoconf to produce a configure script.
|
|
|
|
###############################################################################
|
|
#
|
|
# Author: Lasse Collin
|
|
#
|
|
# This file has been put into the public domain.
|
|
# You can do whatever you want with this file.
|
|
#
|
|
###############################################################################
|
|
|
|
# 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.
|
|
|
|
AC_PREREQ([2.64])
|
|
|
|
AC_INIT([XZ Utils], m4_esyscmd([/bin/sh version.sh]),
|
|
[lasse.collin@tukaani.org], [xz], [http://tukaani.org/xz/])
|
|
AC_CONFIG_SRCDIR([src/liblzma/common/common.h])
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_HEADER([config.h])
|
|
|
|
echo
|
|
echo "$PACKAGE_STRING"
|
|
|
|
echo
|
|
echo "System type:"
|
|
# This is needed to know if assembler optimizations can be used.
|
|
AC_CANONICAL_HOST
|
|
|
|
# We do some special things on Windows (32-bit or 64-bit) builds.
|
|
case $host_os in
|
|
mingw* | cygwin*) is_w32=yes ;;
|
|
*) is_w32=no ;;
|
|
esac
|
|
AM_CONDITIONAL([COND_W32], [test "$is_w32" = yes])
|
|
|
|
# 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.
|
|
case $host_os in
|
|
cygwin) LN_EXEEXT= ;;
|
|
*) LN_EXEEXT='$(EXEEXT)' ;;
|
|
esac
|
|
AC_SUBST([LN_EXEEXT])
|
|
|
|
echo
|
|
echo "Configure options:"
|
|
AM_CFLAGS=
|
|
|
|
|
|
#############
|
|
# Debugging #
|
|
#############
|
|
|
|
AC_MSG_CHECKING([if debugging code should be compiled])
|
|
AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [Enable debugging code.]),
|
|
[], enable_debug=no)
|
|
if test "x$enable_debug" = xyes; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_DEFINE([NDEBUG], [1], [Define to 1 to disable debugging code.])
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
|
|
###########
|
|
# Filters #
|
|
###########
|
|
|
|
m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,delta,x86,powerpc,ia64,arm,armthumb,sparc])dnl
|
|
m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,sparc])
|
|
m4_define([LZ_FILTERS], [lzma1,lzma2])
|
|
|
|
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])
|
|
AC_ARG_ENABLE([encoders], AC_HELP_STRING([--enable-encoders=LIST],
|
|
[Comma-separated list of encoders to build. Default=all.
|
|
Available encoders:]
|
|
m4_translit(m4_defn([SUPPORTED_FILTERS]), [,], [ ])),
|
|
[], [enable_encoders=SUPPORTED_FILTERS])
|
|
enable_encoders=`echo "$enable_encoders" | sed 's/,/ /g'`
|
|
if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then
|
|
AC_MSG_RESULT([(none)])
|
|
else
|
|
AC_DEFINE([HAVE_ENCODER], [1],
|
|
[Define to 1 if encoder components are enabled.])
|
|
for arg in $enable_encoders
|
|
do
|
|
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])
|
|
;;
|
|
esac
|
|
done
|
|
AC_MSG_RESULT([$enable_encoders])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([which decoders to build])
|
|
AC_ARG_ENABLE([decoders], AC_HELP_STRING([--enable-decoders=LIST],
|
|
[Comma-separated list of decoders to build. Default=all.
|
|
Available decoders are the same as available encoders.]),
|
|
[], [enable_decoders=SUPPORTED_FILTERS])
|
|
enable_decoders=`echo "$enable_decoders" | sed 's/,/ /g'`
|
|
if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then
|
|
AC_MSG_RESULT([(none)])
|
|
else
|
|
AC_DEFINE([HAVE_DECODER], [1],
|
|
[Define to 1 if decoder components are enabled.])
|
|
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.])
|
|
;;])
|
|
*)
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([unknown filter: $arg])
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# LZMA2 requires that LZMA1 is enabled.
|
|
test "x$enable_encoder_lzma2" = xyes && enable_encoder_lzma1=yes
|
|
test "x$enable_decoder_lzma2" = xyes && enable_decoder_lzma1=yes
|
|
|
|
AC_MSG_RESULT([$enable_decoders])
|
|
fi
|
|
|
|
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.])
|
|
fi
|
|
|
|
AM_CONDITIONAL(COND_MAIN_ENCODER, test "x$enable_encoders" != xno && test "x$enable_encoders" != x)
|
|
AM_CONDITIONAL(COND_MAIN_DECODER, test "x$enable_decoders" != xno && test "x$enable_decoders" != x)
|
|
|
|
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
|
|
])
|
|
|
|
AC_MSG_CHECKING([which match finders to build])
|
|
AC_ARG_ENABLE([match-finders], AC_HELP_STRING([--enable-match-finders=LIST],
|
|
[Comma-separated list of match finders to build. Default=all.
|
|
At least one match finder is required for encoding with
|
|
the LZMA1 and LZMA2 filters. Available match finders:]
|
|
m4_translit(m4_defn([SUPPORTED_MATCH_FINDERS]), [,], [ ])), [],
|
|
[enable_match_finders=SUPPORTED_MATCH_FINDERS])
|
|
enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'`
|
|
if test "x$enable_encoder_lz" = xyes ; then
|
|
for arg in $enable_match_finders
|
|
do
|
|
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.])
|
|
;;])
|
|
*)
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([unknown match finder: $arg])
|
|
;;
|
|
esac
|
|
done
|
|
AC_MSG_RESULT([$enable_match_finders])
|
|
else
|
|
AC_MSG_RESULT([(none because not building any LZ-based encoder)])
|
|
fi
|
|
|
|
|
|
####################
|
|
# Integrity checks #
|
|
####################
|
|
|
|
m4_define([SUPPORTED_CHECKS], [crc32,crc64,sha256])
|
|
|
|
m4_foreach([NAME], [SUPPORTED_FILTERS],
|
|
[enable_check_[]NAME=no
|
|
])dnl
|
|
|
|
AC_MSG_CHECKING([which integrity checks to build])
|
|
AC_ARG_ENABLE([checks], AC_HELP_STRING([--enable-checks=LIST],
|
|
[Comma-separated list of integrity checks to build.
|
|
Default=all. Available integrity checks:]
|
|
m4_translit(m4_defn([SUPPORTED_CHECKS]), [,], [ ])),
|
|
[], [enable_checks=SUPPORTED_CHECKS])
|
|
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
|
|
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.])
|
|
;;])
|
|
*)
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([unknown integrity check: $arg])
|
|
;;
|
|
esac
|
|
done
|
|
AC_MSG_RESULT([$enable_checks])
|
|
fi
|
|
if test "x$enable_checks_crc32" = xno ; then
|
|
AC_MSG_ERROR([For now, the CRC32 check must always be enabled.])
|
|
fi
|
|
|
|
m4_foreach([NAME], [SUPPORTED_CHECKS],
|
|
[AM_CONDITIONAL(COND_CHECK_[]m4_toupper(NAME), test "x$enable_check_[]NAME" = xyes)
|
|
])dnl
|
|
|
|
|
|
###########################
|
|
# Assembler optimizations #
|
|
###########################
|
|
|
|
AC_MSG_CHECKING([if assembler optimizations should be used])
|
|
AC_ARG_ENABLE([assembler], AC_HELP_STRING([--disable-assembler],
|
|
[Do not use assembler optimizations even if such exist
|
|
for the architecture.]),
|
|
[], [enable_assembler=yes])
|
|
if test "x$enable_assembler" = xyes; then
|
|
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.
|
|
linux* | *bsd* | mingw* | cygwin*)
|
|
case $host_cpu in
|
|
i?86) enable_assembler=x86 ;;
|
|
x86_64) enable_assembler=x86_64 ;;
|
|
esac
|
|
;;
|
|
esac
|
|
fi
|
|
case $enable_assembler in
|
|
x86 | x86_64 | no)
|
|
AC_MSG_RESULT([$enable_assembler])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'.])
|
|
;;
|
|
esac
|
|
AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86)
|
|
AM_CONDITIONAL(COND_ASM_X86_64, test "x$enable_assembler" = xx86_64)
|
|
|
|
|
|
#####################
|
|
# Size optimization #
|
|
#####################
|
|
|
|
AC_MSG_CHECKING([if small size is preferred over speed])
|
|
AC_ARG_ENABLE([small], AC_HELP_STRING([--enable-small],
|
|
[Make liblzma smaller and a little slower.
|
|
This is disabled by default to optimize for speed.]),
|
|
[], [enable_small=no])
|
|
if test "x$enable_small" = xyes; then
|
|
AC_DEFINE([HAVE_SMALL], [1], [Define to 1 if optimizing for size.])
|
|
elif test "x$enable_small" != xno; then
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([--enable-small accepts only \`yes' or \`no'])
|
|
fi
|
|
AC_MSG_RESULT([$enable_small])
|
|
AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes)
|
|
|
|
|
|
#############
|
|
# Threading #
|
|
#############
|
|
|
|
AC_MSG_CHECKING([if threading support is wanted])
|
|
AC_ARG_ENABLE([threads], AC_HELP_STRING([--disable-threads],
|
|
[Disable threading support.
|
|
This makes some things thread-unsafe.]),
|
|
[], [enable_threads=yes])
|
|
if test "x$enable_threads" != xyes && test "x$enable_threads" != xno; then
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([--enable-threads accepts only \`yes' or \`no'])
|
|
fi
|
|
AC_MSG_RESULT([$enable_threads])
|
|
# We use the actual result a little later.
|
|
|
|
|
|
#########################
|
|
# Assumed amount of RAM #
|
|
#########################
|
|
|
|
# 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.
|
|
AC_MSG_CHECKING([how much RAM to assume if the real amount is unknown])
|
|
AC_ARG_ENABLE([assume-ram], AC_HELP_STRING([--enable-assume-ram=SIZE],
|
|
[If and only if the real amount of RAM cannot be determined,
|
|
assume SIZE MiB. The default is 128 MiB. This affects the
|
|
default memory usage limit.]),
|
|
[], [enable_assume_ram=128])
|
|
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.])
|
|
|
|
|
|
############################################
|
|
# xz/xzdec/lzmadec linkage against liblzma #
|
|
############################################
|
|
|
|
# Link the xz, xzdec, and lzmadec command line tools against static liblzma
|
|
# unless using --enable-dynamic. Using static liblzma gives a little bit
|
|
# faster executable on x86, because no register is wasted for PIC. We also
|
|
# have one dependency less, which allows users to more freely copy the xz
|
|
# binary to other boxes. However, I wouldn't be surprised if distro
|
|
# maintainers still prefer dynamic linking, so let's make it easy for them.
|
|
|
|
AC_MSG_CHECKING([how programs should be linked against liblzma])
|
|
AC_ARG_ENABLE([dynamic], [AC_HELP_STRING([--enable-dynamic=TYPE],
|
|
[Set how command line tools are linked against liblzma.
|
|
TYPE can be mixed, yes, or no. The default is mixed.])],
|
|
[], [enable_dynamic=mixed])
|
|
case $enable_dynamic in
|
|
mixed)
|
|
AC_MSG_RESULT([mixed (some dynamically, some statically)])
|
|
;;
|
|
yes)
|
|
AC_MSG_RESULT([dynamically])
|
|
;;
|
|
no)
|
|
AC_MSG_RESULT([statically])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([])
|
|
AC_MSG_ERROR([--enable-dynamic accepts only \`mixed', \`yes', or \`no'])
|
|
;;
|
|
esac
|
|
# We use the actual results later, because we don't know yet
|
|
# if --disable-shared or --disable-static was used.
|
|
|
|
|
|
###############################################################################
|
|
# Checks for programs.
|
|
###############################################################################
|
|
|
|
echo
|
|
gl_POSIX_SHELL
|
|
if test -z "$POSIX_SHELL" ; then
|
|
AC_MSG_ERROR([No POSIX conforming shell (sh) was found.])
|
|
fi
|
|
|
|
echo
|
|
echo "Initializing Automake:"
|
|
|
|
AM_INIT_AUTOMAKE([1.10 foreign tar-v7 filename-length-max=99])
|
|
AC_PROG_LN_S
|
|
|
|
AC_PROG_CC_C99
|
|
if test x$ac_cv_prog_cc_c99 = xno ; then
|
|
AC_MSG_ERROR([No C99 compiler was found.])
|
|
fi
|
|
|
|
AM_PROG_CC_C_O
|
|
AM_PROG_AS
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
|
|
if test "x$enable_threads" = xyes; then
|
|
echo
|
|
echo "Threading support:"
|
|
ACX_PTHREAD
|
|
LIBS="$LIBS $PTHREAD_LIBS"
|
|
AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS"
|
|
CC="$PTHREAD_CC"
|
|
fi
|
|
|
|
echo
|
|
echo "Initializing Libtool:"
|
|
LT_PREREQ([2.2])
|
|
LT_INIT([win32-dll])
|
|
LT_LANG([Windows Resource])
|
|
|
|
# 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])
|
|
|
|
|
|
###############################################################################
|
|
# Checks for libraries.
|
|
###############################################################################
|
|
|
|
echo
|
|
echo "Initializing gettext:"
|
|
AM_GNU_GETTEXT_VERSION([0.16.1])
|
|
AM_GNU_GETTEXT([external])
|
|
|
|
###############################################################################
|
|
# 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.])])
|
|
|
|
|
|
###############################################################################
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
###############################################################################
|
|
|
|
dnl We don't need these as long as we need a C99 compiler anyway.
|
|
dnl AC_C_INLINE
|
|
dnl AC_C_RESTRICT
|
|
|
|
AC_HEADER_STDBOOL
|
|
|
|
AC_TYPE_UINT8_T
|
|
AC_TYPE_UINT16_T
|
|
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])
|
|
|
|
# The command line tool can copy high resolution timestamps if such
|
|
# information is availabe in struct stat. Otherwise one second accuracy
|
|
# 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])
|
|
|
|
AC_SYS_LARGEFILE
|
|
AC_C_BIGENDIAN
|
|
|
|
|
|
###############################################################################
|
|
# Checks for library functions.
|
|
###############################################################################
|
|
|
|
# Gnulib replacements as needed
|
|
gl_GETOPT
|
|
|
|
# Find the best function to set timestamps.
|
|
AC_CHECK_FUNCS([futimens futimes futimesat utimes utime], [break])
|
|
|
|
TUKLIB_PROGNAME
|
|
TUKLIB_INTEGER
|
|
TUKLIB_PHYSMEM
|
|
TUKLIB_CPUCORES
|
|
TUKLIB_MBSTR
|
|
|
|
|
|
###############################################################################
|
|
# If using GCC, set some additional AM_CFLAGS:
|
|
###############################################################################
|
|
|
|
if test "$GCC" = yes ; then
|
|
echo
|
|
echo "GCC extensions:"
|
|
fi
|
|
|
|
# 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
|
|
|
|
if test "$GCC" = yes ; then
|
|
# Enable as much warnings as possible. These commented warnings won't
|
|
# work for this package though:
|
|
# * -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.
|
|
# * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations
|
|
# don't seem so useful here; at least the last one gives some
|
|
# warnings which are not bugs.
|
|
for NEW_FLAG in \
|
|
-Wall \
|
|
-Wextra \
|
|
-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
|
|
do
|
|
AC_MSG_CHECKING([if $CC accepts $NEW_FLAG])
|
|
OLD_CFLAGS="$CFLAGS"
|
|
CFLAGS="$CFLAGS $NEW_FLAG"
|
|
AC_COMPILE_IFELSE([void foo(void) { }], [
|
|
AM_CFLAGS="$AM_CFLAGS $NEW_FLAG"
|
|
AC_MSG_RESULT([yes])
|
|
], [
|
|
AC_MSG_RESULT([no])
|
|
])
|
|
CFLAGS="$OLD_CFLAGS"
|
|
done
|
|
|
|
AC_ARG_ENABLE([werror],
|
|
AC_HELP_STRING([--enable-werror], [Enable -Werror to abort
|
|
compilation on all compiler warnings.]),
|
|
[], [enable_werror=no])
|
|
if test "x$enable_werror" = "xyes"; then
|
|
AM_CFLAGS="$AM_CFLAGS -Werror"
|
|
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")
|
|
|
|
# Add default AM_CFLAGS.
|
|
AC_SUBST([AM_CFLAGS])
|
|
|
|
# Set additional flags for static/dynamic linking. The idea is that every
|
|
# program (not library) being built will use either STATIC_{CPPFLAGS,LDFLAGS}
|
|
# or DYNAMIC_{CPPFLAGS,LDFLAGS} depending on which type of linkage is
|
|
# preferred. These preferences get overridden by use of --disable-static,
|
|
# --disable-shared, or --enable-dynamic.
|
|
#
|
|
# This is quite messy, because we want to use LZMA_API_STATIC when linking
|
|
# against static liblzma. It's needed on Windows.
|
|
if test "x$enable_static" = xno; then
|
|
enable_dynamic=yes
|
|
fi
|
|
if test "x$enable_shared" = xno; then
|
|
enable_dynamic=no
|
|
fi
|
|
case $enable_dynamic in
|
|
yes)
|
|
STATIC_CPPFLAGS=
|
|
STATIC_LDFLAGS=
|
|
DYNAMIC_CPPFLAGS=
|
|
DYNAMIC_LDFLAGS=
|
|
;;
|
|
mixed)
|
|
STATIC_CPPFLAGS="-DLZMA_API_STATIC"
|
|
STATIC_LDFLAGS="-static"
|
|
DYNAMIC_CPPFLAGS=
|
|
DYNAMIC_LDFLAGS=
|
|
;;
|
|
no)
|
|
STATIC_CPPFLAGS="-DLZMA_API_STATIC"
|
|
STATIC_LDFLAGS="-static"
|
|
DYNAMIC_CPPFLAGS="-DLZMA_API_STATIC"
|
|
DYNAMIC_LDFLAGS="-static"
|
|
;;
|
|
esac
|
|
AC_SUBST([STATIC_CPPFLAGS])
|
|
AC_SUBST([STATIC_LDFLAGS])
|
|
AC_SUBST([DYNAMIC_CPPFLAGS])
|
|
AC_SUBST([DYNAMIC_LDFLAGS])
|
|
|
|
# This is needed for src/scripts.
|
|
xz=`echo xz | sed "$program_transform_name"`
|
|
AC_SUBST([xz])
|
|
|
|
AC_CONFIG_FILES([
|
|
Doxyfile
|
|
Makefile
|
|
po/Makefile.in
|
|
lib/Makefile
|
|
src/Makefile
|
|
src/liblzma/liblzma.pc
|
|
src/liblzma/Makefile
|
|
src/liblzma/api/Makefile
|
|
src/xz/Makefile
|
|
src/xzdec/Makefile
|
|
src/lzmainfo/Makefile
|
|
src/scripts/Makefile
|
|
src/scripts/xzdiff
|
|
src/scripts/xzgrep
|
|
src/scripts/xzmore
|
|
src/scripts/xzless
|
|
tests/Makefile
|
|
debug/Makefile
|
|
])
|
|
|
|
AC_OUTPUT
|
|
|
|
# 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
|
|
|
|
# Not threading yet so don't warn.
|
|
#if test x$tuklib_cv_cpucores_method = xunknown; then
|
|
# echo
|
|
# echo "WARNING:"
|
|
# echo "No supported method to detect the number of CPU cores."
|
|
#fi
|