This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH to fix libiberty configure mysteries
- From: Gabriel Dos Reis <gdr at integrable-solutions dot net>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: gcc-patches at gcc dot gnu dot org, DJ Delorie <dj at redhat dot com>, Ian Lance Taylor <ian at airs dot com>
- Date: 12 Apr 2005 14:53:45 +0200
- Subject: PATCH to fix libiberty configure mysteries
- Organization: Integrable Solutions
- References: <m3fyxyoesz.fsf@uniton.integrable-solutions.net><20050410141551.GA32624@nevyn.them.org><m3fyxymxy6.fsf@uniton.integrable-solutions.net><20050410150749.GA1474@nevyn.them.org>
Daniel Jacobowitz <drow@false.org> writes:
| On Sun, Apr 10, 2005 at 05:52:01PM +0200, Gabriel Dos Reis wrote:
| > Daniel Jacobowitz <drow@false.org> writes:
| >
| > | On Sun, Apr 10, 2005 at 05:02:36PM +0200, Gabriel Dos Reis wrote:
| > | >
| > | > Hi,
| > | >
| > | > The following is from libibtery.h
| > | >
| > | > /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is
| > | > undefined, we haven't run the autoconf check so provide the
| > | > declaration without arguments. If it is 0, we checked and failed
| > | > to find the declaration so provide a fully prototyped one. If it
| > | > is 1, we found it so don't provide any declaration at all. */
| > | >
| > | > However, that appears to be incorrect because what configure output in
| > | > config.h is not HAVE_DECL_XXX, but HAVE_XXX. Therefore, it appears
| > | > that libiberty would be misdetecting declarations -- it thinks
| > | > something is missing, whereas in fact it is not.
| > | >
| > | > Am I missing something here?
| > |
| > | Try adding an AC_CHECK_DECLS call for basename. That will define
| > | HAVE_DECL_BASENAME.
| >
| > Thanks. I tried it, but I did not have much success -- configure is
| > outputting HAVE_BASENAME instead of HAVE_DECL_BASENAME.
|
| You should have both; did you rerun autoheader? AC_CHECK_FUNCS will
| genereate HAVE_BASENAME.
Daniel --
As it turned out, your advice was completely operational. Thanks!
Here is a patch that survided bootstrap and regtest. This patch makes
configure generate appropriate #defines for basename, ffs, asprintf
and vasprintf.
DJ, Ian --
OK to commit?
-- Gaby
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libiberty/ChangeLog,v
retrieving revision 1.565
diff -p -r1.565 ChangeLog
*** ChangeLog 11 Apr 2005 17:49:46 -0000 1.565
--- ChangeLog 12 Apr 2005 11:42:15 -0000
***************
*** 1,3 ****
--- 1,10 ----
+ 2005-04-12 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * configure.ac: Check declarations for basename, ffs, asprintf,
+ vasprintf.
+ * configure: Regenerate.
+ * config.in: Likewise.
+
2005-04-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (CFILES): Add fopen_unlocked.c.
Index: config.in
===================================================================
RCS file: /cvs/gcc/gcc/libiberty/config.in,v
retrieving revision 1.39
diff -p -r1.39 config.in
*** config.in 11 Apr 2005 17:49:47 -0000 1.39
--- config.in 12 Apr 2005 11:42:15 -0000
***************
*** 40,45 ****
--- 40,60 ----
/* Define to 1 if you have the `clock' function. */
#undef HAVE_CLOCK
+ /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
+ don't. */
+ #undef HAVE_DECL_ASPRINTF
+
+ /* Define to 1 if you have the declaration of `basename', and to 0 if you
+ don't. */
+ #undef HAVE_DECL_BASENAME
+
+ /* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
+ #undef HAVE_DECL_FFS
+
+ /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
+ don't. */
+ #undef HAVE_DECL_VASPRINTF
+
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
Index: configure
===================================================================
RCS file: /cvs/gcc/gcc/libiberty/configure,v
retrieving revision 1.92
diff -p -r1.92 configure
*** configure 11 Apr 2005 17:49:47 -0000 1.92
--- configure 12 Apr 2005 11:42:16 -0000
*************** _ACEOF
*** 5000,5005 ****
--- 5000,5287 ----
fi
done
+ echo "$as_me:$LINENO: checking whether basename is declared" >&5
+ echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_basename+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef basename
+ char *p = (char *) basename;
+ #endif
+
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_basename=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_basename=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_basename" >&6
+ if test $ac_cv_have_decl_basename = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_BASENAME 1
+ _ACEOF
+
+
+ else
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_BASENAME 0
+ _ACEOF
+
+
+ fi
+ echo "$as_me:$LINENO: checking whether ffs is declared" >&5
+ echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_ffs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef ffs
+ char *p = (char *) ffs;
+ #endif
+
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_ffs=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_ffs=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6
+ if test $ac_cv_have_decl_ffs = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FFS 1
+ _ACEOF
+
+
+ else
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_FFS 0
+ _ACEOF
+
+
+ fi
+ echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
+ echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_asprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef asprintf
+ char *p = (char *) asprintf;
+ #endif
+
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_asprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_asprintf=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6
+ if test $ac_cv_have_decl_asprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ASPRINTF 1
+ _ACEOF
+
+
+ else
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_ASPRINTF 0
+ _ACEOF
+
+
+ fi
+ echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
+ echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6
+ if test "${ac_cv_have_decl_vasprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ $ac_includes_default
+ int
+ main ()
+ {
+ #ifndef vasprintf
+ char *p = (char *) vasprintf;
+ #endif
+
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_vasprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_vasprintf=no
+ fi
+ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
+ echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6
+ if test $ac_cv_have_decl_vasprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_VASPRINTF 1
+ _ACEOF
+
+
+ else
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_DECL_VASPRINTF 0
+ _ACEOF
+
+
+ fi
+
+
cat >>confdefs.h <<\_ACEOF
#define HAVE_SYS_ERRLIST 1
Index: configure.ac
===================================================================
RCS file: /cvs/gcc/gcc/libiberty/configure.ac,v
retrieving revision 1.20
diff -p -r1.20 configure.ac
*** configure.ac 11 Apr 2005 17:49:47 -0000 1.20
--- configure.ac 12 Apr 2005 11:42:16 -0000
*************** if test "x" = "y"; then
*** 282,287 ****
--- 282,288 ----
sysconf times sbrk gettimeofday ffs snprintf vsnprintf \
pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \
realpath canonicalize_file_name __fsetlocking)
+ AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf])
AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.])
AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])