@@ -18,19 +18,44 @@ const VERSION: &str = env!("CARGO_PKG_VERSION");
18
18
/// Set by our `build.rs`, reflects the Rust target triple we're building for
19
19
const TARGET : & str = env ! ( "TARGET" ) ;
20
20
21
- /// Where Kani has been installed. Typically `~/.kani/kani-1.x/`
22
- pub fn kani_dir ( ) -> PathBuf {
23
- home:: home_dir ( ) . expect ( "Couldn't find home dir?" ) . join ( ".kani" ) . join ( format ! ( "kani-{VERSION}" ) )
21
+ /// The directory where Kani is installed, either:
22
+ /// * (custom) `${KANI_HOME}/kani-<VERSION>` if the environment variable
23
+ /// `KANI_HOME` is set.
24
+ /// * (default) `${HOME}/.kani/kani-<VERSION>` where `HOME` is the canonical
25
+ /// definition of home directory used by Cargo and rustup.
26
+ pub fn kani_dir ( ) -> Result < PathBuf > {
27
+ let kani_dir = match env:: var ( "KANI_HOME" ) {
28
+ Ok ( val) => custom_kani_dir ( val) ,
29
+ Err ( _) => default_kani_dir ( ) ?,
30
+ } ;
31
+ let kani_dir = kani_dir. join ( format ! ( "kani-{VERSION}" ) ) ;
32
+ Ok ( kani_dir)
33
+ }
34
+
35
+ /// Returns the custom Kani home directory: `${KANI_HOME}`
36
+ fn custom_kani_dir ( path : String ) -> PathBuf {
37
+ // We don't check if it doesn't exist since we create it later
38
+ PathBuf :: from ( path)
39
+ }
40
+
41
+ /// Returns the default Kani home directory: `${HOME}/.kani`
42
+ fn default_kani_dir ( ) -> Result < PathBuf > {
43
+ let home_dir = home:: home_dir ( ) . expect ( "couldn't find home directory" ) ;
44
+ if !home_dir. is_dir ( ) {
45
+ bail ! ( "got home directory `{}` which isn't a directory" , home_dir. display( ) ) ;
46
+ }
47
+ let kani_dir = home_dir. join ( ".kani" ) ;
48
+ Ok ( kani_dir)
24
49
}
25
50
26
51
/// Fast check to see if we look setup already
27
52
pub fn appears_setup ( ) -> bool {
28
- kani_dir ( ) . exists ( )
53
+ kani_dir ( ) . expect ( "couldn't find kani directory" ) . exists ( )
29
54
}
30
55
31
56
/// Sets up Kani by unpacking/installing to `~/.kani/kani-VERSION`
32
57
pub fn setup ( use_local_bundle : Option < OsString > ) -> Result < ( ) > {
33
- let kani_dir = kani_dir ( ) ;
58
+ let kani_dir = kani_dir ( ) ? ;
34
59
let os = os_info:: get ( ) ;
35
60
36
61
println ! ( "[0/5] Running Kani first-time setup..." ) ;
0 commit comments