Bug 1221480

Summary: GCC 14: tracker package fails - broken meson test
Product: [openSUSE] openSUSE Tumbleweed Reporter: Michal Jireš <michal.jires>
Component: GNOMEAssignee: E-mail List <gnome-bugs>
Status: NEW --- QA Contact: E-mail List <qa-bugs>
Severity: Normal    
Priority: P5 - None CC: os.gnome.maintainers
Version: Current   
Target Milestone: ---   
Hardware: Other   
OS: Other   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Bug Depends on:    
Bug Blocks: 1220571    

Description Michal Jireš 2024-03-15 16:22:26 UTC
Building tracker with GCC 14 fails here:
https://build.opensuse.org/package/live_build_log/openSUSE:Factory:Staging:Gcc7/tracker/standard/x86_64

Due to:

meson.build:231:2: ERROR: Problem encountered: Libc implementation has broken 4-digit years implementation.

./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: /home/abuild/rpmbuild/BUILD/tracker-3.6.0/x86_64-suse-linux/meson-private/tmpqt17smcw/testfile.c: In function 'main':
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: /home/abuild/rpmbuild/BUILD/tracker-3.6.0/x86_64-suse-linux/meson-private/tmpqt17smcw/testfile.c:16:17: error: passing argument 1 of 'strftime' from incompatible pointer type [-Wincompatible-pointer-types]
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:    16 |       strftime (&buf, sizeof buf, modifiers[i], &tm);
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                 ^~~~
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                 |
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                 char * (*)[100]
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: In file included from /home/abuild/rpmbuild/BUILD/tracker-3.6.0/x86_64-suse-linux/meson-private/tmpqt17smcw/testfile.c:6:
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: /usr/include/time.h:100:42: note: expected 'char * restrict' but argument is of type 'char * (*)[100]'
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:   100 | extern size_t strftime (char *__restrict __s, size_t __maxsize,
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                         ~~~~~~~~~~~~~~~~~^~~
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: /home/abuild/rpmbuild/BUILD/tracker-3.6.0/x86_64-suse-linux/meson-private/tmpqt17smcw/testfile.c:17:19: error: passing argument 1 of 'strcmp' from incompatible pointer type [-Wincompatible-pointer-types]
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:    17 |       if (strcmp (&buf, "0101") == 0) {
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                   ^~~~
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                   |
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                   char * (*)[100]
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: In file included from /home/abuild/rpmbuild/BUILD/tracker-3.6.0/x86_64-suse-linux/meson-private/tmpqt17smcw/testfile.c:5:
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt: /usr/include/string.h:156:32: note: expected 'const char *' but argument is of type 'char * (*)[100]'
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:   156 | extern int strcmp (const char *__s1, const char *__s2)
./tracker-3.6.0/x86_64-suse-linux/meson-logs/meson-log.txt:       |                    ~~~~~~~~~~~~^~~~





Builds with:

Index: tracker-3.6.0/meson.build
===================================================================
--- tracker-3.6.0.orig/meson.build
+++ tracker-3.6.0/meson.build
@@ -211,13 +211,13 @@ result = cc.run('''
   int main (int argc, char *argv[]) {
     char *modifiers[] = { "%Y", "%C%y", "%4Y", "%2C%y", NULL };
     time_t timestamp = -58979923200; /* 0101-01-01T01:01:01Z */
-    char *buf[100];
+    char buf[100];
     struct tm tm;
     int i;
     gmtime_r (&timestamp, &tm);
     for (i = 0; modifiers[i]; i++) {
-      strftime (&buf, sizeof buf, modifiers[i], &tm);
-      if (strcmp (&buf, "0101") == 0) {
+      strftime (buf, sizeof buf, modifiers[i], &tm);
+      if (strcmp (buf, "0101") == 0) {
         printf ("%s", modifiers[i]);
 	return 0;
       }

See the meta bug#1220571 for more info.