mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-04 18:58:36 +00:00
C++: Use a static_assert to detect Slint version mismatch
cc #2909 , #223 New message: ``` /home/olivier/slint/build2/examples/gallery/gallery.h:6:73: error: static assertion failed: This file was generated with Slint compiler version 1.1.1, but the Slint library used is 1.1.0. The version numbers must match exactly. 6 | static_assert(1 == SLINT_VERSION_MAJOR && 1 == SLINT_VERSION_MINOR && 1 == SLINT_VERSION_PATCH, "This file was generated with Slint compiler version 1.1.1, but the Slint library used is " SLINT_VERSION_STRING ". The version numbers must match exactly."); /home/olivier/slint/build2/examples/gallery/gallery.h:6:73: note: the comparison reduces to ‘(1 == 0)’ ``` Previous message: ``` /home/olivier/slint/build2/examples/printerdemo/cpp/printerdemo.h:12218:161: error: conversion from ‘VersionCheckHelper<[...],[...],0>’ to non-scalar type ‘VersionCheckHelper<[...],[...],1>’ requested 12218 | [[maybe_unused]] constexpr slint::private_api::VersionCheckHelper<1, 1, 1> THE_SAME_VERSION_MUST_BE_USED_FOR_THE_COMPILER_AND_THE_RUNTIME = slint::private_api::VersionCheckHelper<SLINT_VERSION_MAJOR, SLINT_VERSION_MINOR, SLINT_VERSION_PATCH>(); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/olivier/slint/build2/examples/printerdemo/cpp/printerdemo.h:12218:161: error: could not convert ‘slint::private_api::VersionCheckHelper<1, 1, 0>()’ from ‘VersionCheckHelper<[...],[...],0>’ to ‘VersionCheckHelper<[...],[...],1>’ 12218 | [[maybe_unused]] constexpr slint::private_api::VersionCheckHelper<1, 1, 1> THE_SAME_VERSION_MUST_BE_USED_FOR_THE_COMPILER_AND_THE_RUNTIME = slint::private_api::VersionCheckHelper<SLINT_VERSION_MAJOR, SLINT_VERSION_MINOR, SLINT_VERSION_PATCH>(); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | VersionCheckHelper<[...],[...],0> ```
This commit is contained in:
parent
6c5f6da473
commit
331e5713c2
3 changed files with 23 additions and 19 deletions
|
@ -435,20 +435,23 @@ fn gen_corelib(
|
|||
.with_src(crate_dir.join("graphics/image.rs"))
|
||||
.with_include("slint_string.h")
|
||||
.with_after_include(format!(
|
||||
r"
|
||||
r#"
|
||||
/// This macro expands to the to the numeric value of the major version of Slint you're
|
||||
/// developing against. For example if you're using version 1.5.2, this macro will expand to 1.
|
||||
#define SLINT_VERSION_MAJOR {}
|
||||
#define SLINT_VERSION_MAJOR {x}
|
||||
/// This macro expands to the to the numeric value of the minor version of Slint you're
|
||||
/// developing against. For example if you're using version 1.5.2, this macro will expand to 5.
|
||||
#define SLINT_VERSION_MINOR {}
|
||||
#define SLINT_VERSION_MINOR {y}
|
||||
/// This macro expands to the to the numeric value of the patch version of Slint you're
|
||||
/// developing against. For example if you're using version 1.5.2, this macro will expand to 2.
|
||||
#define SLINT_VERSION_PATCH {}
|
||||
",
|
||||
env!("CARGO_PKG_VERSION_MAJOR"),
|
||||
env!("CARGO_PKG_VERSION_MINOR"),
|
||||
env!("CARGO_PKG_VERSION_PATCH"),
|
||||
#define SLINT_VERSION_PATCH {z}
|
||||
/// This macro expands to the string representation of the version of Slint you're developing against.
|
||||
/// For example if you're using version 1.5.2, this macro will expand to "1.5.2".
|
||||
#define SLINT_VERSION_STRING "{x}.{y}.{z}"
|
||||
"#,
|
||||
x = env!("CARGO_PKG_VERSION_MAJOR"),
|
||||
y = env!("CARGO_PKG_VERSION_MINOR"),
|
||||
z = env!("CARGO_PKG_VERSION_PATCH"),
|
||||
))
|
||||
.generate()
|
||||
.context("Unable to generate bindings for slint_generated_public.h")?
|
||||
|
|
|
@ -1509,8 +1509,9 @@ cbindgen_private::NativeStyleMetrics::~NativeStyleMetrics()
|
|||
#endif // !defined(DOXYGEN)
|
||||
|
||||
namespace private_api {
|
||||
// Was used in Slint <= 1.1.0 to have an error message in case of mismatch
|
||||
template<int Major, int Minor, int Patch>
|
||||
struct VersionCheckHelper
|
||||
struct [[deprecated]] VersionCheckHelper
|
||||
{
|
||||
};
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ mod cpp_ast {
|
|||
#[derive(Default, Debug)]
|
||||
pub struct File {
|
||||
pub includes: Vec<String>,
|
||||
pub after_includes: String,
|
||||
pub declarations: Vec<Declaration>,
|
||||
pub definitions: Vec<Declaration>,
|
||||
}
|
||||
|
@ -87,6 +88,7 @@ mod cpp_ast {
|
|||
for i in &self.includes {
|
||||
writeln!(f, "#include {}", i)?;
|
||||
}
|
||||
write!(f, "{}", self.after_includes)?;
|
||||
for d in &self.declarations {
|
||||
write!(f, "\n{}", d)?;
|
||||
}
|
||||
|
@ -655,16 +657,14 @@ pub fn generate(doc: &Document) -> impl std::fmt::Display {
|
|||
|
||||
generate_public_component(&mut file, &llr);
|
||||
|
||||
file.definitions.push(Declaration::Var(Var{
|
||||
ty: format!(
|
||||
"[[maybe_unused]] constexpr slint::private_api::VersionCheckHelper<{}, {}, {}>",
|
||||
env!("CARGO_PKG_VERSION_MAJOR"),
|
||||
env!("CARGO_PKG_VERSION_MINOR"),
|
||||
env!("CARGO_PKG_VERSION_PATCH")),
|
||||
name: "THE_SAME_VERSION_MUST_BE_USED_FOR_THE_COMPILER_AND_THE_RUNTIME".into(),
|
||||
init: Some("slint::private_api::VersionCheckHelper<SLINT_VERSION_MAJOR, SLINT_VERSION_MINOR, SLINT_VERSION_PATCH>()".into()),
|
||||
..Default::default()
|
||||
}));
|
||||
file.after_includes = format!(
|
||||
"static_assert({x} == SLINT_VERSION_MAJOR && {y} == SLINT_VERSION_MINOR && {z} == SLINT_VERSION_PATCH, \
|
||||
\"This file was generated with Slint compiler version {x}.{y}.{z}, but the Slint library used is \" \
|
||||
SLINT_VERSION_STRING \". The version numbers must match exactly.\");",
|
||||
x = env!("CARGO_PKG_VERSION_MAJOR"),
|
||||
y = env!("CARGO_PKG_VERSION_MINOR"),
|
||||
z = env!("CARGO_PKG_VERSION_PATCH")
|
||||
);
|
||||
|
||||
file
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue