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>
* 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

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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