Fix bootstrap failure for bare metal due to autoconf link tests
The AC_CHECK_FUNCS tests cause the build to fail for bare metal cross compilers, where link tests are not allowed. Replace them with GCC_TRY_COMPILE_OR_LINK tests instead. Skip all the Filesystem dependency checks if not building the filesystem library. * acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Only check when enable_libstdcxx_filesystem_ts = yes. Check for link, readlink and symlink. * config.h.in: Regenerate. * configure: Regenerate. * configure.ac: Remove AC_CHECK_FUNCS for link, readlink and symlink. From-SVN: r261704
This commit is contained in:
parent
3be9ded290
commit
7314856c61
@ -1,5 +1,12 @@
|
||||
2018-06-18 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Only check when
|
||||
enable_libstdcxx_filesystem_ts = yes. Check for link, readlink and
|
||||
symlink.
|
||||
* config.h.in: Regenerate.
|
||||
* configure: Regenerate.
|
||||
* configure.ac: Remove AC_CHECK_FUNCS for link, readlink and symlink.
|
||||
|
||||
LWG 3035. std::allocator's constructors should be constexpr
|
||||
* include/bits/allocator.h (allocator): Add constexpr to constructors
|
||||
for C++2a. Replace dynamic exception specifications with NOTHROW
|
||||
|
@ -4309,143 +4309,194 @@ AC_DEFUN([GLIBCXX_ENABLE_FILESYSTEM_TS], [
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Check whether the library calls required by the Filesystem TS are present
|
||||
dnl and define _GLIBCXX_USE_REALPATH and _GLIBCXX_USE_UTIMENSAT.
|
||||
dnl Check whether the library calls required by the Filesystem TS are present.
|
||||
dnl Defines:
|
||||
dnl HAVE_STRUCT_DIRENT_D_TYPE
|
||||
dnl _GLIBCXX_USE_REALPATH
|
||||
dnl _GLIBCXX_USE_UTIMENSAT
|
||||
dnl _GLIBCXX_USE_ST_MTIM
|
||||
dnl _GLIBCXX_USE_FCHMOD
|
||||
dnl _GLIBCXX_USE_FCHMODAT
|
||||
dnl _GLIBCXX_USE_SENDFILE
|
||||
dnl HAVE_LINK
|
||||
dnl HAVE_READLINK
|
||||
dnl HAVE_SYMLINK
|
||||
dnl
|
||||
AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
|
||||
dnl
|
||||
AC_LANG_SAVE
|
||||
AC_LANG_CPLUSPLUS
|
||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS -fno-exceptions"
|
||||
if test $enable_libstdcxx_filesystem_ts = yes; then
|
||||
AC_LANG_SAVE
|
||||
AC_LANG_CPLUSPLUS
|
||||
ac_save_CXXFLAGS="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS -fno-exceptions"
|
||||
dnl
|
||||
AC_MSG_CHECKING([for struct dirent.d_type])
|
||||
AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <dirent.h>],
|
||||
[
|
||||
struct dirent d;
|
||||
if (sizeof d.d_type) return 0;
|
||||
],
|
||||
[glibcxx_cv_dirent_d_type=yes],
|
||||
[glibcxx_cv_dirent_d_type=no])
|
||||
])
|
||||
if test $glibcxx_cv_dirent_d_type = yes; then
|
||||
AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1, [Define to 1 if `d_type' is a member of `struct dirent'.])
|
||||
AC_MSG_CHECKING([for struct dirent.d_type])
|
||||
AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <dirent.h>],
|
||||
[
|
||||
struct dirent d;
|
||||
if (sizeof d.d_type) return 0;
|
||||
],
|
||||
[glibcxx_cv_dirent_d_type=yes],
|
||||
[glibcxx_cv_dirent_d_type=no])
|
||||
])
|
||||
if test $glibcxx_cv_dirent_d_type = yes; then
|
||||
AC_DEFINE(HAVE_STRUCT_DIRENT_D_TYPE, 1, [Define to 1 if `d_type' is a member of `struct dirent'.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_dirent_d_type)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for realpath])
|
||||
AC_CACHE_VAL(glibcxx_cv_realpath, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
],
|
||||
[
|
||||
#if _XOPEN_VERSION < 500
|
||||
#error
|
||||
#elif _XOPEN_VERSION >= 700 || defined(PATH_MAX)
|
||||
char *tmp = realpath((const char*)NULL, (char*)NULL);
|
||||
#else
|
||||
#error
|
||||
#endif
|
||||
],
|
||||
[glibcxx_cv_realpath=yes],
|
||||
[glibcxx_cv_realpath=no])
|
||||
])
|
||||
if test $glibcxx_cv_realpath = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_REALPATH, 1, [Define if usable realpath is available in <stdlib.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_realpath)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for utimensat])
|
||||
AC_CACHE_VAL(glibcxx_cv_utimensat, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
],
|
||||
[
|
||||
struct timespec ts[2] = { { 0, UTIME_OMIT }, { 1, 1 } };
|
||||
int i = utimensat(AT_FDCWD, "path", ts, 0);
|
||||
],
|
||||
[glibcxx_cv_utimensat=yes],
|
||||
[glibcxx_cv_utimensat=no])
|
||||
])
|
||||
if test $glibcxx_cv_utimensat = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_UTIMENSAT, 1, [Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and AT_FDCWD in <fcntl.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_utimensat)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for struct stat.st_mtim.tv_nsec])
|
||||
AC_CACHE_VAL(glibcxx_cv_st_mtim, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[ #include <sys/stat.h> ],
|
||||
[
|
||||
struct stat st;
|
||||
return st.st_mtim.tv_nsec;
|
||||
],
|
||||
[glibcxx_cv_st_mtim=yes],
|
||||
[glibcxx_cv_st_mtim=no])
|
||||
])
|
||||
if test $glibcxx_cv_st_mtim = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_ST_MTIM, 1, [Define if struct stat has timespec members.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_st_mtim)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for fchmod])
|
||||
AC_CACHE_VAL(glibcxx_cv_fchmod, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <sys/stat.h>],
|
||||
[fchmod(1, S_IWUSR);],
|
||||
[glibcxx_cv_fchmod=yes],
|
||||
[glibcxx_cv_fchmod=no])
|
||||
])
|
||||
if test $glibcxx_cv_fchmod = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_FCHMOD, 1, [Define if fchmod is available in <sys/stat.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_fchmod)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for fchmodat])
|
||||
AC_CACHE_VAL(glibcxx_cv_fchmodat, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
],
|
||||
[fchmodat(AT_FDCWD, "", 0, AT_SYMLINK_NOFOLLOW);],
|
||||
[glibcxx_cv_fchmodat=yes],
|
||||
[glibcxx_cv_fchmodat=no])
|
||||
])
|
||||
if test $glibcxx_cv_fchmodat = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_FCHMODAT, 1, [Define if fchmodat is available in <sys/stat.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_fchmodat)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for sendfile that can copy files])
|
||||
AC_CACHE_VAL(glibcxx_cv_sendfile, [dnl
|
||||
case "${target_os}" in
|
||||
gnu* | linux* | solaris*)
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <sys/sendfile.h>],
|
||||
[sendfile(1, 2, (off_t*)0, sizeof 1);],
|
||||
[glibcxx_cv_sendfile=yes],
|
||||
[glibcxx_cv_sendfile=no])
|
||||
;;
|
||||
*)
|
||||
glibcxx_cv_sendfile=no
|
||||
;;
|
||||
esac
|
||||
])
|
||||
if test $glibcxx_cv_sendfile = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_SENDFILE, 1, [Define if sendfile is available in <sys/sendfile.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_sendfile)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for link])
|
||||
AC_CACHE_VAL(glibcxx_cv_link, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <unistd.h>],
|
||||
[link("", "");],
|
||||
[glibcxx_cv_link=yes],
|
||||
[glibcxx_cv_link=no])
|
||||
])
|
||||
if test $glibcxx_cv_link = yes; then
|
||||
AC_DEFINE(HAVE_LINK, 1, [Define if link is available in <unistd.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_link)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for readlink])
|
||||
AC_CACHE_VAL(glibcxx_cv_readlink, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <unistd.h>],
|
||||
[char buf[32]; readlink("", buf, sizeof(buf));],
|
||||
[glibcxx_cv_readlink=yes],
|
||||
[glibcxx_cv_readlink=no])
|
||||
])
|
||||
if test $glibcxx_cv_readlink = yes; then
|
||||
AC_DEFINE(HAVE_READLINK, 1, [Define if readlink is available in <unistd.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_readlink)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for symlink])
|
||||
AC_CACHE_VAL(glibcxx_cv_symlink, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <unistd.h>],
|
||||
[symlink("", "");],
|
||||
[glibcxx_cv_symlink=yes],
|
||||
[glibcxx_cv_symlink=no])
|
||||
])
|
||||
if test $glibcxx_cv_symlink = yes; then
|
||||
AC_DEFINE(HAVE_SYMLINK, 1, [Define if symlink is available in <unistd.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_symlink)
|
||||
dnl
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
AC_LANG_RESTORE
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_dirent_d_type)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for realpath])
|
||||
AC_CACHE_VAL(glibcxx_cv_realpath, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
],
|
||||
[
|
||||
#if _XOPEN_VERSION < 500
|
||||
#error
|
||||
#elif _XOPEN_VERSION >= 700 || defined(PATH_MAX)
|
||||
char *tmp = realpath((const char*)NULL, (char*)NULL);
|
||||
#else
|
||||
#error
|
||||
#endif
|
||||
],
|
||||
[glibcxx_cv_realpath=yes],
|
||||
[glibcxx_cv_realpath=no])
|
||||
])
|
||||
if test $glibcxx_cv_realpath = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_REALPATH, 1, [Define if usable realpath is available in <stdlib.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_realpath)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for utimensat])
|
||||
AC_CACHE_VAL(glibcxx_cv_utimensat, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
],
|
||||
[
|
||||
struct timespec ts[2] = { { 0, UTIME_OMIT }, { 1, 1 } };
|
||||
int i = utimensat(AT_FDCWD, "path", ts, 0);
|
||||
],
|
||||
[glibcxx_cv_utimensat=yes],
|
||||
[glibcxx_cv_utimensat=no])
|
||||
])
|
||||
if test $glibcxx_cv_utimensat = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_UTIMENSAT, 1, [Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and AT_FDCWD in <fcntl.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_utimensat)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for struct stat.st_mtim.tv_nsec])
|
||||
AC_CACHE_VAL(glibcxx_cv_st_mtim, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[ #include <sys/stat.h> ],
|
||||
[
|
||||
struct stat st;
|
||||
return st.st_mtim.tv_nsec;
|
||||
],
|
||||
[glibcxx_cv_st_mtim=yes],
|
||||
[glibcxx_cv_st_mtim=no])
|
||||
])
|
||||
if test $glibcxx_cv_st_mtim = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_ST_MTIM, 1, [Define if struct stat has timespec members.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_st_mtim)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for fchmod])
|
||||
AC_CACHE_VAL(glibcxx_cv_fchmod, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <sys/stat.h>],
|
||||
[fchmod(1, S_IWUSR);],
|
||||
[glibcxx_cv_fchmod=yes],
|
||||
[glibcxx_cv_fchmod=no])
|
||||
])
|
||||
if test $glibcxx_cv_fchmod = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_FCHMOD, 1, [Define if fchmod is available in <sys/stat.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_fchmod)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for fchmodat])
|
||||
AC_CACHE_VAL(glibcxx_cv_fchmodat, [dnl
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
],
|
||||
[fchmodat(AT_FDCWD, "", 0, AT_SYMLINK_NOFOLLOW);],
|
||||
[glibcxx_cv_fchmodat=yes],
|
||||
[glibcxx_cv_fchmodat=no])
|
||||
])
|
||||
if test $glibcxx_cv_fchmodat = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_FCHMODAT, 1, [Define if fchmodat is available in <sys/stat.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_fchmodat)
|
||||
dnl
|
||||
AC_MSG_CHECKING([for sendfile that can copy files])
|
||||
AC_CACHE_VAL(glibcxx_cv_sendfile, [dnl
|
||||
case "${target_os}" in
|
||||
gnu* | linux* | solaris*)
|
||||
GCC_TRY_COMPILE_OR_LINK(
|
||||
[#include <sys/sendfile.h>],
|
||||
[sendfile(1, 2, (off_t*)0, sizeof 1);],
|
||||
[glibcxx_cv_sendfile=yes],
|
||||
[glibcxx_cv_sendfile=no])
|
||||
;;
|
||||
*)
|
||||
glibcxx_cv_sendfile=no
|
||||
;;
|
||||
esac
|
||||
])
|
||||
if test $glibcxx_cv_sendfile = yes; then
|
||||
AC_DEFINE(_GLIBCXX_USE_SENDFILE, 1, [Define if sendfile is available in <sys/sendfile.h>.])
|
||||
fi
|
||||
AC_MSG_RESULT($glibcxx_cv_sendfile)
|
||||
dnl
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
AC_LANG_RESTORE
|
||||
])
|
||||
|
||||
dnl
|
||||
|
@ -264,7 +264,7 @@
|
||||
/* Only used in build directory testsuite_hooks.h. */
|
||||
#undef HAVE_LIMIT_VMEM
|
||||
|
||||
/* Define to 1 if you have the `link' function. */
|
||||
/* Define if link is available in <unistd.h>. */
|
||||
#undef HAVE_LINK
|
||||
|
||||
/* Define if futex syscall is available. */
|
||||
@ -342,7 +342,7 @@
|
||||
/* Define to 1 if you have the `quick_exit' function. */
|
||||
#undef HAVE_QUICK_EXIT
|
||||
|
||||
/* Define to 1 if you have the `readlink' function. */
|
||||
/* Define if readlink is available in <unistd.h>. */
|
||||
#undef HAVE_READLINK
|
||||
|
||||
/* Define to 1 if you have the `setenv' function. */
|
||||
@ -414,7 +414,7 @@
|
||||
/* Define if strxfrm_l is available in <string.h>. */
|
||||
#undef HAVE_STRXFRM_L
|
||||
|
||||
/* Define to 1 if you have the `symlink' function. */
|
||||
/* Define if symlink is available in <unistd.h>. */
|
||||
#undef HAVE_SYMLINK
|
||||
|
||||
/* Define to 1 if the target runtime linker supports binding the same symbol
|
||||
|
997
libstdc++-v3/configure
vendored
997
libstdc++-v3/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -420,7 +420,6 @@ GLIBCXX_CHECK_GTHREADS
|
||||
|
||||
# For Filesystem TS.
|
||||
AC_CHECK_HEADERS([fcntl.h dirent.h sys/statvfs.h utime.h])
|
||||
AC_CHECK_FUNCS(link readlink symlink)
|
||||
GLIBCXX_ENABLE_FILESYSTEM_TS
|
||||
GLIBCXX_CHECK_FILESYSTEM_DEPS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user