Retested on x86_64 darwin.  This adds in the observation from Jose.
I think if it gets more complex than this, we really need to punt it
to libiberty.
OK for trunk?  (thinking to wait until the c++14 changes have landed).
thanks
Iain

--- 8< ---

This adds a configure check for get_current_dir_name and falls back
to getcwd() if it is not available on the host.

        PR cobol/119301

gcc/cobol/ChangeLog:

        * util.cc: Check for the availability of get_current_dir_name
        snf fall back to getcwd() if it is not present on the host.

gcc/ChangeLog:

        * config.in: Regenerate.
        * configure: Regenerate.
        * configure.ac: Add check for get_current_dir_name.

Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
---
 gcc/cobol/util.cc | 19 +++++++++++++++++++
 gcc/config.in     |  6 ++++++
 gcc/configure     |  2 +-
 gcc/configure.ac  |  2 +-
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index 3872f57aeb0..db94abde949 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -72,6 +72,25 @@ extern int yyparse(void);
 
 extern int demonstration_administrator(int N);
 
+#if !defined (HAVE_GET_CURRENT_DIR_NAME)
+/* Posix platforms might not have get_current_dir_name but should have
+   getcwd() and PATH_MAX.  */
+#if __has_include (<limits.h>)
+# include <limits.h>
+#endif
+/* The Hurd doesn't define PATH_MAX.  */
+#if !defined (PATH_MAX) && defined(__GNU__)
+# define PATH_MAX 4096
+#endif
+static inline char *
+get_current_dir_name ()
+{
+  /* Use libiberty's allocator here.  */
+  char *buf = (char *) xmalloc (PATH_MAX);
+  return getcwd (buf, PATH_MAX);
+}
+#endif
+
 const char *
 symbol_type_str( enum symbol_type_t type )
 {
diff --git a/gcc/config.in b/gcc/config.in
index 7023209f2ed..0d8a6ba1808 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -1624,6 +1624,12 @@
 #endif
 
 
+/* Define to 1 if you have the `get_current_dir_name' function. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_GET_CURRENT_DIR_NAME
+#endif
+
+
 /* Define to 1 if using GNU as. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_GNU_AS
diff --git a/gcc/configure b/gcc/configure
index 2679a05d9c6..063b9ce6701 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -10640,7 +10640,7 @@ for ac_func in times clock kill getrlimit setrlimit 
atoq \
        popen sysconf strsignal getrusage nl_langinfo \
        gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
        clearerr_unlocked feof_unlocked   ferror_unlocked fflush_unlocked 
fgetc_unlocked fgets_unlocked   fileno_unlocked fprintf_unlocked fputc_unlocked 
fputs_unlocked   fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked  
 putchar_unlocked putc_unlocked madvise mallinfo mallinfo2 fstatat getauxval \
-       clock_gettime munmap msync
+       clock_gettime munmap msync get_current_dir_name
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 78973755f7a..3243472680c 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1574,7 +1574,7 @@ AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoq \
        popen sysconf strsignal getrusage nl_langinfo \
        gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
        gcc_UNLOCKED_FUNCS madvise mallinfo mallinfo2 fstatat getauxval \
-       clock_gettime munmap msync)
+       clock_gettime munmap msync get_current_dir_name)
 
 # At least for glibc, clock_gettime is in librt.  But don't pull that
 # in if it still doesn't give us the function we want.
-- 
2.39.2 (Apple Git-143)

Reply via email to