Skip to content

Rust: can't build adbc_core on windows #3149

@eitsupi

Description

@eitsupi

What happened?

As reported by #3148, the build now seems to fail with the following error.

    Checking adbc_core v0.20.0 (D:\a\arrow-adbc\arrow-adbc\rust\core)
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `windows`
    --> core\src\driver_manager.rs:1686:27
     |
1686 |                 let len = windows::Win32::Globalization::lstrlenW(path_ptr) as usize;
     |                           ^^^^^^^ use of unresolved module or unlinked crate `windows`
     |
     = help: if you wanted to use a crate named `windows`, use `cargo add windows` to add it to your `Cargo.toml`

error[E0433]: failed to resolve: use of unresolved module or unlinked crate `windows`
    --> core\src\driver_manager.rs:1689:17
     |
1689 |                 windows::Win32::System::Com::CoTaskMemFree(path_ptr as *const c_void);
     |                 ^^^^^^^ use of unresolved module or unlinked crate `windows`
     |
     = help: if you wanted to use a crate named `windows`, use `cargo add windows` to add it to your `Cargo.toml`

error[E0433]: failed to resolve: use of unresolved module or unlinked crate `windows`
    --> core\src\driver_manager.rs:1692:17
     |
1692 |                 windows::Win32::System::Com::CoTaskMemFree(path_ptr as *const c_void);
     |                 ^^^^^^^ use of unresolved module or unlinked crate `windows`
     |
     = help: if you wanted to use a crate named `windows`, use `cargo add windows` to add it to your `Cargo.toml`

error[E0433]: failed to resolve: use of unresolved module or unlinked crate `windows`
    --> core\src\driver_manager.rs:1677:31
     |
1677 |             let mut path_ptr: windows::core::PWSTR = std::ptr::null_mut();
     |                               ^^^^^^^ use of unresolved module or unlinked crate `windows`
     |
     = help: if you wanted to use a crate named `windows`, use `cargo add windows` to add it to your `Cargo.toml`

error[E0603]: function `user_config_dir` is private
    --> core\src\driver_manager.rs:1702:29
     |
1702 |         use target_windows::user_config_dir;
     |                             ^^^^^^^^^^^^^^^ private function
     |
note: the function `user_config_dir` is defined here
    --> core\src\driver_manager.rs:1675:5
     |
1675 |     fn user_config_dir() -> Option<PathBuf> {
     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0308]: mismatched types
   --> core\src\driver_manager.rs:495:53
    |
495 |                 Self::search_path_list(driver_path, LOAD_FLAG_SEARCH_ENV, entrypoint, version)
    |                 ----------------------              ^^^^^^^^^^^^^^^^^^^^ expected `Vec<PathBuf>`, found `u32`
    |                 |
    |                 arguments to this function are incorrect
    |
    = note: expected struct `std::vec::Vec<std::path::PathBuf>`
                 found type `u32`
note: associated function defined here
   --> core\src\driver_manager.rs:459:8
    |
