On Tue, Mar 18, 2025 at 5:57 PM Iain Sandoe <iains....@gmail.com> wrote: > > 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).
LGTM. Richard. > 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) >