Subject: v4l2loopback module builds with 5.4 but not 5.6

From: Brendan Tildesley <[email-masked]>
Date: Mon, 6 Apr 2020 20:38:06 +1000

I just made a package definition for v4l2loopback. It built perfectly 
fine with Linux 5.4, but when i switched to 5.6.2 with the patch that 
sets it to default, suddenly I get this error below. I was wondering if 
anyone can tell if this is likely my fault, a guix bug with 5.6, or an 
upstream bug I should report there? Thanks.

In linux.scm:

(define-public v4l2loopback
   (package
        (name "v4l2loopback")
        (version "0.12.3")
        (source (origin
                  (method url-fetch)
                  (uri (string-append
"https://github.com/umlaeute/v4l2loopback/archive/v"
                        version".tar.gz"))
                  (file-name (string-append name "-" version))
                  (sha256
                   (base32
"1fkhxxj9i5d25ak7afkph1jp47d9bcngs9kwapgwhpl6h15v2srz"))))
        (build-system linux-module-build-system)
        (arguments
         `(#:tests? #f))
        (home-page "https://github.com/umlaeute/v4l2loopback")
        (synopsis "Create V4L2 loopback devices")
        (description "")
        (license license:gpl2)))

Error:

make: Entering directory 
'/gnu/store/swjg0hczahmhjph3na8czrwf5lzgp1z0-linux-libre-module-builder-5.6.2/lib/modules/build'
   AR 
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/built-in.a
   CC [M] 
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.o
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:137:47: 
warning: 'struct timeval' declared inside parameter list will not be 
visible outside of this definition or declaration
  static inline void v4l2l_get_timestamp(struct timeval *tv) {
                                                ^~~~~~~
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c: 
In function 'v4l2l_get_timestamp':
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:147:4: 
error: dereferencing pointer to incomplete type 'struct timeval'
   tv->tv_sec = (time_t)ts.tv_sec;
     ^~
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:147:16: 
error: 'time_t' undeclared (first use in this function); did you mean 
'ktime_t'?
   tv->tv_sec = (time_t)ts.tv_sec;
                 ^~~~~~
                 ktime_t
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:147:16: 
note: each undeclared identifier is reported only once for each function 
it appears in
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:147:23: 
error: expected ';' before 'ts'
   tv->tv_sec = (time_t)ts.tv_sec;
                        ^~
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c: 
In function 'vidioc_qbuf':
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:1523:24: 
error: passing argument 1 of 'v4l2l_get_timestamp' from incompatible 
pointer type [-Werror=incompatible-pointer-types]
     v4l2l_get_timestamp(&b->buffer.timestamp);
                         ^
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:137:20: 
note: expected 'struct timeval *' but argument is of type 'struct 
__kernel_v4l2_timeval *'
  static inline void v4l2l_get_timestamp(struct timeval *tv) {
                     ^~~~~~~~~~~~~~~~~~~
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c: 
In function 'v4l2_loopback_write':
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:1950:22: 
error: passing argument 1 of 'v4l2l_get_timestamp' from incompatible 
pointer type [-Werror=incompatible-pointer-types]
   v4l2l_get_timestamp(&b->timestamp);
                       ^
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:137:20: 
note: expected 'struct timeval *' but argument is of type 'struct 
__kernel_v4l2_timeval *'
  static inline void v4l2l_get_timestamp(struct timeval *tv) {
                     ^~~~~~~~~~~~~~~~~~~
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c: 
In function 'init_buffers':
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:2055:23: 
error: passing argument 1 of 'v4l2l_get_timestamp' from incompatible 
pointer type [-Werror=incompatible-pointer-types]
    v4l2l_get_timestamp(&b->timestamp);
                        ^
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.c:137:20: 
note: expected 'struct timeval *' but argument is of type 'struct 
__kernel_v4l2_timeval *'
  static inline void v4l2l_get_timestamp(struct timeval *tv) {
                     ^~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:268: 
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3/v4l2loopback.o] 
Error 1
make: *** [Makefile:1683: 
/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3] Error 2
make: Leaving directory 
'/gnu/store/swjg0hczahmhjph3na8czrwf5lzgp1z0-linux-libre-module-builder-5.6.2/lib/modules/build'
command "make" "-C" 
"/gnu/store/swjg0hczahmhjph3na8czrwf5lzgp1z0-linux-libre-module-builder-5.6.2/lib/modules/build" 
"M=/tmp/guix-build-v4l2loopback-0.12.3.drv-0/v4l2loopback-0.12.3" failed 
with status 2
builder for 
`/gnu/store/6zj7agvr4f4yy1121k5i3zc76bkgkzay-v4l2loopback-0.12.3.drv' 
failed with exit code 1
build of 
/gnu/store/6zj7agvr4f4yy1121k5i3zc76bkgkzay-v4l2loopback-0.12.3.drv failed