459 |     fn search_path_list(
    |        ^^^^^^^^^^^^^^^^
460 |         driver_path: &Path,
461 |         path_list: Vec<PathBuf>,
    |         -----------------------

error[E0308]: mismatched types
   --> core\src\driver_manager.rs:512:53
    |
512 |                 Self::search_path_list(driver_path, LOAD_FLAG_SEARCH_USER, entrypoint, version)
    |                 ----------------------              ^^^^^^^^^^^^^^^^^^^^^ expected `Vec<PathBuf>`, found `u32`
    |                 |
    |                 arguments to this function are incorrect
    |
    = note: expected struct `std::vec::Vec<std::path::PathBuf>`
                 found type `u32`
note: associated function defined here
   --> core\src\driver_manager.rs:459:8
    |
459 |     fn search_path_list(
    |        ^^^^^^^^^^^^^^^^
460 |         driver_path: &Path,
461 |         path_list: Vec<PathBuf>,
    |         -----------------------

error[E0308]: mismatched types
   --> core\src\driver_manager.rs:528:53
    |
528 |                 Self::search_path_list(driver_path, LOAD_FLAG_SEARCH_SYSTEM, entrypoint, version)
    |                 ----------------------              ^^^^^^^^^^^^^^^^^^^^^^^ expected `Vec<PathBuf>`, found `u32`
    |                 |
    |                 arguments to this function are incorrect
    |
    = note: expected struct `std::vec::Vec<std::path::PathBuf>`
                 found type `u32`
note: associated function defined here
   --> core\src\driver_manager.rs:459:8
    |
459 |     fn search_path_list(
    |        ^^^^^^^^^^^^^^^^
460 |         driver_path: &Path,
461 |         path_list: Vec<PathBuf>,
    |         -----------------------

error[E0277]: `?` couldn't convert the error to `error::Error`
   --> core\src\driver_manager.rs:612:54
    |
610 | ) -> Result<DriverInfo> {
    |      ------------------ expected `error::Error` because of this
611 |     const ADBC_DRIVER_REGISTRY: &str = "SOFTWARE\\ADBC\\Drivers";
612 |     let drivers_key = root.open(ADBC_DRIVER_REGISTRY)?;
    |                            --------------------------^ the trait `std::convert::From<windows_result::error::Error>` is not implemented for `error::Error`
    |                            |
    |                            this can't be annotated with `?` because it has type `Result<_, windows_result::error::Error>`
    |
note: `error::Error` needs to implement `From<windows_result::error::Error>`
   --> core\src\error.rs:71:1
    |
71  | pub struct Error {
    | ^^^^^^^^^^^^^^^^
    = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
    = help: the following other types implement trait `std::convert::From<T>`:
              `error::Error` implements `std::convert::From<arrow_schema::ArrowError>`
              `error::Error` implements `std::convert::From<libloading::Error>`
              `error::Error` implements `std::convert::From<std::ffi::IntoStringError>`
              `error::Error` implements `std::convert::From<std::ffi::NulError>`
              `error::Error` implements `std::convert::From<std::str::Utf8Error>`

error[E0560]: struct `driver_manager::DriverInfo` has no field named `driver_name`
   --> core\src\driver_manager.rs:615:9
    |
615 |         driver_name: drivers_key.get_string("name").unwrap_or_default(),
    |         ^^^^^^^^^^^ `driver_manager::DriverInfo` does not have this field
    |
    = note: all struct fields are already assigned

error[E0308]: mismatched types
   --> core\src\driver_manager.rs:617:25
    |
617 |             .or_else(|| drivers_key.get_string("entrypoint").map(|e| e.into_bytes())),
    |                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<&[u8]>`, found `Result<Vec<u8>, Error>`
    |
    = note: expected enum `std::option::Option<&[u8]>`
               found enum `std::result::Result<std::vec::Vec<u8>, windows_result::error::Error>`

error[E0308]: mismatched types
   --> core\src\driver_manager.rs:616:21
    |
616 |           entrypoint: entrypoint
    |  _____________________^
617 | |             .or_else(|| drivers_key.get_string("entrypoint").map(|e| e.into_bytes())),
    | |_____________________________________________________________________________________^ expected `Option<Vec<u8>>`, found `Option<&[u8]>`
    |
    = note: expected enum `std::option::Option<std::vec::Vec<u8>>`
               found enum `std::option::Option<&[u8]>`

error[E0560]: struct `driver_manager::DriverInfo` has no field named `version`
   --> core\src\driver_manager.rs:618:9
    |
618 |         version: drivers_key.get_string("version").unwrap_or_default(),
    |         ^^^^^^^ `driver_manager::DriverInfo` does not have this field
    |
    = note: all struct fields are already assigned

error[E0560]: struct `driver_manager::DriverInfo` has no field named `source`
   --> core\src\driver_manager.rs:619:9
    |
619 |         source: drivers_key.get_string("source").unwrap_or_default(),
    |         ^^^^^^ `driver_manager::DriverInfo` does not have this field
    |
    = note: all struct fields are already assigned

error[E0308]: mismatched types
    --> core\src\driver_manager.rs:1679:17
     |
1678 |             let result = Shell::SHGetKnownFolderPath(
     |                          --------------------------- arguments to this function are incorrect
1679 |                 Shell::FOLDERID_LocalAppData,
     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `*const GUID`, found `GUID`
     |
     = note: expected raw pointer `*const windows_sys::core::GUID`
                     found struct `windows_sys::core::GUID`
note: function defined here
    --> C:\Users\runneradmin\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\windows-sys-0.60.2\src\Windows\Win32\UI\Shell\mod.rs:573:50
     |
573  | windows_targets::link!("shell32.dll" "system" fn SHGetKnownFolderPath(rfid : *const windows_sys::core::GUID, dwflags : u32, htoken : supe...
     |                                                  ^^^^^^^^^^^^^^^^^^^^

Some errors have detailed explanations: E0277, E0308, E0433, E0560, E0603.
For more information about an error, try `rustc --explain E0277`.
   Compiling regress v0.10.3
error: could not compile `adbc_core` (lib) due to 15 previous errors

Stack Trace

No response

How can we reproduce the bug?

No response

Environment/Setup

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions