diff mbox

[SHELL] Fix 64-bit Solaris build

Message ID 20151211130714.GD54973@joyent.com (mailing list archive)
State Changes Requested
Delegated to: Herbert Xu
Headers show

Commit Message

Jonathan Perkin Dec. 11, 2015, 1:07 p.m. UTC
In a 64-bit Solaris environment there is no stat64() function, only
stat().  This conflicts with the stat64 #define used to support
dietlibc/klibc when stat64() is not found and results in:

  ./../config.h:194:16: error: redefinition of 'struct stat'
   #define stat64 stat
                ^
  In file included from cd.c:36:0:
  /usr/include/sys/stat.h:217:8: note: originally defined here
   struct stat {
          ^

Instead, add a AC_CHECK_DECL test for stat64, and only perform the
AC_CHECK_FUNC test if it isn't already defined.
---
 configure.ac | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Herbert Xu June 6, 2016, 2:27 p.m. UTC | #1
On Fri, Dec 11, 2015 at 01:07:14PM +0000, Jonathan Perkin wrote:
> In a 64-bit Solaris environment there is no stat64() function, only
> stat().  This conflicts with the stat64 #define used to support
> dietlibc/klibc when stat64() is not found and results in:
> 
>   ./../config.h:194:16: error: redefinition of 'struct stat'
>    #define stat64 stat
>                 ^
>   In file included from cd.c:36:0:
>   /usr/include/sys/stat.h:217:8: note: originally defined here
>    struct stat {
>           ^
> 
> Instead, add a AC_CHECK_DECL test for stat64, and only perform the
> AC_CHECK_FUNC test if it isn't already defined.

I don't understand, does stat64 exist or not? If it doesn't then
how can AC_CHECK_DECL help? Or do you mean that it only exists as
a macro?

Thanks,
Jonathan Perkin June 6, 2016, 3:22 p.m. UTC | #2
* On 2016-06-06 at 15:27 BST, Herbert Xu wrote:

> On Fri, Dec 11, 2015 at 01:07:14PM +0000, Jonathan Perkin wrote:
> > In a 64-bit Solaris environment there is no stat64() function, only
> > stat().  This conflicts with the stat64 #define used to support
> > dietlibc/klibc when stat64() is not found and results in:
> > 
> >   ./../config.h:194:16: error: redefinition of 'struct stat'
> >    #define stat64 stat
> >                 ^
> >   In file included from cd.c:36:0:
> >   /usr/include/sys/stat.h:217:8: note: originally defined here
> >    struct stat {
> >           ^
> > 
> > Instead, add a AC_CHECK_DECL test for stat64, and only perform the
> > AC_CHECK_FUNC test if it isn't already defined.
> 
> I don't understand, does stat64 exist or not? If it doesn't then
> how can AC_CHECK_DECL help? Or do you mean that it only exists as
> a macro?

Right, it only exists as a macro, defined as

  #define stat64 stat
  
in sys/stat.h.  The AC_CHECK_FUNC test fails as it doesn't pull in any
includes, and cannot find a stat64() function in libc.

Adding the AC_CHECK_DECL test finds the definition and avoids running
the AC_CHECK_FUNC tests if that is the case.
Herbert Xu June 7, 2016, 6:50 a.m. UTC | #3
On Mon, Jun 06, 2016 at 04:22:59PM +0100, Jonathan Perkin wrote:
>
> Right, it only exists as a macro, defined as
> 
>   #define stat64 stat
>   
> in sys/stat.h.  The AC_CHECK_FUNC test fails as it doesn't pull in any
> includes, and cannot find a stat64() function in libc.
> 
> Adding the AC_CHECK_DECL test finds the definition and avoids running
> the AC_CHECK_FUNC tests if that is the case.

OK, how about just changing the AC_CHECK_FUNC to AC_CHECK_DECL?

Please resubmit the patch.

Thanks,
diff mbox

Patch

diff --git a/configure.ac b/configure.ac
index 8ae0dc6..f4c9b87 100644
--- a/configure.ac
+++ b/configure.ac
@@ -139,10 +139,12 @@  if test "$ac_cv_func_signal" != yes; then
 fi
 
 dnl Check for stat64 (dietlibc/klibc).
-AC_CHECK_FUNC(stat64,, [
-	AC_DEFINE(fstat64, fstat, [64-bit operations are the same as 32-bit])
-	AC_DEFINE(lstat64, lstat, [64-bit operations are the same as 32-bit])
-	AC_DEFINE(stat64, stat, [64-bit operations are the same as 32-bit])
+AC_CHECK_DECL(stat64,,[
+	AC_CHECK_FUNC(stat64,, [
+		AC_DEFINE(fstat64, fstat, [64-bit operations are the same as 32-bit])
+		AC_DEFINE(lstat64, lstat, [64-bit operations are the same as 32-bit])
+		AC_DEFINE(stat64, stat, [64-bit operations are the same as 32-bit])
+	])
 ])
 
 AC_CHECK_FUNC(open64,, [