Bug 104628

Summary: Allow building inside a container
Product: Wayland Reporter: Krasi <krasi.root>
Component: libinputAssignee: Wayland bug list <wayland-bugs>
Status: RESOLVED NOTOURBUG QA Contact:
Severity: normal    
Priority: medium CC: peter.hutterer
Version: unspecified   
Hardware: Other   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Krasi 2018-01-14 21:33:41 UTC
trying to build the driver inside a docker container and than install it on the host, but it seems that 'ninja install' also does some building before the installation so it fails.
I want to avoid polluting my workstation with all the build packages and dependencies so it would be super cool if this can be done in the container and than I can simply delete the container when done.





sudo ninja  -C builddir/ install
ninja: Entering directory `builddir/'
[1/276] Compiling C object 'libinput-d...p@exe/udev_libinput-device-group.c.o'.
FAILED: libinput-device-group@exe/udev_libinput-device-group.c.o 
cc  -Ilibinput-device-group@exe -I. -I.. -I../src -I../include -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -MMD -MQ 'libinput-device-group@exe/udev_libinput-device-group.c.o' -MF 'libinput-device-group@exe/udev_libinput-device-group.c.o.d' -o 'libinput-device-group@exe/udev_libinput-device-group.c.o' -c ../udev/libinput-device-group.c
../udev/libinput-device-group.c:29:10: fatal error: libudev.h: No such file or directory
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
[2/276] Compiling C object 'input@sha/src_evdev-debounce.c.o'.
FAILED: input@sha/src_evdev-debounce.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-debounce.c.o' -MF 'input@sha/src_evdev-debounce.c.o.d' -o 'input@sha/src_evdev-debounce.c.o' -c ../src/evdev-debounce.c
In file included from ../src/evdev-fallback.h:32:0,
                 from ../src/evdev-debounce.c:26:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[3/276] Compiling C object 'input@sha/src_evdev-fallback.c.o'.
FAILED: input@sha/src_evdev-fallback.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-fallback.c.o' -MF 'input@sha/src_evdev-fallback.c.o.d' -o 'input@sha/src_evdev-fallback.c.o' -c ../src/evdev-fallback.c
../src/evdev-fallback.c:29:10: fatal error: mtdev-plumbing.h: No such file or directory
 #include <mtdev-plumbing.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
[4/276] Compiling C object 'input@sha/src_evdev-middle-button.c.o'.
FAILED: input@sha/src_evdev-middle-button.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-middle-button.c.o' -MF 'input@sha/src_evdev-middle-button.c.o.d' -o 'input@sha/src_evdev-middle-button.c.o' -c ../src/evdev-middle-button.c
In file included from ../src/evdev-middle-button.c:28:0:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[5/276] Compiling C object 'input@sha/src_libinput.c.o'.
FAILED: input@sha/src_libinput.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_libinput.c.o' -MF 'input@sha/src_libinput.c.o.d' -o 'input@sha/src_libinput.c.o' -c ../src/libinput.c
In file included from ../src/libinput.c:37:0:
../src/libinput.h:35:10: fatal error: libudev.h: No such file or directory
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
[6/276] Compiling C object 'input@sha/src_evdev.c.o'.
FAILED: input@sha/src_evdev.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev.c.o' -MF 'input@sha/src_evdev.c.o.d' -o 'input@sha/src_evdev.c.o' -c ../src/evdev.c
../src/evdev.c:37:10: fatal error: mtdev-plumbing.h: No such file or directory
 #include <mtdev-plumbing.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
[7/276] Compiling C object 'input@sha/src_evdev-mt-touchpad.c.o'.
FAILED: input@sha/src_evdev-mt-touchpad.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-mt-touchpad.c.o' -MF 'input@sha/src_evdev-mt-touchpad.c.o.d' -o 'input@sha/src_evdev-mt-touchpad.c.o' -c ../src/evdev-mt-touchpad.c
In file included from ../src/evdev-mt-touchpad.h:29:0,
                 from ../src/evdev-mt-touchpad.c:31:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[8/276] Compiling C object 'input@sha/src_evdev-mt-touchpad-tap.c.o'.
FAILED: input@sha/src_evdev-mt-touchpad-tap.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-mt-touchpad-tap.c.o' -MF 'input@sha/src_evdev-mt-touchpad-tap.c.o.d' -o 'input@sha/src_evdev-mt-touchpad-tap.c.o' -c ../src/evdev-mt-touchpad-tap.c
In file included from ../src/evdev-mt-touchpad.h:29:0,
                 from ../src/evdev-mt-touchpad-tap.c:34:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[9/276] Compiling C object 'input@sha/src_evdev-mt-touchpad-buttons.c.o'.
FAILED: input@sha/src_evdev-mt-touchpad-buttons.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-mt-touchpad-buttons.c.o' -MF 'input@sha/src_evdev-mt-touchpad-buttons.c.o.d' -o 'input@sha/src_evdev-mt-touchpad-buttons.c.o' -c ../src/evdev-mt-touchpad-buttons.c
In file included from ../src/evdev-mt-touchpad.h:29:0,
                 from ../src/evdev-mt-touchpad-buttons.c:33:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[10/276] Compiling C object 'input@sha...rc_evdev-mt-touchpad-edge-scroll.c.o'.
FAILED: input@sha/src_evdev-mt-touchpad-edge-scroll.c.o 
cc  -Iinput@sha -I. -I.. -I../ -I../include -I/usr/include/libevdev-1.0/ -I/usr/include/libwacom-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=gnu99 -O0 -g -Wno-unused-parameter -g -fvisibility=hidden -Wmissing-prototypes -Wstrict-prototypes -fPIC -MMD -MQ 'input@sha/src_evdev-mt-touchpad-edge-scroll.c.o' -MF 'input@sha/src_evdev-mt-touchpad-edge-scroll.c.o.d' -o 'input@sha/src_evdev-mt-touchpad-edge-scroll.c.o' -c ../src/evdev-mt-touchpad-edge-scroll.c
In file included from ../src/evdev-mt-touchpad.h:29:0,
                 from ../src/evdev-mt-touchpad-edge-scroll.c:33:
../src/evdev.h:34:10: fatal error: libevdev/libevdev.h: No such file or directory
 #include <libevdev/libevdev.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.
Comment 1 Peter Hutterer 2018-01-15 04:14:14 UTC
Looks like your include paths are messed up because it can't find the header files for any of the external packages (libevdev, libudev, and mtdev). This is either some local issue with a messed up include path or a meson issue where it gets past the meson stage but ninja then fails to pick up the includes.
Comment 2 Krasi 2018-01-15 08:28:48 UTC
Did you read the top of my message?

In other words , how can I compile on one machine or inside a container and do the installation on another? 
Is the installation just a matter of copying some files?
Comment 3 Peter Hutterer 2018-01-15 08:44:49 UTC
ninja install has a dependency on ninja build (or whatever the build target is called). So if the timestamps change or any of the headers, or any of the dependencies, it'll rebuild. basically: if you change anything underneath ninja, it'll rebuild.

distributions do what you want to do with chroots, etc. e.g. if you're on fedora you're probably better off with mock than docker containers.

> Is the installation just a matter of copying some files?

basically yes. I think there's a restorecon in there too but that may not be needed on your distro.
Comment 4 Daniel Stone 2018-01-15 10:18:13 UTC
You can also run 'DESTDIR=/path/to/fake-root-dir/ ninja -C build install' inside the container. This will install everything as if $DESTDIR were the root, allowing you to install there as an unprivileged user in the container, and copy the files out from the host.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.