From f10cecf8039fb74e55eca0083737dce4372bfde1 Mon Sep 17 00:00:00 2001 From: Xie Ruifeng Date: Tue, 7 Dec 2021 18:50:01 +0800 Subject: [PATCH 1/5] add vcpkg-rs for locating freetype --- imgui-sys/Cargo.toml | 3 ++- imgui-sys/build.rs | 29 +++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/imgui-sys/Cargo.toml b/imgui-sys/Cargo.toml index 6923859..9779e54 100644 --- a/imgui-sys/Cargo.toml +++ b/imgui-sys/Cargo.toml @@ -33,9 +33,10 @@ cfg-if = "1" [build-dependencies] cc = "1.0" pkg-config = { version="0.3", optional=true } +vcpkg = { version="0.2.15", optional=true } [features] default = [] wasm = [] -freetype = ["pkg-config"] docking = [] +freetype = ["pkg-config", "vcpkg"] diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index 9b37c04..d796ea6 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -9,11 +9,34 @@ const DEFINES: &[(&str, Option<&str>)] = &[ ("IMGUI_DISABLE_OSX_FUNCTIONS", None), ]; +// Output define args for compiler fn main() -> std::io::Result<()> { // Root of imgui-sys let manifest_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")); - // Output define args for compiler + #[cfg(feature = "freetype")] + fn find_freetype() -> Vec> { + let err_pkg_config; + let err_vcpkg; + match pkg_config::Config::new().find("freetype2") { + Ok(freetype) => return freetype.include_paths, + Err(err) => err_pkg_config = err, + } + match vcpkg::find_package("freetype") { + Ok(freetype) => return freetype.include_paths, + Err(err) => err_vcpkg = err, + } + panic!( + "cannot find freetype:\n\ + - pkg-config failed with: {}\n\ + - vcpkg failed with: {}", + err_pkg_config, err_vcpkg + ); + } + println!( + "cargo:THIRD_PARTY={}", + manifest_dir.join("third-party").display() + ); for (key, value) in DEFINES.iter() { println!("cargo:DEFINE_{}={}", key, value.unwrap_or("")); } @@ -48,9 +71,7 @@ fn main() -> std::io::Result<()> { // Freetype font rasterizer feature #[cfg(feature = "freetype")] { - // Find library - let freetype = pkg_config::Config::new().find("freetype2").unwrap(); - for include in freetype.include_paths.iter() { + for include in find_freetype() { build.include(include); } // Set flag for dear imgui From 5354ba8b040e353e3584366d130b3c765b317dad Mon Sep 17 00:00:00 2001 From: Jack OntheGoMac Date: Wed, 22 Dec 2021 10:31:11 -0800 Subject: [PATCH 2/5] rebased for CI --- imgui-sys/build.rs | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index d796ea6..fe7be78 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -9,30 +9,31 @@ const DEFINES: &[(&str, Option<&str>)] = &[ ("IMGUI_DISABLE_OSX_FUNCTIONS", None), ]; +#[cfg(feature = "freetype")] +fn find_freetype() -> Vec> { + let err_pkg_config; + let err_vcpkg; + match pkg_config::Config::new().find("freetype2") { + Ok(freetype) => return freetype.include_paths, + Err(err) => err_pkg_config = err, + } + match vcpkg::find_package("freetype") { + Ok(freetype) => return freetype.include_paths, + Err(err) => err_vcpkg = err, + } + panic!( + "cannot find freetype:\n\ + - pkg-config failed with: {}\n\ + - vcpkg failed with: {}", + err_pkg_config, err_vcpkg + ); +} + // Output define args for compiler fn main() -> std::io::Result<()> { // Root of imgui-sys let manifest_dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")); - #[cfg(feature = "freetype")] - fn find_freetype() -> Vec> { - let err_pkg_config; - let err_vcpkg; - match pkg_config::Config::new().find("freetype2") { - Ok(freetype) => return freetype.include_paths, - Err(err) => err_pkg_config = err, - } - match vcpkg::find_package("freetype") { - Ok(freetype) => return freetype.include_paths, - Err(err) => err_vcpkg = err, - } - panic!( - "cannot find freetype:\n\ - - pkg-config failed with: {}\n\ - - vcpkg failed with: {}", - err_pkg_config, err_vcpkg - ); - } println!( "cargo:THIRD_PARTY={}", manifest_dir.join("third-party").display() From 59b67c14c0d7c8bac8a30dd2575afe91609d235a Mon Sep 17 00:00:00 2001 From: Ruifeng Xie Date: Sat, 25 Dec 2021 16:34:35 +0800 Subject: [PATCH 3/5] feature-gate vcpkg --- .github/workflows/ci.yml | 16 +++++++++++----- imgui-sys/Cargo.toml | 3 ++- imgui-sys/build.rs | 14 ++++---------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90c5d16..8d7a5b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -136,17 +136,23 @@ jobs: - name: docking feature run: cargo test --workspace --all-targets --features docking - - name: freetype feature + - name: freetype feature (non-Windows, pkg-config) if: matrix.os != 'windows-latest' run: cargo test --workspace --all-targets --features freetype - - name: all features + - name: freetype and docking (non-Windows, pkg-config) if: matrix.os != 'windows-latest' - run: cargo test --workspace --all-targets --features docking,freetype + run: cargo test --workspace --all-targets --features freetype,docking - - name: doc tests - run: cargo test --workspace --doc + - name: freetype feature (Windows, vcpkg) + if: matrix.os == 'windows-latest' + run: cargo test --workspace --all-targets --features freetype,use-vcpkg + - name: freetype and docking (Windows, vcpkg) + if: matrix.os == 'windows-latest' + run: cargo test --workspace --all-targets --features freetype,docking,use-vcpkg + + - run: cargo test --workspace --doc # run to check for lint problems - name: build documentation run: cargo doc diff --git a/imgui-sys/Cargo.toml b/imgui-sys/Cargo.toml index 9779e54..be3391b 100644 --- a/imgui-sys/Cargo.toml +++ b/imgui-sys/Cargo.toml @@ -39,4 +39,5 @@ vcpkg = { version="0.2.15", optional=true } default = [] wasm = [] docking = [] -freetype = ["pkg-config", "vcpkg"] +freetype = ["pkg-config"] +use-vcpkg = ["vcpkg"] diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index fe7be78..20a85f3 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -11,22 +11,16 @@ const DEFINES: &[(&str, Option<&str>)] = &[ #[cfg(feature = "freetype")] fn find_freetype() -> Vec> { - let err_pkg_config; - let err_vcpkg; + #[cfg(not(feature = "use-vcpkg"))] match pkg_config::Config::new().find("freetype2") { Ok(freetype) => return freetype.include_paths, - Err(err) => err_pkg_config = err, + Err(err) => panic!("cannot find freetype: {}", err), } + #[cfg(feature = "use-vcpkg")] match vcpkg::find_package("freetype") { Ok(freetype) => return freetype.include_paths, - Err(err) => err_vcpkg = err, + Err(err) => panic!("cannot find freetype: {}", err), } - panic!( - "cannot find freetype:\n\ - - pkg-config failed with: {}\n\ - - vcpkg failed with: {}", - err_pkg_config, err_vcpkg - ); } // Output define args for compiler From e0eb20c84736e2d179501511ab94a97ac310d39b Mon Sep 17 00:00:00 2001 From: Ruifeng Xie Date: Sat, 25 Dec 2021 19:18:05 +0800 Subject: [PATCH 4/5] fix lint error: redundant return statements --- imgui-sys/build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/imgui-sys/build.rs b/imgui-sys/build.rs index 20a85f3..362cb8d 100644 --- a/imgui-sys/build.rs +++ b/imgui-sys/build.rs @@ -13,12 +13,12 @@ const DEFINES: &[(&str, Option<&str>)] = &[ fn find_freetype() -> Vec> { #[cfg(not(feature = "use-vcpkg"))] match pkg_config::Config::new().find("freetype2") { - Ok(freetype) => return freetype.include_paths, + Ok(freetype) => freetype.include_paths, Err(err) => panic!("cannot find freetype: {}", err), } #[cfg(feature = "use-vcpkg")] match vcpkg::find_package("freetype") { - Ok(freetype) => return freetype.include_paths, + Ok(freetype) => freetype.include_paths, Err(err) => panic!("cannot find freetype: {}", err), } } From 7eec3e96d49cbc09f580843413aff49932b0f548 Mon Sep 17 00:00:00 2001 From: Ruifeng Xie Date: Wed, 30 Nov 2022 14:05:36 +0800 Subject: [PATCH 5/5] cimgui: stub ImFontAtlasGetBuilderForStbTruetype if IMGUI_ENABLE_FREETYPE --- imgui-sys/third-party/imgui-docking/cimgui.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/imgui-sys/third-party/imgui-docking/cimgui.cpp b/imgui-sys/third-party/imgui-docking/cimgui.cpp index d9ce562..343b68e 100644 --- a/imgui-sys/third-party/imgui-docking/cimgui.cpp +++ b/imgui-sys/third-party/imgui-docking/cimgui.cpp @@ -4927,7 +4927,11 @@ CIMGUI_API void igDebugRenderViewportThumbnail(ImDrawList* draw_list,ImGuiViewpo } CIMGUI_API const ImFontBuilderIO* igImFontAtlasGetBuilderForStbTruetype() { +#ifdef IMGUI_ENABLE_FREETYPE + return static_cast(0); +#else return ImFontAtlasGetBuilderForStbTruetype(); +#endif } CIMGUI_API void igImFontAtlasBuildInit(ImFontAtlas* atlas) {