Skip to content

Compilation error when building with --cfg doc #383

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
fpoli opened this issue Jan 19, 2023 · 1 comment · Fixed by #387
Closed

Compilation error when building with --cfg doc #383

fpoli opened this issue Jan 19, 2023 · 1 comment · Fixed by #387

Comments

@fpoli
Copy link

fpoli commented Jan 19, 2023

Is there some known limitation regarding generating the documentation of socket2?

I tried generating the documentation with links to definitions of a crate depending on socket2:

cargo init
cargo add socket2@0.4.7
RUSTDOCFLAGS="--generate-link-to-definition -Zunstable-options" cargo +nightly-2023-01-15 doc

I expected the cargo doc above to succeed. Instead, I get some compilation errors:

   Compiling libc v0.2.139
 Documenting libc v0.2.139
    Checking socket2 v0.4.7
 Documenting socket2 v0.4.7
error[E0433]: failed to resolve: could not resolve path `sys::socketpair`
   --> /home/fpoli/.cargo/registry/src/gh.loli.garden-1ecc6299db9ec823/socket2-0.4.7/src/socket.rs:172:9
    |
172 |         sys::socketpair(domain.0, ty.0, protocol)
    |         ^^^^^^^^^^^^^^^ could not resolve path `sys::socketpair`
    |
    = note: this error was originally ignored because you are running `rustdoc`
    = note: try running again with `rustc` or `cargo check` and you may get a more detailed error

error[E0433]: failed to resolve: could not resolve path `sys::keepalive_time`
    --> /home/fpoli/.cargo/registry/src/gh.loli.garden-1ecc6299db9ec823/socket2-0.4.7/src/socket.rs:1663:9
     |
1663 |         sys::keepalive_time(self.as_raw())
     |         ^^^^^^^^^^^^^^^^^^^ could not resolve path `sys::keepalive_time`
     |
     = note: this error was originally ignored because you are running `rustdoc`
     = note: try running again with `rustc` or `cargo check` and you may get a more detailed error

For more information about this error, try `rustc --explain E0433`.
error: could not document `socket2`

Even without using nightly Rust, the following fails to compile (suggested in rust-lang/rust#107063):

RUSTFLAGS="--cfg doc" cargo build
   Compiling libc v0.2.139
   Compiling socket2 v0.4.7
error[E0425]: cannot find function `socketpair` in module `sys`
   --> /home/fpoli/.cargo/registry/src/gh.loli.garden-1ecc6299db9ec823/socket2-0.4.7/src/socket.rs:172:14
    |
172 |         sys::socketpair(domain.0, ty.0, protocol)
    |              ^^^^^^^^^^ not found in `sys`
    |
help: consider importing this function
    |
9   | use libc::socketpair;
    |
help: if you import `socketpair`, refer to it directly
    |
172 -         sys::socketpair(domain.0, ty.0, protocol)
172 +         socketpair(domain.0, ty.0, protocol)
    |

error[E0425]: cannot find function `keepalive_time` in module `sys`
    --> /home/fpoli/.cargo/registry/src/gh.loli.garden-1ecc6299db9ec823/socket2-0.4.7/src/socket.rs:1663:14
     |
1663 |         sys::keepalive_time(self.as_raw())
     |              ^^^^^^^^^^^^^^ help: a constant with a similar name exists: `KEEPALIVE_TIME`
     |
    ::: /home/fpoli/.cargo/registry/src/gh.loli.garden-1ecc6299db9ec823/libc-0.2.139/src/unix/linux_like/mod.rs:964:1
     |
964  | pub const TCP_KEEPIDLE: ::c_int = 4;
     | ------------------------------- similarly named constant `KEEPALIVE_TIME` defined here

For more information about this error, try `rustc --explain E0425`.
error: could not compile `socket2` due to 2 previous errors
@Thomasdezeeuw
Copy link
Collaborator

I think we're missing the #[cfg_attr(docsrs, doc(cfg(all(feature = "all", unix))))] attribute, see

#[cfg_attr(docsrs, doc(cfg(all(feature = "all", unix))))]

on the socketpair in the sys module:

socket2/src/sys/unix.rs

Lines 612 to 613 in a6d6587

#[cfg(feature = "all")]
pub(crate) fn socketpair(family: c_int, ty: c_int, protocol: c_int) -> io::Result<[Socket; 2]> {

We should probably add this to the CI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants