Skip to content

Commit f40d72c

Browse files
committed
Introduce CFG.change_detection bool flag
Adds `cargo:rerun-if-changed=<path>` for all files used by the bridge if the `CFG.change_detection` is `true`.
1 parent 82765ef commit f40d72c

File tree

7 files changed

+20
-6
lines changed

7 files changed

+20
-6
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,12 @@ cxx-build = "1.0"
242242
// build.rs
243243

244244
fn main() {
245+
cxx_build::CFG.change_detection = true;
245246
cxx_build::bridge("src/main.rs") // returns a cc::Build
246247
.file("src/demo.cc")
247248
.std("c++11")
248249
.compile("cxxbridge-demo");
249250

250-
println!("cargo:rerun-if-changed=src/main.rs");
251251
println!("cargo:rerun-if-changed=src/demo.cc");
252252
println!("cargo:rerun-if-changed=include/demo.h");
253253
}

book/src/build/cargo.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ set up any additional source files and compiler flags as normal.
3636
// build.rs
3737
3838
fn main() {
39+
cxx_build::CFG.change_detection = true;
3940
cxx_build::bridge("src/main.rs") // returns a cc::Build
4041
.file("src/demo.cc")
4142
.std("c++11")
4243
.compile("cxxbridge-demo");
4344
44-
println!("cargo:rerun-if-changed=src/main.rs");
4545
println!("cargo:rerun-if-changed=src/demo.cc");
4646
println!("cargo:rerun-if-changed=include/demo.h");
4747
}

book/src/tutorial.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,11 @@ build.
201201
// build.rs
202202
203203
fn main() {
204+
cxx_build::CFG.change_detection = true;
204205
cxx_build::bridge("src/main.rs")
205206
.file("src/blobstore.cc")
206207
.compile("cxx-demo");
207208
208-
println!("cargo:rerun-if-changed=src/main.rs");
209209
println!("cargo:rerun-if-changed=src/blobstore.cc");
210210
println!("cargo:rerun-if-changed=include/blobstore.h");
211211
}

demo/build.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
fn main() {
2+
cxx_build::CFG.change_detection = true;
23
cxx_build::bridge("src/main.rs")
34
.file("src/blobstore.cc")
45
.std("c++14")
56
.compile("cxxbridge-demo");
67

7-
println!("cargo:rerun-if-changed=src/main.rs");
88
println!("cargo:rerun-if-changed=src/blobstore.cc");
99
println!("cargo:rerun-if-changed=include/blobstore.h");
1010
}

gen/build/src/cfg.rs

+11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ pub struct Cfg<'a> {
1414
pub exported_header_links: Vec<&'a str>,
1515
/// See [`CFG.doxygen`][CFG#cfgdoxygen].
1616
pub doxygen: bool,
17+
/// See [`CFG.change_detection`][CFG#cfgchange_detection].
18+
pub change_detection: bool,
1719
marker: PhantomData<*const ()>, // !Send + !Sync
1820
}
1921

@@ -323,6 +325,7 @@ impl<'a> Debug for Cfg<'a> {
323325
exported_header_prefixes,
324326
exported_header_links,
325327
doxygen,
328+
change_detection,
326329
marker: _,
327330
} = self;
328331
formatter
@@ -332,6 +335,7 @@ impl<'a> Debug for Cfg<'a> {
332335
.field("exported_header_prefixes", exported_header_prefixes)
333336
.field("exported_header_links", exported_header_links)
334337
.field("doxygen", doxygen)
338+
.field("change_detection", change_detection)
335339
.finish()
336340
}
337341
}
@@ -356,6 +360,7 @@ mod r#impl {
356360
exported_header_prefixes: Vec<InternedString>,
357361
exported_header_links: Vec<InternedString>,
358362
doxygen: bool,
363+
change_detection: bool,
359364
}
360365

361366
impl CurrentCfg {
@@ -367,12 +372,14 @@ mod r#impl {
367372
let exported_header_prefixes = Vec::new();
368373
let exported_header_links = Vec::new();
369374
let doxygen = false;
375+
let change_detection = false;
370376
CurrentCfg {
371377
include_prefix,
372378
exported_header_dirs,
373379
exported_header_prefixes,
374380
exported_header_links,
375381
doxygen,
382+
change_detection,
376383
}
377384
}
378385
}
@@ -409,12 +416,14 @@ mod r#impl {
409416
let exported_header_prefixes = current.exported_header_prefixes.vec();
410417
let exported_header_links = current.exported_header_links.vec();
411418
let doxygen = current.doxygen;
419+
let change_detection = current.change_detection;
412420
super::Cfg {
413421
include_prefix,
414422
exported_header_dirs,
415423
exported_header_prefixes,
416424
exported_header_links,
417425
doxygen,
426+
change_detection,
418427
marker: PhantomData,
419428
}
420429
}
@@ -481,6 +490,7 @@ mod r#impl {
481490
exported_header_prefixes,
482491
exported_header_links,
483492
doxygen,
493+
change_detection,
484494
marker: _,
485495
} = cfg;
486496
let mut current = current().write().unwrap_or_else(PoisonError::into_inner);
@@ -489,6 +499,7 @@ mod r#impl {
489499
current.exported_header_prefixes = vec::intern(exported_header_prefixes);
490500
current.exported_header_links = vec::intern(exported_header_links);
491501
current.doxygen = *doxygen;
502+
current.change_detection = *change_detection;
492503
} else {
493504
CONST_DEREFS.with(|derefs| derefs.borrow_mut().remove(&self.handle()));
494505
}

gen/build/src/lib.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
//! // build.rs
1515
//!
1616
//! fn main() {
17+
//! cxx_build::CFG.change_detection = true;
1718
//! cxx_build::bridge("src/main.rs")
1819
//! .file("src/demo.cc")
1920
//! .std("c++11")
2021
//! .compile("cxxbridge-demo");
2122
//!
22-
//! println!("cargo:rerun-if-changed=src/main.rs");
2323
//! println!("cargo:rerun-if-changed=src/demo.cc");
2424
//! println!("cargo:rerun-if-changed=include/demo.h");
2525
//! }
@@ -397,6 +397,9 @@ fn generate_bridge(prj: &Project, build: &mut Build, rust_source_file: &Path) ->
397397
doxygen: CFG.doxygen,
398398
..Opt::default()
399399
};
400+
if CFG.change_detection {
401+
println!("cargo:rerun-if-changed={}", rust_source_file.display());
402+
}
400403
let generated = gen::generate_from_path(rust_source_file, &opt);
401404
let ref rel_path = paths::local_relative_path(rust_source_file);
402405

src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,12 @@
249249
//! // build.rs
250250
//!
251251
//! fn main() {
252+
//! cxx_build::CFG.change_detection = true;
252253
//! cxx_build::bridge("src/main.rs") // returns a cc::Build
253254
//! .file("src/demo.cc")
254255
//! .std("c++11")
255256
//! .compile("cxxbridge-demo");
256257
//!
257-
//! println!("cargo:rerun-if-changed=src/main.rs");
258258
//! println!("cargo:rerun-if-changed=src/demo.cc");
259259
//! println!("cargo:rerun-if-changed=include/demo.h");
260260
//! }

0 commit comments

Comments
 (0)