1 use support
::{basic_manifest, project}
;
2 use support
::{is_nightly, rustc_host}
;
5 fn plugin_to_the_max() {
32 fn main() { foo_lib::foo(); }
63 #![feature(plugin_registrar, rustc_private)]
65 extern crate rustc_plugin;
68 use rustc_plugin::Registry;
71 pub fn foo(_reg: &mut Registry) {
72 println!("{}", baz::baz());
88 crate_type = ["dylib"]
90 ).file("src/lib.rs", "pub fn baz() -> i32 { 1 }")
93 foo
.cargo("build").run();
94 foo
.cargo("doc").run();
98 fn plugin_with_dynamic_native_dependency() {
103 let build
= project()
115 crate-type = ["dylib"]
117 ).file("src/lib.rs", "#[no_mangle] pub extern fn foo() {}")
158 use std::path::PathBuf;
161 let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
162 let root = PathBuf::from(env::var("BUILDER_ROOT").unwrap());
163 let file = format!("{}builder{}",
164 env::consts::DLL_PREFIX,
165 env::consts::DLL_SUFFIX);
166 let src = root.join(&file);
167 let dst = out_dir.join(&file);
168 fs::copy(src, dst).unwrap();
170 fs::copy(root.join("builder.dll.lib"),
171 out_dir.join("builder.dll.lib")).unwrap();
173 println!("cargo:rustc-flags=-L {}", out_dir.display());
179 #![feature(plugin_registrar, rustc_private)]
180 extern crate rustc_plugin;
182 use rustc_plugin::Registry;
184 #[cfg_attr(not(target_env = "msvc"), link(name = "builder"))]
185 #[cfg_attr(target_env = "msvc", link(name = "builder.dll"))]
189 pub fn bar(_reg: &mut Registry) {
195 build
.cargo("build").run();
197 let root
= build
.root().join("target").join("debug");
198 foo
.cargo("build -v").env("BUILDER_ROOT", root
).run();
202 fn plugin_integration() {
218 ).file("build.rs", "fn main() {}")
219 .file("src/lib.rs", "")
220 .file("tests/it_works.rs", "")
223 p
.cargo("test -v").run();
227 fn doctest_a_plugin() {
238 bar = { path = "bar" }
240 ).file("src/lib.rs", "#[macro_use] extern crate bar;")
253 ).file("bar/src/lib.rs", "pub fn bar() {}")
256 p
.cargo("test -v").run();
261 fn native_plugin_dependency_with_custom_ar_linker() {
262 let target
= rustc_host();
276 ).file("src/lib.rs", "")
292 ).file("src/lib.rs", "")
298 ar = "nonexistent-ar"
299 linker = "nonexistent-linker"
305 bar
.cargo("build --verbose")
307 .with_stderr_contains(
309 [COMPILING] foo v0.0.1 ([..])
310 [RUNNING] `rustc [..] -C ar=nonexistent-ar -C linker=nonexistent-linker [..]`
311 [ERROR] [..]linker[..]
317 fn panic_abort_plugins() {
335 bar = { path = "bar" }
337 ).file("src/lib.rs", "")
352 #![feature(rustc_private)]
357 p
.cargo("build").run();
361 fn shared_panic_abort_plugins() {
379 bar = { path = "bar" }
380 baz = { path = "baz" }
382 ).file("src/lib.rs", "extern crate baz;")
395 baz = { path = "../baz" }
400 #![feature(rustc_private)]
404 ).file("baz/Cargo.toml", &basic_manifest("baz", "0.0.1"))
405 .file("baz/src/lib.rs", "")
408 p
.cargo("build").run();