mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-24 11:41:07 +00:00
d95ffd4cfd
This patch continues removing architecture-specific cases from non-architecture-specific files by moving the logic to use directories such as /lib64 out of sysdeps/gnu/configure.ac. A new macro LIBC_SLIBDIR_RTLDDIR is created that sysdeps configure scripts can use to declare the library directories to be used; the logic was previously duplicated in configure fragments for aarch64, mips and x32 as well as in sysdeps/gnu/configure.ac. This macro is used directly in sysdeps/gnu/configure.ac only to provide the /lib default (the logic saying that with --prefix=/usr shared libraries go in /lib not /usr/lib); the architecture cases formerly there are moved into various new or existing configure.ac files. The new macro is also used in the various architecture fragments that already had such logic. In the x32 there was previously a configure fragment, but it was a directly written one without a .ac file; now a .ac file is used there instead to generate configure. Tested x86_64 that the installed shared libraries, and the directory structure of the installation, are unchanged by this patch. There is an old bug report - bug 6441 - about library directories changing after reconfiguring. If this is still applicable - and I haven't attempted to confirm it or review the old patch pointed to in that bug - then this patch should reduce the number of places needing changing in any fix. * aclocal.m4 (LIBC_SLIBDIR_RTLDDIR): New macro. * sysdeps/gnu/configure.ac: Use LIBC_SLIBDIR_RTLDDIR. Remove cases for individual architectures. * sysdeps/gnu/configure: Regenerated. * sysdeps/unix/sysv/linux/aarch64/configure.ac: Use LIBC_SLIBDIR_RTLDDIR. * sysdeps/unix/sysv/linux/aarch64/configure: Regenerated. * sysdeps/unix/sysv/linux/mips/configure.ac: Use LIBC_SLIBDIR_RTLDDIR. * sysdeps/unix/sysv/linux/mips/configure: Regenerated. * sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac: Use LIBC_SLIBDIR_RTLDDIR. * sysdeps/unix/sysv/linux/powerpc/powerpc64/configure: Regenerated. * sysdeps/unix/sysv/linux/s390/s390-64/configure.ac: New file. * sysdeps/unix/sysv/linux/s390/s390-64/configure: New generated file. * sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/configure: New generated file. * sysdeps/unix/sysv/linux/x86_64/64/configure.ac: New file. * sysdeps/unix/sysv/linux/x86_64/64/configure: New generated file. * sysdeps/unix/sysv/linux/x86_64/x32/configure.ac: New file. * sysdeps/unix/sysv/linux/x86_64/x32/configure: Generate.
302 lines
9.4 KiB
Plaintext
302 lines
9.4 KiB
Plaintext
dnl We require that everyone use exactly the same Autoconf version so that
|
|
dnl the internal functions defined and used by the main configure script
|
|
dnl match those expected by the fragments.
|
|
m4_define([GLIBC_AUTOCONF_VERSION], [2.68])
|
|
m4_if(m4_defn([AC_AUTOCONF_VERSION]), GLIBC_AUTOCONF_VERSION, [],
|
|
[m4_fatal(m4_flatten(
|
|
Exactly version GLIBC_AUTOCONF_VERSION of Autoconf is required but you have
|
|
m4_defn([AC_AUTOCONF_VERSION])
|
|
), [63])])dnl
|
|
dnl
|
|
dnl We define the macro GLIBC_PROVIDES to do an AC_PROVIDE for each macro
|
|
dnl which appears in configure.ac before the sysdep configure scripts are run.
|
|
dnl Each sysdep configure.ac does GLIBC_PROVIDES first, to avoid any
|
|
dnl AC_REQUIREs or AC_BEFOREs duplicating their code.
|
|
dnl
|
|
define([GLIBC_PROVIDES], [dnl
|
|
AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
|
|
AC_PROVIDE([AC_CONFIG_SUBDIRS])dnl
|
|
AC_PROVIDE([_AS_ECHO_N_PREPARE])dnl
|
|
AC_PROVIDE([_AS_ECHO_PREPARE])dnl
|
|
AC_PROVIDE([_AS_CR_PREPARE])dnl
|
|
AC_PROVIDE([_AS_TR_SH_PREPARE])dnl
|
|
AC_PROVIDE([_AS_VAR_ARITH_PREPARE])dnl
|
|
AC_PROVIDE([AC_PROG_INSTALL])dnl
|
|
AC_PROVIDE([AC_PROG_CC])dnl
|
|
AC_PROVIDE([AC_PROG_CPP])dnl
|
|
AC_PROVIDE([_AS_PATH_SEPARATOR_PREPARE])dnl
|
|
AC_PROVIDE([_AS_TEST_PREPARE])dnl
|
|
AC_PROVIDE([_AS_BASENAME_PREPARE])dnl
|
|
AC_PROVIDE([_AS_ME_PREPARE])dnl
|
|
AC_PROVIDE([_AS_LINENO_PREPARE])dnl
|
|
AC_PROVIDE([AS_SHELL_FN_as_fn_set_status])dnl
|
|
AC_PROVIDE([AS_SHELL_FN_as_fn_exit])dnl
|
|
AC_PROVIDE([AS_SHELL_FN_as_fn_arith])dnl
|
|
AC_PROVIDE([AS_SHELL_FN_ac_fn_c_try_compile])dnl
|
|
define([AS_MESSAGE_LOG_FD],5)dnl
|
|
define([AS_MESSAGE_FD],6)dnl
|
|
dnl Ripped out of AS_INIT, which does more cruft we do not want.
|
|
m4_wrap([m4_divert_pop([BODY])[]])
|
|
m4_divert_push([BODY])[]dnl
|
|
dnl End of ripped out of AS_INIT.
|
|
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
|
|
define([_AC_LANG], [C])dnl
|
|
])dnl
|
|
dnl
|
|
dnl Check for a symbol
|
|
dnl
|
|
AC_DEFUN([AC_CHECK_SYMBOL], [dnl
|
|
AC_MSG_CHECKING(for $1)
|
|
AC_CACHE_VAL(ac_cv_check_symbol_$1, [dnl
|
|
AC_TRY_LINK(,
|
|
changequote(,)dnl
|
|
extern char *$1[]; puts(*$1);,
|
|
changequote([,])dnl
|
|
ac_cv_check_symbol_$1=yes, ac_cv_check_symbol_$1=no)])
|
|
if test "$ac_cv_check_symbol_$1" = yes; then
|
|
changequote(,)dnl
|
|
ac_tr_symbol=`echo $1 | tr '[a-z]' '[A-Z]'`
|
|
changequote([,])dnl
|
|
AC_DEFINE_UNQUOTED(HAVE_${ac_tr_symbol})
|
|
fi
|
|
AC_MSG_RESULT($ac_cv_check_symbol_$1)])dnl
|
|
dnl
|
|
|
|
dnl Locate a program and check that its version is acceptable.
|
|
dnl AC_PROG_CHECK_VER(var, namelist, version-switch,
|
|
dnl [version-extract-regexp], version-glob [, do-if-fail])
|
|
AC_DEFUN([AC_CHECK_PROG_VER],
|
|
[AC_CHECK_PROGS([$1], [$2])
|
|
if test -z "[$]$1"; then
|
|
ac_verc_fail=yes
|
|
else
|
|
# Found it, now check the version.
|
|
AC_MSG_CHECKING([version of [$]$1])
|
|
changequote(<<,>>)dnl
|
|
ac_prog_version=`<<$>>$1 $3 2>&1 ifelse(<<$4>>,,,
|
|
<<| sed -n 's/^.*patsubst(<<$4>>,/,\/).*$/\1/p'>>)`
|
|
case $ac_prog_version in
|
|
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
|
<<$5>>)
|
|
changequote([,])dnl
|
|
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
|
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
|
|
|
esac
|
|
AC_MSG_RESULT([$ac_prog_version])
|
|
fi
|
|
ifelse([$6],,,
|
|
[if test $ac_verc_fail = yes; then
|
|
$6
|
|
fi])
|
|
])
|
|
|
|
dnl These modifications are to allow for an empty cross compiler tree.
|
|
define([_AC_COMPILER_EXEEXT], [EXEEXT=
|
|
])
|
|
|
|
AC_DEFUN([LIBC_PROG_FOO_GNU],
|
|
[# Most GNU programs take a -v and spit out some text including
|
|
# the word 'GNU'. Some try to read stdin, so give them /dev/null.
|
|
if $1 -o conftest -v </dev/null 2>&1 | grep GNU > /dev/null 2>&1; then
|
|
$2
|
|
else
|
|
$3
|
|
fi
|
|
rm -fr contest*])
|
|
|
|
AC_DEFUN([LIBC_PROG_BINUTILS],
|
|
[# Was a --with-binutils option given?
|
|
if test -n "$path_binutils"; then
|
|
# Make absolute; ensure a single trailing slash.
|
|
path_binutils=`(cd $path_binutils; pwd) | sed 's%/*$%/%'`
|
|
CC="$CC -B$path_binutils"
|
|
fi
|
|
AS=`$CC -print-prog-name=as`
|
|
LD=`$CC -print-prog-name=ld`
|
|
AR=`$CC -print-prog-name=ar`
|
|
AC_SUBST(AR)
|
|
OBJDUMP=`$CC -print-prog-name=objdump`
|
|
AC_SUBST(OBJDUMP)
|
|
OBJCOPY=`$CC -print-prog-name=objcopy`
|
|
AC_SUBST(OBJCOPY)
|
|
|
|
# Determine whether we are using GNU binutils.
|
|
AC_CACHE_CHECK(whether $AS is GNU as, libc_cv_prog_as_gnu,
|
|
[LIBC_PROG_FOO_GNU($AS, libc_cv_prog_as_gnu=yes, libc_cv_prog_as_gnu=no)])
|
|
rm -f a.out
|
|
gnu_as=$libc_cv_prog_as_gnu
|
|
|
|
AC_CACHE_CHECK(whether $LD is GNU ld, libc_cv_prog_ld_gnu,
|
|
[LIBC_PROG_FOO_GNU($LD, libc_cv_prog_ld_gnu=yes, libc_cv_prog_ld_gnu=no)])
|
|
gnu_ld=$libc_cv_prog_ld_gnu
|
|
])
|
|
|
|
dnl Run a static link test with -nostdlib -nostartfiles.
|
|
dnl LIBC_TRY_LINK_STATIC([code], [action-if-true], [action-if-false])
|
|
AC_DEFUN([LIBC_TRY_LINK_STATIC],
|
|
[cat > conftest.c <<EOF
|
|
int _start (void) { return 0; }
|
|
int __start (void) { return 0; }
|
|
$1
|
|
EOF
|
|
AS_IF([AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
|
|
conftest.c -static -nostartfiles -nostdlib
|
|
1>&AS_MESSAGE_LOG_FD])],
|
|
[$2], [$3])
|
|
rm -f conftest*])
|
|
|
|
dnl Test a compiler option or options with an empty input file.
|
|
dnl LIBC_TRY_CC_OPTION([options], [action-if-true], [action-if-false])
|
|
AC_DEFUN([LIBC_TRY_CC_OPTION],
|
|
[AS_IF([AC_TRY_COMMAND([${CC-cc} $1 -xc /dev/null -S -o /dev/null])],
|
|
[$2], [$3])])
|
|
|
|
dnl Find and source sysdeps/*/preconfigure.
|
|
dnl LIBC_PRECONFIGURE([$srcdir], [for])
|
|
AC_DEFUN([LIBC_PRECONFIGURE], [dnl
|
|
if frags=`ls -d $1/sysdeps/*/preconfigure 2> /dev/null`
|
|
then
|
|
AC_MSG_CHECKING($2 preconfigure fragments)
|
|
for frag in $frags; do
|
|
name=`echo "$frag" | sed 's@/[[^/]]*[$]@@;s@^.*/@@'`
|
|
echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
|
|
. "$frag"
|
|
done
|
|
AC_MSG_RESULT()
|
|
fi])
|
|
|
|
# These two macros are taken from GCC's config/acx.m4.
|
|
dnl Support the --with-pkgversion configure option.
|
|
dnl ACX_PKGVERSION(default-pkgversion)
|
|
AC_DEFUN([ACX_PKGVERSION],[
|
|
AC_ARG_WITH(pkgversion,
|
|
AS_HELP_STRING([--with-pkgversion=PKG],
|
|
[Use PKG in the version string in place of "$1"]),
|
|
[case "$withval" in
|
|
yes) AC_MSG_ERROR([package version not specified]) ;;
|
|
no) PKGVERSION= ;;
|
|
*) PKGVERSION="($withval) " ;;
|
|
esac],
|
|
PKGVERSION="($1) "
|
|
)
|
|
PKGVERSION_TEXI=`echo "$PKGVERSION" | sed 's/@/@@/g'`
|
|
AC_SUBST(PKGVERSION)
|
|
AC_SUBST(PKGVERSION_TEXI)
|
|
])
|
|
|
|
dnl Support the --with-bugurl configure option.
|
|
dnl ACX_BUGURL(default-bugurl)
|
|
AC_DEFUN([ACX_BUGURL],[
|
|
AC_ARG_WITH(bugurl,
|
|
AS_HELP_STRING([--with-bugurl=URL],
|
|
[Direct users to URL to report a bug]),
|
|
[case "$withval" in
|
|
yes) AC_MSG_ERROR([bug URL not specified]) ;;
|
|
no) BUGURL=
|
|
;;
|
|
*) BUGURL="$withval"
|
|
;;
|
|
esac],
|
|
BUGURL="$1"
|
|
)
|
|
case ${BUGURL} in
|
|
"")
|
|
REPORT_BUGS_TO=
|
|
REPORT_BUGS_TEXI=
|
|
;;
|
|
*)
|
|
REPORT_BUGS_TO="<$BUGURL>"
|
|
REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`}
|
|
;;
|
|
esac;
|
|
AC_SUBST(REPORT_BUGS_TO)
|
|
AC_SUBST(REPORT_BUGS_TEXI)
|
|
])
|
|
|
|
dnl Check linker option support.
|
|
dnl LIBC_LINKER_FEATURE([ld_option], [cc_option], [action-if-true], [action-if-false])
|
|
AC_DEFUN([LIBC_LINKER_FEATURE],
|
|
[AC_MSG_CHECKING([for linker that supports $1])
|
|
libc_linker_feature=no
|
|
if test x"$gnu_ld" = x"yes"; then
|
|
libc_linker_check=`$LD -v --help 2>/dev/null | grep "\$1"`
|
|
if test -n "$libc_linker_check"; then
|
|
cat > conftest.c <<EOF
|
|
int _start (void) { return 42; }
|
|
EOF
|
|
if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
|
|
$2 -nostdlib -nostartfiles
|
|
-fPIC -shared -o conftest.so conftest.c
|
|
1>&AS_MESSAGE_LOG_FD])
|
|
then
|
|
libc_linker_feature=yes
|
|
fi
|
|
rm -f conftest*
|
|
fi
|
|
fi
|
|
if test $libc_linker_feature = yes; then
|
|
$3
|
|
else
|
|
$4
|
|
fi
|
|
AC_MSG_RESULT($libc_linker_feature)])
|
|
|
|
dnl Add a makefile variable, with value set from a shell string
|
|
dnl (expanded by the shell inside double quotes), to config.make.
|
|
dnl LIBC_CONFIG_VAR(make-variable, shell-value)
|
|
AC_DEFUN([LIBC_CONFIG_VAR],
|
|
[config_vars="$config_vars
|
|
$1 = $2"])
|
|
|
|
dnl Check that function FUNC was inlined as a builtin. The code fragment
|
|
dnl CODE is compiled with additional options CC_OPTION. If FUNC is
|
|
dnl not found in the assembly then it is assumed the compiler has support
|
|
dnl for this builtin and has inlined the call. If the compiler has the
|
|
dnl feature then ACTION-IF-TRUE is called, otherwise ACTION-IF-FALSE.
|
|
dnl It is up to the caller to provide a CC_OPTION that ensures the
|
|
dnl builtin is inlined if present.
|
|
dnl Warning: This may not work for some machines. For example on ARM the
|
|
dnl ABI dictates that some functions should not be inlined and instead
|
|
dnl should be provided by a compiler helper library e.g. __aeabi_memcpy.
|
|
dnl This is done to reduce code size.
|
|
dnl LIBC_COMPILER_BUILTIN([func], [code], [cc_option], [action-if-true], [action-if-false])
|
|
AC_DEFUN([LIBC_COMPILER_BUILTIN_INLINED],
|
|
[AC_MSG_CHECKING([for compiler support of inlined builtin function $1])
|
|
libc_compiler_builtin_inlined=no
|
|
cat > conftest.c <<EOF
|
|
int _start (void) { $2 return 0; }
|
|
EOF
|
|
if ! AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
|
|
$3 -nostdlib -nostartfiles
|
|
-S conftest.c -o - | fgrep "$1"
|
|
1>&AS_MESSAGE_LOG_FD])
|
|
then
|
|
libc_compiler_builtin_inlined=yes
|
|
fi
|
|
rm -f conftest*
|
|
if test $libc_compiler_builtin_inlined = yes; then
|
|
$4
|
|
else
|
|
$5
|
|
fi
|
|
AC_MSG_RESULT($libc_compiler_builtin_inlined)])
|
|
|
|
dnl Default to slibdir named SLIBDIR instead of "lib", and rtlddir
|
|
dnl named RTLDDIR instead of "lib". This is used to put 64-bit
|
|
dnl libraries in /lib64.
|
|
dnl LIBC_SLIBDIR_RTLDDIR([slibdir], [rtlddir])
|
|
AC_DEFUN([LIBC_SLIBDIR_RTLDDIR],
|
|
[test -n "$libc_cv_slibdir" ||
|
|
case "$prefix" in
|
|
/usr | /usr/)
|
|
libc_cv_slibdir=/$1
|
|
libc_cv_rtlddir=/$2
|
|
if test "$libdir" = '${exec_prefix}/lib'; then
|
|
libdir='${exec_prefix}/$1';
|
|
# Locale data can be shared between 32-bit and 64-bit libraries.
|
|
libc_cv_localedir='${exec_prefix}/lib/locale'
|
|
fi
|
|
;;
|
|
esac])
|