Devolutions / conan-rs

A Rust wrapper of the conan C/C++ package manager (conan.io) to simplify usage in build scripts
Apache License 2.0
34 stars 11 forks source link

Conan install error #25

Closed vithalsm closed 5 months ago

vithalsm commented 5 months ago

Hi,

I tried to use 'conan-rs' following the steps mentioned. However, I am getting an error as below:

Running `/home/rust-test/rust/rust-conan/target/debug/build/rust-conan-ab89c5392bdc9e1a/build-script-build`

[rust-conan 0.1.0] usage: conan install [-h] [-f FORMAT] [-v [V]] [--name NAME] [rust-conan 0.1.0] [--version VERSION] [--user USER] [--channel CHANNEL] [rust-conan 0.1.0] [--requires REQUIRES] [--tool-requires TOOL_REQUIRES] [rust-conan 0.1.0] [-b BUILD] [-r REMOTE | -nr] [-u] [-o OPTIONS_HOST] [rust-conan 0.1.0] [-o:b OPTIONS_BUILD] [-o:h OPTIONS_HOST] [rust-conan 0.1.0] [-pr PROFILE_HOST] [-pr:b PROFILE_BUILD] [rust-conan 0.1.0] [-pr:h PROFILE_HOST] [-s SETTINGS_HOST] [rust-conan 0.1.0] [-s:b SETTINGS_BUILD] [-s:h SETTINGS_HOST] [-c CONF_HOST] [rust-conan 0.1.0] [-c:b CONF_BUILD] [-c:h CONF_HOST] [-l LOCKFILE] [rust-conan 0.1.0] [--lockfile-partial] [--lockfile-out LOCKFILE_OUT] [rust-conan 0.1.0] [--lockfile-packages] [--lockfile-clean] [-g GENERATOR] [rust-conan 0.1.0] [-of OUTPUT_FOLDER] [--deploy DEPLOY] [rust-conan 0.1.0] [path] [rust-conan 0.1.0] conan install: error: unrecognized arguments: -if conanfile.txt [rust-conan 0.1.0] ERROR: Exiting with code: 2

Please let me know how to fix the same.

vithalsm commented 5 months ago

I could surpass (or mask) the above error by adjusting the input value from the build.rs (listed below). I believe, problem is due to below code snippet, in which argument '-if' is used. Wondering whether it should be '-of' rather.

let output_dir = self.output_dir(); if let Some(output_dir) = &output_dir { let current_dir = env::current_dir()?.to_path_buf(); if output_dir != &current_dir { <<<<<< By passing same value as being derived here, skipped below lines where '-if' is being passed. args.extend(&["-if", output_dir.to_str().unwrap()]); } }

my build.rs >>>>>>>>>> fn main() { let conan_profile = "default"; let opts = ["sign", "True"]; let _cur_dir = env::current_dir().unwrap(); let _dest_path = Path::new(&_cur_dir);

let command = InstallCommandBuilder::new()
    .with_profile(&conan_profile)
    **.with_options(&opts)**
    .build_policy(BuildPolicy::Missing)
    .recipe_path(Path::new("conanfile.txt"))
    **.output_dir(&_dest_path)**
    .build();
vithalsm commented 5 months ago

New error observed:

Running `/home/vmohare/rust/rust-conan/target/debug/build/rust-conan-ab89c5392bdc9e1a/build-script-build`

[rust-conan 0.1.0] ERROR: not enough values to unpack (expected 2, got 1) [rust-conan 0.1.0] Traceback (most recent call last): [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/cli/cli.py", line 272, in main [rust-conan 0.1.0] cli.run(args) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/cli/cli.py", line 171, in run [rust-conan 0.1.0] command.run(self._conan_api, self._commands[command_argument].parser, args[0][1:]) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/cli/command.py", line 157, in run [rust-conan 0.1.0] info = self._method(conan_api, parser, *args) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/cli/commands/install.py", line 61, in install [rust-conan 0.1.0] profile_host, profile_build = conan_api.profiles.get_profiles_from_args(args) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/api/subapi/profiles.py", line 36, in get_profiles_from_args [rust-conan 0.1.0] profile_host = self.get_profile(profiles=host, settings=args.settings_host, [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conan/api/subapi/profiles.py", line 48, in get_profile [rust-conan 0.1.0] profile = loader.from_cli_args(profiles, settings, options, conf, cwd) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conans/client/profile_loader.py", line 131, in from_cli_args [rust-conan 0.1.0] args_profile = _profile_parse_args(settings, options, conf) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conans/client/profile_loader.py", line 385, in _profile_parse_args [rust-conan 0.1.0] result.options = Options.loads("\n".join(options or [])) [rust-conan 0.1.0] File "/home/vmohare/.local/lib/python3.8/site-packages/conans/model/options.py", line 275, in loads [rust-conan 0.1.0] name, value = line.split("=", 1) [rust-conan 0.1.0] ValueError: not enough values to unpack (expected 2, got 1) [rust-conan 0.1.0]

vithalsm commented 5 months ago

Fixed above issue, this is due to the way 'options' being sent to 'install' command. Help text needs to be adjusted.

EMCP commented 5 months ago

@vithalsm , I believe I hit a similar problem as you.. and the fix was to remove the following line from the example

        .with_option("sign", "True")

Seems that a PR would help the original author if you can confirm

vithalsm commented 5 months ago

Hi @EMCP, Yes, it can be removed. However, the right API is .with_options(...). Documentation needs to be fixed with name and signatures.