4 use support
::{is_nightly, rustc_host}
;
5 use support
::{basic_manifest, execs, project}
;
6 use support
::hamcrest
::assert_that
;
9 fn plugin_to_the_max() {
37 fn main() { foo_lib::foo(); }
50 let _bar
= project().at("bar")
70 #![feature(plugin_registrar, rustc_private)]
72 extern crate rustc_plugin;
75 use rustc_plugin::Registry;
78 pub fn foo(_reg: &mut Registry) {
79 println!("{}", baz::baz());
84 let _baz
= project().at("baz")
95 crate_type = ["dylib"]
98 .file("src/lib.rs", "pub fn baz() -> i32 { 1 }")
101 assert_that(foo
.cargo("build"), execs());
102 assert_that(foo
.cargo("doc"), execs());
106 fn plugin_with_dynamic_native_dependency() {
111 let workspace
= project().at("ws")
116 members = ["builder", "foo"]
121 let build
= project().at("ws/builder")
132 crate-type = ["dylib"]
135 .file("src/lib.rs", "#[no_mangle] pub extern fn foo() {}")
138 let foo
= project().at("ws/foo")
177 use std::path::PathBuf;
181 let src = PathBuf::from(env::var("SRC").unwrap());
182 println!("cargo:rustc-flags=-L {}/deps", src.parent().unwrap().display());
189 #![feature(plugin_registrar, rustc_private)]
190 extern crate rustc_plugin;
192 use rustc_plugin::Registry;
194 #[cfg_attr(not(target_env = "msvc"), link(name = "builder"))]
195 #[cfg_attr(target_env = "msvc", link(name = "builder.dll"))]
199 pub fn bar(_reg: &mut Registry) {
206 assert_that(build
.cargo("build"), execs());
208 let src
= workspace
.root().join("target/debug");
209 let lib
= fs
::read_dir(&src
)
211 .map(|s
| s
.unwrap().path())
213 let lib
= lib
.file_name().unwrap().to_str().unwrap();
214 lib
.starts_with(env
::consts
::DLL_PREFIX
) && lib
.ends_with(env
::consts
::DLL_SUFFIX
)
219 foo
.cargo("build -v").env("SRC", &lib
),
225 fn plugin_integration() {
242 .file("build.rs", "fn main() {}")
243 .file("src/lib.rs", "")
244 .file("tests/it_works.rs", "")
247 assert_that(p
.cargo("test -v"), execs());
251 fn doctest_a_plugin() {
262 bar = { path = "bar" }
265 .file("src/lib.rs", "#[macro_use] extern crate bar;")
279 .file("bar/src/lib.rs", "pub fn bar() {}")
282 assert_that(p
.cargo("test -v"), execs());
287 fn native_plugin_dependency_with_custom_ar_linker() {
288 let target
= rustc_host();
303 .file("src/lib.rs", "")
306 let bar
= project().at("bar")
319 .file("src/lib.rs", "")
325 ar = "nonexistent-ar"
326 linker = "nonexistent-linker"
334 bar
.cargo("build --verbose"),
335 execs().with_status(101).with_stderr_contains(
337 [COMPILING] foo v0.0.1 ([..])
338 [RUNNING] `rustc [..] -C ar=nonexistent-ar -C linker=nonexistent-linker [..]`
339 [ERROR] [..]linker[..]
346 fn panic_abort_plugins() {
364 bar = { path = "bar" }
367 .file("src/lib.rs", "")
383 #![feature(rustc_private)]
389 assert_that(p
.cargo("build"), execs());
393 fn shared_panic_abort_plugins() {
411 bar = { path = "bar" }
412 baz = { path = "baz" }
415 .file("src/lib.rs", "extern crate baz;")
428 baz = { path = "../baz" }
434 #![feature(rustc_private)]
439 .file("baz/Cargo.toml", &basic_manifest("baz", "0.0.1"))
440 .file("baz/src/lib.rs", "")
443 assert_that(p
.cargo("build"), execs());