diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index 6dcf890dd..6a19d22cb 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -21,19 +21,17 @@ macro(addVersionDefines) set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DPROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DPROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} -DPROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} ") - add_compile_definitions( - $<$:IMHEX_VERSION="${IMHEX_VERSION}"> - $<$:IMHEX_VERSION="${IMHEX_VERSION}-Debug"> - $<$:IMHEX_VERSION="${IMHEX_VERSION}-ReleaseWithDebugInfo"> - $<$:IMHEX_VERSION="${IMHEX_VERSION}-ReleaseMinimumSize"> - ) + if (CMAKE_BUILD_TYPE STREQUAL "Release") + set(IMHEX_VERSION_STRING ${IMHEX_VERSION}) + elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(IMHEX_VERSION_STRING ${IMHEX_VERSION}-Debug) + elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(IMHEX_VERSION_STRING ${IMHEX_VERSION}-RelWithDebInfo) + elseif (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") + set(IMHEX_VERSION_STRING ${IMHEX_VERSION}-MinSizeRel) + endif () - add_compile_definitions( - $<$:RELEASE> - $<$:DEBUG> - $<$:RELEASE> - $<$:RELEASE> - ) + add_compile_definitions(IMHEX_VERSION="${IMHEX_VERSION_STRING}") endmacro() diff --git a/lib/libimhex-rs/proc_macros/src/lib.rs b/lib/libimhex-rs/proc_macros/src/lib.rs index 4fcde027f..2845e725d 100644 --- a/lib/libimhex-rs/proc_macros/src/lib.rs +++ b/lib/libimhex-rs/proc_macros/src/lib.rs @@ -13,17 +13,6 @@ impl Parse for AttrList { } } -fn symbol(name: &str) -> String { - let pkg_name = std::env::var("CARGO_PKG_NAME").unwrap(); - format!( - "_ZN3hex6plugin{}{}8internal{}{}Ev", - pkg_name.len(), - pkg_name, - name.len(), - name, - ) -} - #[proc_macro_attribute] pub fn plugin_setup(attr: TokenStream, item: TokenStream) -> TokenStream { let args = syn::parse_macro_input!(attr as AttrList) @@ -36,11 +25,14 @@ pub fn plugin_setup(attr: TokenStream, item: TokenStream) -> TokenStream { let function = syn::parse_macro_input!(item as syn::ItemFn); - let plugin_name_export = symbol("getPluginName"); - let plugin_author_export = symbol("getPluginAuthor"); - let plugin_desc_export = symbol("getPluginDescription"); - let plugin_init_export = symbol("initializePlugin"); - let plugin_set_imgui_ctxt_export = symbol("setImGuiContext"); + let plugin_name_export = "getPluginName"; + let plugin_author_export = "getPluginAuthor"; + let plugin_desc_export = "getPluginDescription"; + let plugin_version_export = "getCompatibleVersion"; + let plugin_init_export = "initializePlugin"; + let plugin_set_imgui_ctx_export = "setImGuiContext"; + + let imhex_version = std::env::var("IMHEX_VERSION").unwrap(); quote!( #[export_name = #plugin_name_export] @@ -58,11 +50,16 @@ pub fn plugin_setup(attr: TokenStream, item: TokenStream) -> TokenStream { concat!(#description, "\0").as_ptr() } - #[export_name = #plugin_set_imgui_ctxt_export] + #[export_name = #plugin_set_imgui_ctx_export] pub unsafe extern "C" fn set_imgui_context(context: *mut ::hex::imgui::sys::ImGuiContext) { ::hex::imgui::sys::igSetCurrentContext(context); } + #[export_name = #plugin_version_export] + pub unsafe extern "C" fn plugin_version() -> *const u8 { + concat!(#imhex_version, "\0").as_ptr() + } + #[export_name = #plugin_init_export] pub extern "C" #function ) diff --git a/lib/libimhex/include/hex/api/imhex_api.hpp b/lib/libimhex/include/hex/api/imhex_api.hpp index 037ae40a2..d2e242097 100644 --- a/lib/libimhex/include/hex/api/imhex_api.hpp +++ b/lib/libimhex/include/hex/api/imhex_api.hpp @@ -11,7 +11,8 @@ #include #include -#include +using ImGuiID = unsigned int; +struct ImVec2; namespace hex { diff --git a/lib/libimhex/include/hex/api/keybinding.hpp b/lib/libimhex/include/hex/api/keybinding.hpp index 958931660..a53b8e988 100644 --- a/lib/libimhex/include/hex/api/keybinding.hpp +++ b/lib/libimhex/include/hex/api/keybinding.hpp @@ -13,7 +13,8 @@ namespace hex { struct View; - enum class Keys { + enum class Keys + { Space = GLFW_KEY_SPACE, Apostrophe = GLFW_KEY_APOSTROPHE, Comma = GLFW_KEY_COMMA, @@ -141,6 +142,9 @@ namespace hex { class Shortcut { public: + Shortcut() = default; + Shortcut(Keys key) : m_keys({ key }) { } + Shortcut operator+(const Key &other) const { Shortcut result = *this; result.m_keys.insert(other); diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index 58e94a6f6..d5fa6b314 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -6,6 +6,8 @@ #include +#include + namespace hex { namespace ImHexApi::Common { diff --git a/plugins/example_rust/CMakeLists.txt b/plugins/example_rust/CMakeLists.txt index 1ba0f996a..704a40e51 100644 --- a/plugins/example_rust/CMakeLists.txt +++ b/plugins/example_rust/CMakeLists.txt @@ -27,6 +27,7 @@ add_custom_target(${PROJECT_NAME} ALL LIBIMHEX_SOURCE_DIRECTORY=${LIBIMHEX_SOURCE_DIRECTORY} LIBIMHEX_OUTPUT_DIRECTORY=$ CXX_COMPILER=${CMAKE_CXX_COMPILER} + IMHEX_VERSION=${IMHEX_VERSION_STRING} ${CARGO_CMD} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PLUGIN_OUTPUT_PATH} "${CMAKE_CURRENT_BINARY_DIR}/../${PROJECT_NAME}.hexplug" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}