Commit 4d48948b52

Andrew Kelley <andrew@ziglang.org>
2021-12-16 01:52:27
glibc: pass -D__GLIBC_MINOR__=XX
instead of hard-coding it. This means that C code has accurate glibc version information in the preprocessor.
1 parent 694f424
Changed files (3)
lib
libc
glibc
include
include
generic-glibc
src
lib/libc/glibc/include/features.h
@@ -477,7 +477,7 @@
 /* Major and minor version number of the GNU C library package.  Use
    these macros to test for features in specific releases.  */
 #define	__GLIBC__	2
-#define	__GLIBC_MINOR__	34
+/* Zig patch: we pass `-D__GLIBC_MINOR__=XX` depending on the target. */
 
 #define __GLIBC_PREREQ(maj, min) \
 	((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
lib/libc/include/generic-glibc/features.h
@@ -477,7 +477,7 @@
 /* Major and minor version number of the GNU C library package.  Use
    these macros to test for features in specific releases.  */
 #define	__GLIBC__	2
-#define	__GLIBC_MINOR__	34
+/* Zig patch: we pass `-D__GLIBC_MINOR__=XX` depending on the target. */
 
 #define __GLIBC_PREREQ(maj, min) \
 	((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
@@ -512,4 +512,4 @@
 #include <gnu/stubs.h>
 
 
-#endif	/* features.h  */
\ No newline at end of file
+#endif	/* features.h  */
src/Compilation.zig
@@ -3397,6 +3397,14 @@ pub fn addCCArgs(
         try argv.append(libunwind_include_path);
     }
 
+    if (comp.bin_file.options.link_libc and target.isGnuLibC()) {
+        const target_version = target.os.version_range.linux.glibc;
+        const glibc_minor_define = try std.fmt.allocPrint(arena, "-D__GLIBC_MINOR__={d}", .{
+            target_version.minor,
+        });
+        try argv.append(glibc_minor_define);
+    }
+
     const llvm_triple = try @import("codegen/llvm.zig").targetTriple(arena, target);
     try argv.appendSlice(&[_][]const u8{ "-target", llvm_triple });