Created attachment 500822 [details] more context With: > USE="perl minimal -egl -opengl -webgl" FEATURES=-test emerge -t1 --quiet-build=y --quiet-repo-display --nospinner --autounmask=y --autounmask-keep-masks=y --autounmask-unrestricted-atoms=n --autounmask-unrestricted-atoms=n --autounmask-continue --unordered-display --verbose --backtrack=10 --onlydeps --with-test-deps=y =net-libs/webkit-gtk-2.18.2 Portage attempts to install webkit-gtk's dependencies as follows: ----- Calculating dependencies [nomerge ] net-libs/webkit-gtk-2.18.2:4/37 USE="(X) geolocation gstreamer introspection jit (-aqua) -coverage -doc -egl -gles2 -gnome-keyring -libnotify -nsplugin -opengl -spell {-test} -wayland -webgl" [ebuild N ] x11-libs/gtk+-3.22.16:3 USE="X introspection (-aqua) -broadway -cloudprint -colord -cups -examples {-test} -vim-syntax -wayland -xinerama" 0 KiB [ebuild N ] media-libs/libepoxy-1.4.2 USE="X {-test}" 0 KiB [ebuild R ] media-libs/mesa-17.0.6 USE="classic dri3 egl* gallium gbm llvm nptl -bindist -d3d9 -debug -gles1 -gles2 -opencl -openmax -osmesa -pax_kernel -pic (-selinux) -vaapi -valgrind -vdpau -vulkan -wayland -xa -xvmc" VIDEO_CARDS="(-freedreno) -i915 -i965 (-imx) -intel -nouveau -r100 -r200 -r300 -r600 -radeon -radeonsi (-vc4) (-vivante) -vmware" 0 KiB [ebuild N ] x11-base/xorg-server-1.19.5:0/1.19.5 USE="glamor ipv6 minimal suid udev xorg xvfb -debug -dmx -doc -kdrive (-libressl) (-selinux) -static-libs -systemd -tslib -unwind -wayland -xcsecurity -xephyr -xnest" 0 KiB Total: 5 packages (4 new, 1 reinstall), Size of downloads: 0 KiB The following USE changes are necessary to proceed: (see "package.use" in the portage(5) man page for more details) # required by x11-base/xorg-server-1.19.5::gentoo[glamor] # required by net-libs/webkit-gtk-2.18.2::gentoo[-test] # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl Autounmask changes successfully written. ... done! [nomerge ] net-libs/webkit-gtk-2.18.2:4/37 USE="(X) geolocation gstreamer introspection jit (-aqua) -coverage -doc -egl -gles2 -gnome-keyring -libnotify -nsplugin -opengl -spell {-test} -wayland -webgl" [ebuild N ] x11-libs/gtk+-3.22.16:3 USE="X introspection (-aqua) -broadway -cloudprint -colord -cups -examples {-test} -vim-syntax -wayland -xinerama" 0 KiB [ebuild N ] media-libs/libepoxy-1.4.2 USE="X {-test}" 0 KiB [ebuild R ] media-libs/mesa-17.0.6 USE="classic dri3 egl* gallium gbm llvm nptl -bindist -d3d9 -debug -gles1 -gles2 -opencl -openmax -osmesa -pax_kernel -pic (-selinux) -vaapi -valgrind -vdpau -vulkan -wayland -xa -xvmc" VIDEO_CARDS="(-freedreno) -i915 -i965 (-imx) -intel -nouveau -r100 -r200 -r300 -r600 -radeon -radeonsi (-vc4) (-vivante) -vmware" 0 KiB [ebuild N ] x11-base/xorg-server-1.19.5:0/1.19.5 USE="glamor ipv6 minimal suid udev xorg xvfb -debug -dmx -doc -kdrive (-libressl) (-selinux) -static-libs -systemd -tslib -unwind -wayland -xcsecurity -xephyr -xnest" 0 KiB Total: 5 packages (4 new, 1 reinstall), Size of downloads: 0 KiB ---- However, the second of these outputs is NO DIFFERENT from the first, and no matter how many times I do this, portage keeps adding new lines to my autounmask file: --- # required by media-libs/libepoxy-1.4.2::gentoo # required by x11-libs/gtk+-3.22.16::gentoo # required by net-libs/webkit-gtk-2.18.2::gentoo # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl # required by x11-base/xorg-server-1.19.5::gentoo[glamor] # required by net-libs/webkit-gtk-2.18.2::gentoo[-test] # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl # required by x11-base/xorg-server-1.19.5::gentoo[glamor] # required by net-libs/webkit-gtk-2.18.2::gentoo[-test] # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl # required by x11-base/xorg-server-1.19.5::gentoo[glamor] # required by net-libs/webkit-gtk-2.18.2::gentoo[-test] # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl # required by x11-base/xorg-server-1.19.5::gentoo[glamor] # required by net-libs/webkit-gtk-2.18.2::gentoo[-test] # required by =net-libs/webkit-gtk-2.18.2 (argument) >=media-libs/mesa-17.0.6 egl --- However, for whatever reason, portage believes the second of these is "fixed", and then proceeds to emerge, only to in fact merge mesa WITHOUT egl: ---- * Package: media-libs/mesa-17.0.6 * Repository: gentoo * Maintainer: x11@gentoo.org * USE: abi_x86_64 amd64 classic dri3 elibc_glibc gallium gbm kernel_linux llvm nptl userland_GNU * FEATURES: ccache preserve-libs sandbox userpriv usersandbox ---- and this violates the dependency specification of libepoxy: ---- DEPEND="${PYTHON_DEPS} media-libs/mesa[egl,${MULTILIB_USEDEP}] x11-misc/util-macros X? ( x11-libs/libX11[${MULTILIB_USEDEP}] )" RDEPEND="" ---- And causes libepoxy to fail compile: ---- checking KHR/khrplatform.h presence... no checking for KHR/khrplatform.h... no checking if x86_64-pc-linux-gnu-gcc supports -Wno-int-conversion... yes checking for EGL... no configure: error: Package requirements (egl) were not met: Package egl was not found in the pkg-config search path. Perhaps you should add the directory containing `egl.pc' to the PKG_CONFIG_PATH environment variable Package 'egl', required by 'world', not found ----
Since USE settings in the environment will always override any package.use changes that --autounmask attempts to create, it's possible to create conflicts like this. I suppose the best --autounmask can to is to detect the conflict and report an error. USE settings in the environment can be treated similarly to use.force and use.mask settings.
Rather than treat the USE environment like use.force/use.mask, it would be more flexible to convert it to a package.use "*/* ${USE}" setting that autounmask would be able override for specific packages when necessary.
But package.use "*/* ${USE}" settings do not override settings for specific packages that came earlier in the package.use file(s) (ordered_by_atom_specificity function), so that won't always give the behavior expected for USE environment settings.
I think what it should do is fold the environment USE settings into generated package.use settings for specific packages when needed, and then delete the USE variable from the environment that when the config is reloaded the generated package.use settings will give the intended result.