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

Can't override build script to use existing libtcod #299

Open
ThibaultLemaire opened this issue Oct 10, 2019 · 8 comments
Open

Can't override build script to use existing libtcod #299

ThibaultLemaire opened this issue Oct 10, 2019 · 8 comments

Comments

@ThibaultLemaire
Copy link

I've tried to use the libtcod provided by my distro,

[target.x86_64-unknown-linux-gnu.tcod]
rustc-flags = "-L $LIBTCOD -l tcod"

but unfortunately cargo gives me the following warning

warning: unused manifest key: target.x86_64-unknown-linux-gnu.tcod

and compilation fails when pkg-config is not found.

@tomassedovic
Copy link
Owner

Judging by the warning, it looks like you put it in Cargo.toml. The overrides should go to .cargo/config instead.

I'm not able to actually test any of this now, but FWIW when I was playing with local overrides in a different project, I used these options instead of rustc-flags:

[target.x86_64-unknown-linux-gnu.SDL2]
rustc-link-search = ["lib/x86_64-linux-gnu"]
rustc-link-lib = ["SDL2"]

(and I had a lib/x86_64-linux-gnu/ directory in the root of my repo with all the so files)

So try something like this:

[target.x86_64-unknown-linux-gnu.tcod]
rustc-link-search = ["/usr/lib/tcod"]
rustc-link-lib = ["tcod"]

Putting in the absolute path to the directory where the libtcod.so* files are. I'm not sure what the path resolution rules are so I'd start with absolute ones and once that works switch over to whatever you actually want.

@ThibaultLemaire
Copy link
Author

Thank you, I'm still learning about cargo and didn't know about its configuration (for the record, the Rust Book chapter on configuration).

I can also confirm successful compilation with rustc-link-search and rustc-link-lib instead of rustc-flags. I could update the .cargo/config if you'd like.

Also I'm actually trying to compile on NixOS, which means the path to the library changes with every update so I'd like to rely on an environment variable but I don't know how to do that with cargo.

@ThibaultLemaire
Copy link
Author

I see rust-sdl2 uses pkg-config to figure out where SDL2 is, maybe we could do the same for libtcod?

@tomassedovic
Copy link
Owner

That's great to hear!

Have you tried with rust-flags in the right .cargo/config? I'm definitely open to updating it (honestly, I forgot we shipped a sample) but your original issue was probably due to using the wrong file. I just suggested the other options as something that did work for me in the past.

tcod_sys already uses pkg-config so adding an option to do it for libtcod sounds like a great idea to me!

https://github.com/tomassedovic/tcod-rs/blob/master/tcod_sys/build.rs

I'll be happy to check the PR if you put it up (though it may take some time, sorry about that). I won't have the time to write it myself unfortunately :-(.

@tomassedovic
Copy link
Owner

(we should still support building libtcod as a fallback, but yeah if pkg-config finds it, let's just use that instead)

@ThibaultLemaire
Copy link
Author

Have you tried with rust-flags in the right .cargo/config?

Not exactly, but I bet it would work as well.

I just suggested the other options as something that did work for me in the past

I know, but I think using link-search and link-lib is cleaner (since it's also what's recommended in the rust doc).

tcod_sys already uses pkg-config so adding an option to do it for libtcod sounds like a great idea to me!

Great, I'll open a new issue and start working on a PR.

we should still support building libtcod as a fallback

Ofc, that was a given.

So, if I manage to make the build detect libtcod through pgk-config, should we remove the manual override section of the README and the config example or would they still have some use ? (which then means I should update them)

@ThibaultLemaire
Copy link
Author

(Btw, just confirmed working with rustc-flags)

@ThibaultLemaire
Copy link
Author

Actually, the libtcod package on NixOS is missing the pgkconfig declaration so pkg-config won't help me for what I'm trying to accomplish there...

I was thinking on maybe reading an env var in the build script to allow easy override? (dynamically writing the path to .cargo/config is not something I want to do)

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

2 participants