diff --git a/libsqlite3-sys/build.rs b/libsqlite3-sys/build.rs index 9da7810..05e9c83 100644 --- a/libsqlite3-sys/build.rs +++ b/libsqlite3-sys/build.rs @@ -108,18 +108,27 @@ mod build { bindings::write_to_out_dir(header, out_path); } + fn find_link_mode() -> &'static str { + // If the user specifies SQLITE_STATIC (or SQLCIPHER_STATIC), do static + // linking, unless it's explicitly set to 0. + match &env::var(format!("{}_STATIC", env_prefix())) { + Ok(v) if v != "0" => "static", + _ => "dylib", + } + } // Prints the necessary cargo link commands and returns the path to the header. fn find_sqlite() -> HeaderLocation { let link_lib = link_lib(); println!("cargo:rerun-if-env-changed={}_INCLUDE_DIR", env_prefix()); println!("cargo:rerun-if-env-changed={}_LIB_DIR", env_prefix()); + println!("cargo:rerun-if-env-changed={}_STATIC", env_prefix()); if cfg!(target_os = "windows") { println!("cargo:rerun-if-env-changed=PATH"); } // Allow users to specify where to find SQLite. if let Ok(dir) = env::var(format!("{}_LIB_DIR", env_prefix())) { - println!("cargo:rustc-link-lib={}", link_lib); + println!("cargo:rustc-link-lib={}={}", find_link_mode(), link_lib); println!("cargo:rustc-link-search={}", dir); return HeaderLocation::FromEnvironment; } @@ -146,7 +155,7 @@ mod build { // request and hope that the library exists on the system paths. We used to // output /usr/lib explicitly, but that can introduce other linking problems; // see https://github.com/jgallagher/rusqlite/issues/207. - println!("cargo:rustc-link-lib={}", link_lib); + println!("cargo:rustc-link-lib={}={}", find_link_mode(), link_lib); HeaderLocation::Wrapper } }