Cancel the previous... I must have been staring at the wrong thing. Cause is TOTALLY different

OK, to recap:

Compiling zstd-1.4.5 using uclibc-ng, will trigger an error in programs/util.c which basically indicates that the section "struct stat" in bits/stat.h relating to the definitions of "st_mtim" are hidden behind "#define __USE_MISC"

I have prepared a patch that I'm about to send upstream to zstd which will add a declare for __USE_MISC and this allows compilation...

BUT...

The underlying reason appears to be that in glibc, the relevant section of <bits/stat.h> reads as follows

#ifdef __USE_XOPEN2K8
    /* Nanosecond resolution timestamps are stored in a format
       equivalent to 'struct timespec'.  This is the type used
       whenever possible but the Unix namespace rules do not allow the
       identifier 'timespec' to appear in the <sys/stat.h> header.
       Therefore we have to handle the use of this header in strictly
       standard-compliant sources special.  */
    struct timespec st_atim;            /* Time of last access. */
    struct timespec st_mtim;            /* Time of last modification.  */
    struct timespec st_ctim;            /* Time of last status change.  */
# define st_atime st_atim.tv_sec        /* Backward compatibility.  */
# define st_mtime st_mtim.tv_sec
# define st_ctime st_ctim.tv_sec
#else


So it's hidden behind "#ifdef __USE_XOPEN2K8", whereas in uclibc_ng we have:

#ifdef __USE_MISC
    /* Nanosecond resolution timestamps are stored in a format
       equivalent to 'struct timespec'.  This is the type used
       whenever possible but the Unix namespace rules do not allow the
       identifier 'timespec' to appear in the <sys/stat.h> header.
       Therefore we have to handle the use of this header in strictly
       standard-compliant sources special.  */
    struct timespec st_atim;            /* Time of last access. */
    struct timespec st_mtim;            /* Time of last modification.  */
    struct timespec st_ctim;            /* Time of last status change.  */
# define st_atime st_atim.tv_sec        /* Backward compatibility.  */
# define st_mtime st_mtim.tv_sec
# define st_ctime st_ctim.tv_sec
#else


Now, I have no idea what is supposed to happen, but in glibc, this is all turned on by:

#if defined _POSIX_C_SOURCE && (_POSIX_C_SOURCE - 0) >= 200809L
# define __USE_XOPEN2K8         1


We have the same stanzas in uclibc_ng, but they don't have the same effects, nor do they define __USE_MISC


I believe that the solution is the following patch? Could someone more knowledgeable than me check this and make an appropriate change please?


--- a/bits/stat.h    2020-06-16 14:10:25.789364391 +0000
+++ b/bits/stat.h    2020-07-06 15:34:49.221988579 +0000
@@ -61,7 +61,7 @@
 #else
     __blkcnt64_t st_blocks;        /* Number 512-byte blocks allocated. */
 #endif
-#ifdef __USE_MISC
+#ifdef __USE_XOPEN2K8
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the
@@ -107,7 +107,7 @@
     __blksize_t st_blksize;        /* Optimal block size for I/O.  */

     __blkcnt64_t st_blocks;        /* Number 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#ifdef __USE_XOPEN2K8
     /* Nanosecond resolution timestamps are stored in a format
        equivalent to 'struct timespec'.  This is the type used
        whenever possible but the Unix namespace rules do not allow the



On 06/07/2020 15:40, Ed W wrote:
Hi,

I'm having some troubles compiling zstd and the issue appears to revolve around the lack of "__USE_MISC" being declared.

In glibc they declare __USE_MISC if there is defined __DEFAULT_SOURCE, see features.h:369 (ish):

#if defined _DEFAULT_SOURCE
# define __USE_MISC     1
#endif


However, we don't declare this in uclibc_ng and seem to have some quite different handling around __DEFAULT_SOURCE

I have zero idea what is supposed to be happening with these macros, so I don't feel qualified to suggest a solution, but it appears to cause problems for at least openrc and zstd now. Could someone please review these macros and if appropriate for uclibc_ng, please also define __USE_MISC for the case of __DEFAULT_SOURCE in features.h

Thanks

Ed W



_______________________________________________
devel mailing list
[email protected]
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel

Reply via email to