Skip to content
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

Drone CLI fails to install on Windows #4

Open
bugadani opened this issue Apr 3, 2020 · 4 comments
Open

Drone CLI fails to install on Windows #4

bugadani opened this issue Apr 3, 2020 · 4 comments

Comments

@bugadani
Copy link

bugadani commented Apr 3, 2020

Looks like src/env.rs contains some unix-specific code which makes it impossible to install drone on Windows. Would it be possible to replace it with a platform-independent implementation?

Compilation log:

   Compiling drone v0.11.1
error[E0433]: failed to resolve: could not find `unix` in `os`
 --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\env.rs:5:20
  |
5 | use std::{env, os::unix::process::CommandExt, process::Command};
  |                    ^^^^ could not find `unix` in `os`

error[E0432]: unresolved import `signal_hook::iterator`
  --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\probe\bmp.rs:13:18
   |
13 | use signal_hook::iterator::Signals;
   |                  ^^^^^^^^ could not find `iterator` in `signal_hook`

error[E0432]: unresolved import `signal_hook::iterator`
  --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\probe\openocd.rs:14:18
   |
14 | use signal_hook::iterator::Signals;
   |                  ^^^^^^^^ could not find `iterator` in `signal_hook`

error[E0432]: unresolved import `signal_hook::iterator`
  --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\probe\mod.rs:14:18
   |
14 | use signal_hook::iterator::Signals;
   |                  ^^^^^^^^ could not find `iterator` in `signal_hook`

error[E0433]: failed to resolve: could not find `unix` in `os`
  --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:12:9
   |
12 |     os::unix::{ffi::OsStrExt, io::AsRawFd, process::CommandExt},
   |         ^^^^ could not find `unix` in `os`

error[E0432]: unresolved imports `signal_hook::iterator`, `signal_hook::SIGQUIT`
 --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:5:19
  |
5 | use signal_hook::{iterator::Signals, SIGINT, SIGQUIT, SIGTERM};
  |                   ^^^^^^^^                   ^^^^^^^ no `SIGQUIT` in the root
  |                   |
  |                   could not find `iterator` in `signal_hook`

error[E0425]: cannot find function `mkfifo` in crate `libc`
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:115:23
    |
115 |     if unsafe { libc::mkfifo(c_pipe.as_ptr(), 0o644) } == -1 {
    |                       ^^^^^^ not found in `libc`

error[E0425]: cannot find function `fcntl` in crate `libc`
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:124:20
    |
124 |     unsafe { libc::fcntl(fifo.as_raw_fd(), libc::F_SETFL, libc::O_NONBLOCK) };
    |                    ^^^^^ not found in `libc`

error[E0425]: cannot find value `F_SETFL` in crate `libc`
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:124:50
    |
124 |     unsafe { libc::fcntl(fifo.as_raw_fd(), libc::F_SETFL, libc::O_NONBLOCK) };
    |                                                  ^^^^^^^ not found in `libc`

error[E0425]: cannot find value `O_NONBLOCK` in crate `libc`
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:124:65
    |
124 |     unsafe { libc::fcntl(fifo.as_raw_fd(), libc::F_SETFL, libc::O_NONBLOCK) };
    |                                                                 ^^^^^^^^^^ not found in `libc`

error[E0425]: cannot find function `setpgid` in crate `libc`
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:140:19
    |
140 |             libc::setpgid(0, 0);
    |                   ^^^^^^^ help: a function with a similar name exists: `getpid`

error[E0599]: no method named `exec` found for type `std::process::Command` in the current scope
  --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\env.rs:21:33
   |
21 |             Err(anyhow!(command.exec()))
   |                                 ^^^^ method not found in `std::process::Command`

error[E0599]: no method named `as_bytes` found for type `&std::ffi::OsStr` in the current scope
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:114:48
    |
114 |     let c_pipe = CString::new(pipe.as_os_str().as_bytes())?;
    |                                                ^^^^^^^^ method not found in `&std::ffi::OsStr`
    |
    = help: items from traits can only be used if the trait is in scope
    = note: the following trait is implemented but not in scope; perhaps add a `use` for it:
            `use clap::osstringext::OsStrExt3;`

error[E0599]: no method named `as_raw_fd` found for type `std::fs::File` in the current scope
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:124:31
    |
124 |     unsafe { libc::fcntl(fifo.as_raw_fd(), libc::F_SETFL, libc::O_NONBLOCK) };
    |                               ^^^^^^^^^ method not found in `std::fs::File`

error[E0599]: no method named `pre_exec` found for type `&mut std::process::Command` in the current scope
   --> C:\Users\bugad\.cargo\registry\src\github.com-1ecc6299db9ec823\drone-0.11.1\src\utils.rs:139:17
    |
139 |         openocd.pre_exec(|| {
    |                 ^^^^^^^^ method not found in `&mut std::process::Command`

error: aborting due to 15 previous errors
@valff
Copy link
Member

valff commented Apr 12, 2020

Would it be possible to replace it with a platform-independent implementation?

I think it's possible, but not trivial. Drone CLI uses pipes, signals, and other unix stuff to glue different external commands together. For example when you run drone probe itm with an OpenOCD probe, it spawns OpenOCD GDB server that connects to your probe, GDB client that connects to the GDB server and sends commands to enable ITM on the chip, itmsink utility that consumes the output of the pipe created by OpenOCD. And all of this should correctly handle Ctrl-C as if it's a single drone command.

@chemicstry
Copy link

chemicstry commented Sep 3, 2020

I'm trying out drone and hit the same issue. I think it is a really nice project, but being unix only is a really big limitation. Rust has a ton of platform independent libraries to handle this stuff.

If I have time I will give this a shot

@alfredch
Copy link
Contributor

alfredch commented Sep 3, 2020

Thank you for your comment. We will much appreciate contributions to make drone CLI tools available for non-unix operating systems.

@rmja
Copy link

rmja commented Jan 23, 2021

@chemicstry Have you considered using WSL? I am working from Windows this way, and it works just fine!

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

No branches or pull requests

5 participants