Auto merge of #5353 - matklad:features, r=alexcrichton
authorbors <bors@rust-lang.org>
Fri, 13 Apr 2018 16:28:23 +0000 (16:28 +0000)
committerbors <bors@rust-lang.org>
Fri, 13 Apr 2018 16:28:23 +0000 (16:28 +0000)
New semantics for `--features` flag

Historically, feature-related flags like `--all-features`,
`--no-default-features` and `--features` operated on the *current*
package. That is, `cargo --package foo --feature feat` would activate
`feat` for the package at the current working directory, and not for the
`foo` package. `-Z package-features` flag implements the more obvious
semantics for this combination of flags. This changes behavior, and that
is why we want to start with an unstable opt-in. The changes are:

* `--feature` flag affects the selected package. It is an error to
  specify `--feature` with more than a single `-p`, or with `-p` outside
  workspace (the latter could work in theory, but would be hard to
  implement).

* `--all-features` and `--no-default-features` affect all selected
  packages, and not the one at cwd.

* The package in `cwd` is not implicitly enabled when doing feature
  selection. That is, `cargo build -Z package-features -p foo` could
  select *less* features for various packages than `cargo build -p foo`.

r? @alexcrichton


Trivial merge