A few days ago, cross-compiling to JavaScript via Emscripten has finally hit nightly. I wanted to compile a project using glium
in that manner. However, there are still many Emscripten-related bugs in many crates. While maintainers usually fix those bugs quickly, they don't necessarily release those bug fixes to crates.io immediately.
In my case, glium
depends on glutin
. glutin
had a bug which is fixed now, but only in the git repository, not on crates.io
. Note: glutin
is not a direct dependency of my project; only an indirect one through glium
!
How do I tell Cargo to use the glutin
repository as source for glutin
instead of crates.io
?
Under your repository name, click Settings. In the "Security" section of the sidebar, click Code security and analysis. Read the message about granting GitHub read-only access to the repository data to enable the dependency graph, then next to "Dependency Graph", click Enable.
The purpose of a Cargo. lock is to describe the state of the world at the time of a successful build. It is then used to provide deterministic builds across whatever machine is building the package by ensuring that the exact same dependencies are being compiled.
Paket allows you to automatically manage the linking of files from any Git repository. This feature assumes that you have git installed. If you don't have git installed then Paket still allows you to reference files from GitHub.
You can use the [replace]
section in your project's Cargo.toml
. You can find the documentation about that feature here in the Cargo documentation.
In your case, glium
depends on glutin 0.6.1
. The version 0.6.1
on crates.io still contains the bug. So just add this to your Cargo.toml
:
[replace]
"glutin:0.6.1" = { git = 'https://github.com/tomaka/glutin' }
Note however,
[...] that the replaced crate must not only have the same name but also the same version.
But even in the case of a version-mismatch (the repository already contains a newer version), you could still be in luck if the crate's maintainer creates git tags for every version (many in the Rust community do). In that case you can just specify the tag:
[replace]
"glutin:0.6.1" = {
git = 'https://github.com/tomaka/glutin'
tag = 'v0.6.1'
}
Sadly, this won't work with glutin
, because the maintainer did not create tags for every version. In that case you can simply find the last commit before the version was bumped and specify it with rev = 'b4a3d0...'
or specify a specific branch with the branch = '...'
key.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With