Bug#1065790: libosmo-netif: FTBFS on arm{el,hf}: tests fail

2024-04-13 Thread Steve Langasek
Package: libosmo-netif
Followup-For: Bug #1065790
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu noble ubuntu-patch
Control: tags -1 patch

Well, maybe a version of the patch without a stray character that breaks
compilation.

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developer   https://www.debian.org/
slanga...@ubuntu.com vor...@debian.org
diff -Nru libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch 
libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch
--- libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch  1969-12-31 
16:00:00.0 -0800
+++ libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch  2024-04-13 
12:31:32.0 -0700
@@ -0,0 +1,136 @@
+Description: use a 64-bit safe format string for time_t.
+Author: Steve Langasek 
+Bug-Debian: https://bugs.debian.org/1065790
+Last-Update: 2024-04-13
+Forwarded: no
+
+Index: libosmo-netif-1.2.0/examples/ipa-stream-client.c
+===
+--- libosmo-netif-1.2.0.orig/examples/ipa-stream-client.c
 libosmo-netif-1.2.0/examples/ipa-stream-client.c
+@@ -143,7 +143,8 @@
+   timersub(, >tv, );
+ 
+   LOGP(DLINP, LOGL_NOTICE, "message %d replied "
+-  "in %lu.%.6lu\n", num, diff.tv_sec, diff.tv_usec);
++  "in %lld.%.6lld\n", num, (long long int)diff.tv_sec,
++  (long long int)diff.tv_usec);
+   talloc_free(found);
+   } else {
+   LOGP(DLINP, LOGL_ERROR,
+Index: libosmo-netif-1.2.0/src/jibuf.c
+===
+--- libosmo-netif-1.2.0.orig/src/jibuf.c
 libosmo-netif-1.2.0/src/jibuf.c
+@@ -385,10 +385,10 @@
+   timeradd(>last_enqueue_time, _ts, _ts);
+ 
+   LOGP(DLJIBUF, LOGL_DEBUG, "enqueuing packet seq=%"PRIu16" rel=%d 
delay=%d" \
+-  " skew=%d thres=%d {%lu.%06lu -> %lu.%06lu} %s\n",
++  " skew=%d thres=%d {%lld.%06lld -> %lld.%06lld} %s\n",
+   msg_get_sequence(msg), rel_delay, delay, jb->skew_us, 
jb->threshold_delay,
+-  jb->last_enqueue_time.tv_sec, jb->last_enqueue_time.tv_usec,
+-  sched_ts.tv_sec, sched_ts.tv_usec, msg_get_marker(msg)? "M" : 
"");
++  (long long int)jb->last_enqueue_time.tv_sec, (long long 
int)jb->last_enqueue_time.tv_usec,
++  (long long int)sched_ts.tv_sec, (long long 
int)sched_ts.tv_usec, msg_get_marker(msg)? "M" : "");
+ 
+   /* Add scheduled dequeue time in msg->cb so we can check it later */
+   unsigned long *old_cb = talloc_memdup(jb->talloc_ctx, msg->cb, 
sizeof(msg->cb));
+Index: libosmo-netif-1.2.0/tests/osmux/osmux_test.c
+===
+--- libosmo-netif-1.2.0.orig/tests/osmux/osmux_test.c
 libosmo-netif-1.2.0/tests/osmux/osmux_test.c
+@@ -69,8 +69,10 @@
+   struct timeval tv; \
+   osmo_clock_gettime(CLOCK_MONOTONIC, ); \
+   osmo_gettimeofday(, NULL); \
+-  fprintf(stderr, "sys={%lu.%06lu}, mono={%lu.%06lu}: " fmt, \
+-  tv.tv_sec, tv.tv_usec, ts.tv_sec, ts.tv_nsec/1000, 
##args); \
++  fprintf(stderr, "sys={%lld.%06lld}, mono={%lld.%06lld}: " fmt, \
++  (long long int)tv.tv_sec, (long long int)tv.tv_usec, \
++  (long long int)ts.tv_sec, \
++  (long long int)ts.tv_nsec/1000, ##args); \
+   } while(0)
+ 
+ static void clock_override_enable(bool enable)
+Index: libosmo-netif-1.2.0/tests/stream/stream_test.c
+===
+--- libosmo-netif-1.2.0.orig/tests/stream/stream_test.c
 libosmo-netif-1.2.0/tests/stream/stream_test.c
+@@ -60,7 +60,7 @@
+ #define LOGCLI(cli, fmt, args...) do { \
+   struct timeval tv; \
+   osmo_gettimeofday(, NULL); \
+-  printf("{%lu.%06lu} [%s] Client's %s(): " fmt, tv.tv_sec, 
tv.tv_usec, \
++  printf("{%lld.%06lld} [%s] Client's %s(): " fmt, (long long 
int)tv.tv_sec, (long long int)tv.tv_usec, \
+  osmo_stream_cli_get_data(cli) ? "OK" : "NA", __func__, 
##args); \
+   } while (0)
+ 
+@@ -235,7 +235,7 @@
+ #define LOGSRV(srv, fmt, args...) do { \
+   struct timeval tv; \
+   osmo_gettimeofday(, NULL); \
+-  printf("{%lu.%06lu} [%s|%s] Server's %s(): " fmt,  tv.tv_sec, 
tv.tv_usec, \
++  printf("{%lld.%06lld} [%s|%s] Server's %s(): " fmt,  (long long 
int)tv.tv_sec, (long long int)tv.tv_usec, \
+  osmo_stream_srv_get_data(srv) ? "OK" : "NA", \
+  
osmo_stream_srv_link_get_data(osmo_stream_srv_get_master(srv)) ? "OK" : "NA", \
+  

Bug#1065790: libosmo-netif: FTBFS on arm{el,hf}: tests fail

2024-04-13 Thread Steve Langasek
Package: libosmo-netif
Followup-For: Bug #1065790
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu noble ubuntu-patch
Control: tags -1 patch

Please find attached an alternative solution to this which has been uploaded
to Ubuntu.  I found it easier to fix the portability issue than deal with
removing the reverse-dependency chain.

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developer   https://www.debian.org/
slanga...@ubuntu.com vor...@debian.org
diff -Nru libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch 
libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch
--- libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch  1969-12-31 
16:00:00.0 -0800
+++ libosmo-netif-1.2.0/debian/patches/64-bit-time-t.patch  2024-04-13 
12:30:35.0 -0700
@@ -0,0 +1,142 @@
+Description: use a 64-bit safe format string for time_t.
+Author: Steve Langasek 
+Bug-Debian: https://bugs.debian.org/1065790
+Last-Update: 2024-04-13
+Forwarded: no
+
+Index: libosmo-netif-1.2.0/examples/ipa-stream-client.c
+===
+--- libosmo-netif-1.2.0.orig/examples/ipa-stream-client.c
 libosmo-netif-1.2.0/examples/ipa-stream-client.c
+@@ -143,7 +143,8 @@
+   timersub(, >tv, );
+ 
+   LOGP(DLINP, LOGL_NOTICE, "message %d replied "
+-  "in %lu.%.6lu\n", num, diff.tv_sec, diff.tv_usec);
++  "in %lld.%.6lld\n", num, (long long int)diff.tv_sec,
++  (long long int)diff.tv_usec);
+   talloc_free(found);
+   } else {
+   LOGP(DLINP, LOGL_ERROR,
+Index: libosmo-netif-1.2.0/src/jibuf.c
+===
+--- libosmo-netif-1.2.0.orig/src/jibuf.c
 libosmo-netif-1.2.0/src/jibuf.c
+@@ -385,10 +385,10 @@
+   timeradd(>last_enqueue_time, _ts, _ts);
+ 
+   LOGP(DLJIBUF, LOGL_DEBUG, "enqueuing packet seq=%"PRIu16" rel=%d 
delay=%d" \
+-  " skew=%d thres=%d {%lu.%06lu -> %lu.%06lu} %s\n",
++  " skew=%d thres=%d {%lld.%06lld -> %lld.%06lld} %s\n",
+   msg_get_sequence(msg), rel_delay, delay, jb->skew_us, 
jb->threshold_delay,
+-  jb->last_enqueue_time.tv_sec, jb->last_enqueue_time.tv_usec,
+-  sched_ts.tv_sec, sched_ts.tv_usec, msg_get_marker(msg)? "M" : 
"");
++  (long long int)jb->last_enqueue_time.tv_sec, (long long 
int)jb->last_enqueue_time.tv_usec,
++  (long long int)sched_ts.tv_sec, (long long 
int)sched_ts.tv_usec, msg_get_marker(msg)? "M" : "");
+ 
+   /* Add scheduled dequeue time in msg->cb so we can check it later */
+   unsigned long *old_cb = talloc_memdup(jb->talloc_ctx, msg->cb, 
sizeof(msg->cb));
+Index: libosmo-netif-1.2.0/tests/osmux/osmux_test.c
+===
+--- libosmo-netif-1.2.0.orig/tests/osmux/osmux_test.c
 libosmo-netif-1.2.0/tests/osmux/osmux_test.c
+@@ -1,4 +1,4 @@
+-/*
++y/*
+  * (C) 2013 by Pablo Neira Ayuso 
+  * (C) 2013 by On Waves ehf 
+  *
+@@ -69,8 +69,10 @@
+   struct timeval tv; \
+   osmo_clock_gettime(CLOCK_MONOTONIC, ); \
+   osmo_gettimeofday(, NULL); \
+-  fprintf(stderr, "sys={%lu.%06lu}, mono={%lu.%06lu}: " fmt, \
+-  tv.tv_sec, tv.tv_usec, ts.tv_sec, ts.tv_nsec/1000, 
##args); \
++  fprintf(stderr, "sys={%lld.%06lld}, mono={%lld.%06lld}: " fmt, \
++  (long long int)tv.tv_sec, (long long int)tv.tv_usec, \
++  (long long int)ts.tv_sec, \
++  (long long int)ts.tv_nsec/1000, ##args); \
+   } while(0)
+ 
+ static void clock_override_enable(bool enable)
+Index: libosmo-netif-1.2.0/tests/stream/stream_test.c
+===
+--- libosmo-netif-1.2.0.orig/tests/stream/stream_test.c
 libosmo-netif-1.2.0/tests/stream/stream_test.c
+@@ -60,7 +60,7 @@
+ #define LOGCLI(cli, fmt, args...) do { \
+   struct timeval tv; \
+   osmo_gettimeofday(, NULL); \
+-  printf("{%lu.%06lu} [%s] Client's %s(): " fmt, tv.tv_sec, 
tv.tv_usec, \
++  printf("{%lld.%06lld} [%s] Client's %s(): " fmt, (long long 
int)tv.tv_sec, (long long int)tv.tv_usec, \
+  osmo_stream_cli_get_data(cli) ? "OK" : "NA", __func__, 
##args); \
+   } while (0)
+ 
+@@ -235,7 +235,7 @@
+ #define LOGSRV(srv, fmt, args...) do { \
+   struct timeval tv; \
+   osmo_gettimeofday(, NULL); \
+-  printf("{%lu.%06lu} [%s|%s] Server's %s(): " fmt,  tv.tv_sec, 
tv.tv_usec, \
++  printf("{%lld.%06lld} [%s|%s] Server's %s(): " fmt,  (long long 

Bug#1065790: libosmo-netif: FTBFS on arm{el,hf}: tests fail

2024-03-22 Thread Simon Chopin
Source: libosmo-netif
Followup-For: Bug #1065790
X-Debbugs-Cc: scho...@ubuntu.com
Control: tags -1 ftbfs

I looked into this, and AFAICT there's a fundamental mismatch between
libosmo-netif and libosmocore: libosmocore defines (struct msgb).cb as a
`unsigned long[5]`, but -netif interprets cb[0] as a struct timespec in
src/osmux.c, while it defines cb[3] as the SCTP PPID and cb[4] as the
SCTP Stream ID in include/osmocom/netif/stream.h

That works on architectures where sizeof(time_t) == sizeof(long), in
which case sizeof(struct timespec) <= sizeof(long[3]), but that's simply
not true when on 32-bit archs with 64b time_t.



Bug#1065790: libosmo-netif: FTBFS on arm{el,hf}: tests fail

2024-03-09 Thread Sebastian Ramacher
Source: libosmo-netif
Version: 1.2.0-2.1
Severity: serious
Tags: ftbfs
Justification: fails to build from source (but built successfully in the past)
X-Debbugs-Cc: sramac...@debian.org

https://buildd.debian.org/status/fetch.php?pkg=libosmo-netif=armhf=1.2.0-2.1=1709142489=0

--- expout  2024-02-28 17:47:53.939733157 +
+++ /<>/tests/testsuite.dir/at-groups/3/stdout 2024-02-28 
17:48:03.951783359 +
@@ -1,108 +1,10 @@
 ===test_output_consecutive===
-sys={0.00}, mono={0.00}: clock_override_set
-sys={0.00}, mono={0.00}: dequeue: seq=50 ts=500 M enqueued=5
-sys={0.00}, mono={0.00}: first dequed before first select
-sys={0.02}, mono={0.02}: clock_override_add
-sys={0.02}, mono={0.02}: second select, second dequed
-sys={0.02}, mono={0.02}: dequeue: seq=51 ts=660 enqueued=4
-sys={0.04}, mono={0.04}: clock_override_add
-sys={0.04}, mono={0.04}: third select, third dequed
-sys={0.04}, mono={0.04}: dequeue: seq=52 ts=820 enqueued=3
-sys={0.06}, mono={0.06}: clock_override_add
-sys={0.06}, mono={0.06}: fourth select, fourth dequed
-sys={0.06}, mono={0.06}: dequeue: seq=53 ts=980 enqueued=2
-sys={0.08}, mono={0.08}: clock_override_add
-sys={0.08}, mono={0.08}: fifth select, fifth dequed
-sys={0.08}, mono={0.08}: dequeue: seq=54 ts=1140 enqueued=1
-sys={0.10}, mono={0.10}: clock_override_add
-sys={0.10}, mono={0.10}: sixth select, sixth dequed
-sys={0.10}, mono={0.10}: dequeue: seq=55 ts=1300 enqueued=0
-sys={0.10}, mono={0.10}: send second osmux frame
-sys={0.10}, mono={0.10}: dequeue: seq=56 ts=1460 enqueued=5
-sys={0.10}, mono={0.10}: first dequed before first select
-sys={0.12}, mono={0.12}: clock_override_add
-sys={0.12}, mono={0.12}: second select, second dequed
-sys={0.12}, mono={0.12}: dequeue: seq=57 ts=1620 enqueued=4
-sys={0.20}, mono={0.20}: clock_override_add
-sys={0.20}, mono={0.20}: third select, four packet should be dequeued
-sys={0.20}, mono={0.20}: dequeue: seq=58 ts=1780 enqueued=3
-sys={0.20}, mono={0.20}: dequeue: seq=59 ts=1940 enqueued=2
-sys={0.20}, mono={0.20}: dequeue: seq=60 ts=2100 enqueued=1
-sys={0.20}, mono={0.20}: dequeue: seq=61 ts=2260 enqueued=0
-sys={0.20}, mono={0.20}: calling flush on empty list, should do nothing
-===test_output_interleaved===
-sys={0.00}, mono={0.00}: clock_override_set
-sys={0.00}, mono={0.00}: dequeue: seq=50 ts=500 M enqueued=5
-sys={0.04}, mono={0.04}: clock_override_add
-sys={0.04}, mono={0.04}: select, 3 dequed, 3 still queued
-sys={0.04}, mono={0.04}: dequeue: seq=51 ts=660 enqueued=4
-sys={0.04}, mono={0.04}: dequeue: seq=52 ts=820 enqueued=3
-sys={0.04}, mono={0.04}: next frame arrives, 3 pending rtp packets are 
dequeued and first of new osmux frame too
-sys={0.04}, mono={0.04}: dequeue: seq=53 ts=980 enqueued=8
-sys={0.04}, mono={0.04}: dequeue: seq=54 ts=1140 enqueued=7
-sys={0.04}, mono={0.04}: dequeue: seq=55 ts=1300 enqueued=6
-sys={0.04}, mono={0.04}: dequeue: seq=56 ts=1460 enqueued=5
-sys={0.14}, mono={0.14}: clock_override_add
-sys={0.14}, mono={0.14}: calling select, then all should be out
-sys={0.14}, mono={0.14}: dequeue: seq=57 ts=1620 enqueued=4
-sys={0.14}, mono={0.14}: dequeue: seq=58 ts=1780 enqueued=3
-sys={0.14}, mono={0.14}: dequeue: seq=59 ts=1940 enqueued=2
-sys={0.14}, mono={0.14}: dequeue: seq=60 ts=2100 enqueued=1
-sys={0.14}, mono={0.14}: dequeue: seq=61 ts=2260 enqueued=0
-===test_output_2together===
-sys={0.00}, mono={0.00}: clock_override_set
-sys={0.00}, mono={0.00}: dequeue: seq=50 ts=500 M enqueued=5
-sys={0.00}, mono={0.00}: calling select in between 2 osmux recv
-sys={0.00}, mono={0.00}: calling select after receiving 2nd osmux. 
Dequeue 1st osmux frame and 1st rtp from 2nd osmux frame.
-sys={0.00}, mono={0.00}: dequeue: seq=51 ts=660 enqueued=10
-sys={0.00}, mono={0.00}: dequeue: seq=52 ts=820 enqueued=9
-sys={0.00}, mono={0.00}: dequeue: seq=53 ts=980 enqueued=8
-sys={0.00}, mono={0.00}: dequeue: seq=54 ts=1140 enqueued=7
-sys={0.00}, mono={0.00}: dequeue: seq=55 ts=1300 enqueued=6
-sys={0.00}, mono={0.00}: dequeue: seq=56 ts=1460 enqueued=5
-sys={0.10}, mono={0.10}: clock_override_add
-sys={0.10}, mono={0.10}: select, all 5 remaining should be out
-sys={0.10}, mono={0.10}: dequeue: seq=57 ts=1620 enqueued=4
-sys={0.10}, mono={0.10}: dequeue: seq=58 ts=1780 enqueued=3
-sys={0.10}, mono={0.10}: dequeue: seq=59 ts=1940 enqueued=2
-sys={0.10}, mono={0.10}: dequeue: seq=60 ts=2100 enqueued=1
-sys={0.10}, mono={0.10}: dequeue: seq=61 ts=2260 enqueued=0
-===test_output_frame_lost===