From e5746742c203288f9b3f1d9f624e18fbe59374ad Mon Sep 17 00:00:00 2001 From: Rajsekar Manokaran Date: Tue, 26 Jul 2022 11:01:33 +0530 Subject: [PATCH 1/4] Fix crate build on docs.rs Use dynamic code-gen to build-around non-availabiltiy of some packages. --- build.rs | 18 +++--------------- gdal-sys/build.rs | 25 +++++++++++++++++++++++++ gdal-sys/src/lib.rs | 1 + 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/build.rs b/build.rs index 04b27b890..d60ee968a 100644 --- a/build.rs +++ b/build.rs @@ -1,23 +1,11 @@ use std::str::FromStr; -#[cfg(docsrs)] -pub fn gdal_version_info(_key: &str) -> String { - "3020000".to_string() -} - -#[cfg(not(docsrs))] -pub fn gdal_version_info(key: &str) -> String { - let c_key = std::ffi::CString::new(key.as_bytes()).unwrap(); - - unsafe { - let res_ptr = gdal_sys::GDALVersionInfo(c_key.as_ptr()); - let c_res = std::ffi::CStr::from_ptr(res_ptr); - c_res.to_string_lossy().into_owned() - } +fn gdal_version_info() -> String { + gdal_sys::gdal_version_docs_rs_wrapper() } fn main() { - let gdal_version_string = gdal_version_info("VERSION_NUM"); + let gdal_version_string = gdal_version_info(); println!("GDAL version string: \"{}\"", gdal_version_string); // this version string is the result of: diff --git a/gdal-sys/build.rs b/gdal-sys/build.rs index aea354452..22587dcb9 100644 --- a/gdal-sys/build.rs +++ b/gdal-sys/build.rs @@ -57,7 +57,31 @@ fn find_gdal_dll(lib_dir: &Path) -> io::Result> { Ok(None) } +fn add_docs_rs_helper() { + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("docs_rs_helper.rs"); + let docs_helper_code = if std::env::var_os("DOCS_RS").is_some() { + r#" + pub fn gdal_version_docs_rs_wrapper() -> String { + "3020000".to_string() + }"# + } else { + r#" + pub fn gdal_version_docs_rs_wrapper() -> String { + let key = "VERSION_NUM"; + let c_key = std::ffi::CString::new(key.as_bytes()).unwrap(); + + unsafe { + let res_ptr = crate::GDALVersionInfo(c_key.as_ptr()); + let c_res = std::ffi::CStr::from_ptr(res_ptr); + c_res.to_string_lossy().into_owned() + } + }"# + }; + std::fs::write(&out_path, docs_helper_code.as_bytes()).unwrap(); +} + fn main() { + add_docs_rs_helper(); let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("bindings.rs"); // Hardcode a prebuilt binding version while generating docs. @@ -234,4 +258,5 @@ fn main() { panic!("No GDAL version detected"); } } + } diff --git a/gdal-sys/src/lib.rs b/gdal-sys/src/lib.rs index 8b199c5a6..20d283f5f 100644 --- a/gdal-sys/src/lib.rs +++ b/gdal-sys/src/lib.rs @@ -4,3 +4,4 @@ #![allow(clippy::upper_case_acronyms)] include!(concat!(env!("OUT_DIR"), "/bindings.rs")); +include!(concat!(env!("OUT_DIR"), "/docs_rs_helper.rs")); From 488143b201e909ce7e2c430ca29674285ea424b6 Mon Sep 17 00:00:00 2001 From: Rajsekar Manokaran Date: Tue, 26 Jul 2022 11:14:01 +0530 Subject: [PATCH 2/4] Fix fmt --- gdal-sys/build.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/gdal-sys/build.rs b/gdal-sys/build.rs index 22587dcb9..b3159d048 100644 --- a/gdal-sys/build.rs +++ b/gdal-sys/build.rs @@ -258,5 +258,4 @@ fn main() { panic!("No GDAL version detected"); } } - } From c4831c0798ccd06ecb7347b1493e64e57664b364 Mon Sep 17 00:00:00 2001 From: Rajsekar Manokaran Date: Tue, 26 Jul 2022 11:39:11 +0530 Subject: [PATCH 3/4] Update documentation version Use latest GDAL 3.5 pre-bindings for compiling for docs. --- gdal-sys/build.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/gdal-sys/build.rs b/gdal-sys/build.rs index b3159d048..23d9cef54 100644 --- a/gdal-sys/build.rs +++ b/gdal-sys/build.rs @@ -57,13 +57,15 @@ fn find_gdal_dll(lib_dir: &Path) -> io::Result> { Ok(None) } -fn add_docs_rs_helper() { +fn add_docs_rs_helper(version: Option<&str>) { let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("docs_rs_helper.rs"); - let docs_helper_code = if std::env::var_os("DOCS_RS").is_some() { - r#" - pub fn gdal_version_docs_rs_wrapper() -> String { - "3020000".to_string() - }"# + let docs_helper_code = if let Some(version) = version { + format!( + r#" + pub fn gdal_version_docs_rs_wrapper() -> String {{ + "{version}".to_string() + }}"# + ) } else { r#" pub fn gdal_version_docs_rs_wrapper() -> String { @@ -76,18 +78,19 @@ fn add_docs_rs_helper() { c_res.to_string_lossy().into_owned() } }"# + .to_string() }; std::fs::write(&out_path, docs_helper_code.as_bytes()).unwrap(); } fn main() { - add_docs_rs_helper(); let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("bindings.rs"); // Hardcode a prebuilt binding version while generating docs. // Otherwise docs.rs will explode due to not actually having libgdal installed. if std::env::var("DOCS_RS").is_ok() { - let version = Version::parse("3.2.0").expect("invalid version for docs.rs"); + let version = Version::parse("3.5.0").expect("invalid version for docs.rs"); + add_docs_rs_helper(Some("3050000")); println!( "cargo:rustc-cfg=gdal_sys_{}_{}_{}", version.major, version.minor, version.patch @@ -107,6 +110,7 @@ fn main() { return; } + add_docs_rs_helper(None); println!("cargo:rerun-if-env-changed=GDAL_STATIC"); println!("cargo:rerun-if-env-changed=GDAL_DYNAMIC"); println!("cargo:rerun-if-env-changed=GDAL_INCLUDE_DIR"); From 377a3fa6d91593929a13b65631e04108cd4c27ce Mon Sep 17 00:00:00 2001 From: Rajsekar Manokaran Date: Sun, 31 Jul 2022 21:41:42 +0530 Subject: [PATCH 4/4] Minor fixes --- CHANGES.md | 5 ++++- Cargo.toml | 3 --- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4c02b0944..2a2e2427b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,9 @@ ## Unreleased +- Add prebuild bindings for GDAL 3.5 + - + - **Breaking**: Add `gdal::vector::OwnedLayer`, `gdal::vector::LayerAccess` and `gdal::vector::layer::OwnedFeatureIterator`. This requires importing `gdal::vector::LayerAccess` for using most vector layer methods. - https://github.com/georust/gdal/pull/238 @@ -17,7 +20,7 @@ - Implemented wrapper for `OGR_L_SetFeature` - - + - Add `programs::raster::build_vrt` - Add `GeoTransformEx` extension trait with `apply` and `invert` diff --git a/Cargo.toml b/Cargo.toml index 46be514c1..5c40a569f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,3 @@ trybuild = "1.0" [workspace] members = ["gdal-sys"] - -[package.metadata.docs.rs] -rustc-args = ["--cfg", "docsrs"]