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:
Jonathan Wakely 2018-06-18 17:01:24 +01:00 committed by Jonathan Wakely
parent 3be9ded290
commit 7314856c61
5 changed files with 770 additions and 556 deletions

View File

@ -1,5 +1,12 @@
2018-06-18 Jonathan Wakely <jwakely@redhat.com> 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 LWG 3035. std::allocator's constructors should be constexpr
* include/bits/allocator.h (allocator): Add constexpr to constructors * include/bits/allocator.h (allocator): Add constexpr to constructors
for C++2a. Replace dynamic exception specifications with NOTHROW for C++2a. Replace dynamic exception specifications with NOTHROW

View File

@ -4309,143 +4309,194 @@ AC_DEFUN([GLIBCXX_ENABLE_FILESYSTEM_TS], [
]) ])
dnl dnl
dnl Check whether the library calls required by the Filesystem TS are present dnl Check whether the library calls required by the Filesystem TS are present.
dnl and define _GLIBCXX_USE_REALPATH and _GLIBCXX_USE_UTIMENSAT. 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 dnl
AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
dnl dnl
AC_LANG_SAVE if test $enable_libstdcxx_filesystem_ts = yes; then
AC_LANG_CPLUSPLUS AC_LANG_SAVE
ac_save_CXXFLAGS="$CXXFLAGS" AC_LANG_CPLUSPLUS
CXXFLAGS="$CXXFLAGS -fno-exceptions" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-exceptions"
dnl dnl
AC_MSG_CHECKING([for struct dirent.d_type]) AC_MSG_CHECKING([for struct dirent.d_type])
AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl AC_CACHE_VAL(glibcxx_cv_dirent_d_type, [dnl
GCC_TRY_COMPILE_OR_LINK( GCC_TRY_COMPILE_OR_LINK(
[#include <dirent.h>], [#include <dirent.h>],
[ [
struct dirent d; struct dirent d;
if (sizeof d.d_type) return 0; if (sizeof d.d_type) return 0;
], ],
[glibcxx_cv_dirent_d_type=yes], [glibcxx_cv_dirent_d_type=yes],
[glibcxx_cv_dirent_d_type=no]) [glibcxx_cv_dirent_d_type=no])
]) ])
if test $glibcxx_cv_dirent_d_type = yes; then 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_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 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 dnl

View File

@ -264,7 +264,7 @@
/* Only used in build directory testsuite_hooks.h. */ /* Only used in build directory testsuite_hooks.h. */
#undef HAVE_LIMIT_VMEM #undef HAVE_LIMIT_VMEM
/* Define to 1 if you have the `link' function. */ /* Define if link is available in <unistd.h>. */
#undef HAVE_LINK #undef HAVE_LINK
/* Define if futex syscall is available. */ /* Define if futex syscall is available. */
@ -342,7 +342,7 @@
/* Define to 1 if you have the `quick_exit' function. */ /* Define to 1 if you have the `quick_exit' function. */
#undef HAVE_QUICK_EXIT #undef HAVE_QUICK_EXIT
/* Define to 1 if you have the `readlink' function. */ /* Define if readlink is available in <unistd.h>. */
#undef HAVE_READLINK #undef HAVE_READLINK
/* Define to 1 if you have the `setenv' function. */ /* Define to 1 if you have the `setenv' function. */
@ -414,7 +414,7 @@
/* Define if strxfrm_l is available in <string.h>. */ /* Define if strxfrm_l is available in <string.h>. */
#undef HAVE_STRXFRM_L #undef HAVE_STRXFRM_L
/* Define to 1 if you have the `symlink' function. */ /* Define if symlink is available in <unistd.h>. */
#undef HAVE_SYMLINK #undef HAVE_SYMLINK
/* Define to 1 if the target runtime linker supports binding the same symbol /* Define to 1 if the target runtime linker supports binding the same symbol

997
libstdc++-v3/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -420,7 +420,6 @@ GLIBCXX_CHECK_GTHREADS
# For Filesystem TS. # For Filesystem TS.
AC_CHECK_HEADERS([fcntl.h dirent.h sys/statvfs.h utime.h]) AC_CHECK_HEADERS([fcntl.h dirent.h sys/statvfs.h utime.h])
AC_CHECK_FUNCS(link readlink symlink)
GLIBCXX_ENABLE_FILESYSTEM_TS GLIBCXX_ENABLE_FILESYSTEM_TS
GLIBCXX_CHECK_FILESYSTEM_DEPS GLIBCXX_CHECK_FILESYSTEM_DEPS