I have this in one of my ebuilds: RDEPEND=".... ..." DEPEND="${RDEPEND} !x11-misc/imake" You will note the !atom is in DEPEND, which is compile time. It is there because I need imake to NOT be on the system when this package is being emerged. However, this is the result of trying to emerge a minimal test case of this: $ sudo emerge -av1 stupidtest These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] app-misc/stupidtest-0 0 kB [1] [uninstall ] x11-misc/imake-1.0.2 USE="lib32 -debug" [2] [blocks b ] x11-misc/imake ("x11-misc/imake" is blocking app-misc/stupidtest-0) Total: 1 package (1 new, 1 uninstall), Size of downloads: 0 kB Conflict: 1 block Portage tree and overlays: [0] /usr/portage [1] /usr/local/portage/junk [2] /usr/local/portage/multilib Would you like to merge these packages? [Yes/No] As you can see, it doesn't uninstall it until *AFTER* my package has emerged, which is no good at all! This behaviour would make sense if the atom was in RDEPEND, but it is not. I have tested this also with portage-2.2_rc36
Created attachment 200554 [details] test ebuild I used to create the pasted output
Unfortunately, Portage is behaving as PMS says it should here (because PMS had to be rewritten to match Portage's behaviour...). DEPEND="!foo" means "if I'm being built from source, foo has to be removed at some point", and RDEPEND="!foo" means "foo has to be removed at some point". Use EAPI 2 hard blockers to get what you're after instead. Yes, it's highly dumb.
This is intended behavior.
As comment #2 says, you can use DEPEND="!!atom" and EAPI="2" to achieve what you suggest.