diff --git a/plugins/builtin/CMakeLists.txt b/plugins/builtin/CMakeLists.txt index 59a7573d1..c920116f8 100644 --- a/plugins/builtin/CMakeLists.txt +++ b/plugins/builtin/CMakeLists.txt @@ -2,11 +2,6 @@ cmake_minimum_required(VERSION 3.16) include(ImHexPlugin) -find_file(DEFAULT_MAGIC_FILE_PATH magic.mgc HINTS ${LIBMAGIC_INCLUDE_DIR}/../share/misc) -if (DEFAULT_MAGIC_FILE_PATH) - add_romfs_resource(${DEFAULT_MAGIC_FILE_PATH} always_auto_extract/magic/magic.mgc) -endif () - add_imhex_plugin( NAME builtin @@ -126,6 +121,11 @@ add_imhex_plugin( LLVMDemangle ) +find_file(DEFAULT_MAGIC_FILE_PATH magic.mgc HINTS ${LIBMAGIC_INCLUDE_DIR}/../share/misc) +if (DEFAULT_MAGIC_FILE_PATH) + add_romfs_resource(${DEFAULT_MAGIC_FILE_PATH} always_auto_extract/magic/magic.mgc) +endif () + if (WIN32) target_link_libraries(builtin PRIVATE setupapi) endif () \ No newline at end of file diff --git a/plugins/decompress/source/plugin_decompress.cpp b/plugins/decompress/source/plugin_decompress.cpp index 9f6262800..15cba2ff9 100644 --- a/plugins/decompress/source/plugin_decompress.cpp +++ b/plugins/decompress/source/plugin_decompress.cpp @@ -15,10 +15,10 @@ using namespace hex; using namespace hex::plugin::decompress; IMHEX_PLUGIN_FEATURES() { - { "bzip2 Support", IMHEX_FEATURE_ENABLED(BZIP2) }, - { "zlib Support", IMHEX_FEATURE_ENABLED(ZLIB) }, - { "LZMA Support", IMHEX_FEATURE_ENABLED(LIBLZMA) }, - { "zstd Support", IMHEX_FEATURE_ENABLED(ZSTD) }, + { "bzip2", IMHEX_FEATURE_ENABLED(BZIP2) }, + { "zlib", IMHEX_FEATURE_ENABLED(ZLIB) }, + { "LZMA", IMHEX_FEATURE_ENABLED(LIBLZMA) }, + { "zstd", IMHEX_FEATURE_ENABLED(ZSTD) }, }; IMHEX_PLUGIN_SETUP("Decompressing", "WerWolv", "Support for decompressing data") { diff --git a/plugins/script_loader/CMakeLists.txt b/plugins/script_loader/CMakeLists.txt index 88625d3e7..18213e3aa 100644 --- a/plugins/script_loader/CMakeLists.txt +++ b/plugins/script_loader/CMakeLists.txt @@ -1,24 +1,11 @@ cmake_minimum_required(VERSION 3.16) include(ImHexPlugin) + find_package(CoreClrEmbed) - -add_imhex_plugin( - NAME - script_loader - - SOURCES - source/plugin_script_loader.cpp - - INCLUDES - include - - LIBRARIES - fonts - ui -) - if (CoreClrEmbed_FOUND) + set(IMHEX_DOTNET_SCRIPT_SUPPORT ON) + add_library(nethost SHARED IMPORTED) target_include_directories(nethost INTERFACE "${CoreClrEmbed_INCLUDE_DIRS}") get_filename_component(CoreClrEmbed_FOLDER ${CoreClrEmbed_SHARED_LIBRARIES} DIRECTORY) @@ -29,25 +16,71 @@ if (CoreClrEmbed_FOUND) BUILD_RPATH ${CoreClrEmbed_FOLDER} INSTALL_RPATH ${CoreClrEmbed_FOLDER}) - target_link_directories(script_loader PRIVATE ${CoreClrEmbed_FOLDER}) - target_include_directories(script_loader PRIVATE ${CoreClrEmbed_INCLUDE_DIRS}) - target_compile_definitions(script_loader PRIVATE DOTNET_PLUGINS=1) - target_sources(script_loader PRIVATE - source/loaders/dotnet/dotnet_loader.cpp - - source/script_api/v1/mem.cpp - source/script_api/v1/bookmarks.cpp - source/script_api/v1/ui.cpp - source/script_api/v1/logger.cpp - ) - set(EXTRA_BUNDLE_LIBRARY_PATHS "${CoreClrEmbed_FOLDER}" PARENT_SCOPE) if (IMHEX_BUNDLE_DOTNET) install(FILES ${CoreClrEmbed_SHARED_LIBRARIES} DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif () + endif() +endif() - add_subdirectory(dotnet) +find_package(Python3 COMPONENTS Interpreter Development.Embed) +if (Python3_FOUND) + set(IMHEX_PYTHON_SCRIPT_SUPPORT ON) + + add_romfs_resource(${CMAKE_CURRENT_SOURCE_DIR}/support/python/imhex.py "python/imhex.py") +endif() + + +add_imhex_plugin( + NAME + script_loader + + SOURCES + source/plugin_script_loader.cpp + + source/script_api/v1/mem.cpp + source/script_api/v1/bookmarks.cpp + source/script_api/v1/ui.cpp + source/script_api/v1/logger.cpp + INCLUDES + include + + LIBRARIES + fonts + ui + FEATURES + DOTNET + PYTHON +) + +if (IMHEX_DOTNET_SCRIPT_SUPPORT) + message(STATUS "Enabling .NET Scripting support!") + + target_link_directories(script_loader PRIVATE ${CoreClrEmbed_FOLDER}) + target_include_directories(script_loader PRIVATE ${CoreClrEmbed_INCLUDE_DIRS}) + target_compile_definitions(script_loader PRIVATE IMHEX_DOTNET_SCRIPT_SUPPORT=1) + target_sources(script_loader PRIVATE + source/loaders/dotnet/dotnet_loader.cpp + ) + + add_subdirectory(support/dotnet) add_dependencies(script_loader AssemblyLoader) + enable_plugin_feature(DOTNET) +endif() -endif () \ No newline at end of file +if (IMHEX_PYTHON_SCRIPT_SUPPORT) + message(STATUS "Enabling Python Scripting support!") + + target_compile_definitions(script_loader PRIVATE IMHEX_PYTHON_SCRIPT_SUPPORT=1) + target_sources(script_loader PRIVATE + source/loaders/python/python_loader.cpp + source/loaders/python/library_wrapper.cpp + ) + + get_target_property(PYTHON_LIBRARY Python3::Python IMPORTED_LOCATION) + get_target_property(PYTHON_INCLUDE_DIR Python3::Python INTERFACE_INCLUDE_DIRECTORIES) + + target_include_directories(script_loader PRIVATE ${PYTHON_INCLUDE_DIR}) + target_compile_definitions(script_loader PRIVATE PYTHON_LIBRARY_PATH="${PYTHON_LIBRARY}") + enable_plugin_feature(PYTHON) +endif() \ No newline at end of file diff --git a/plugins/script_loader/include/loaders/dotnet/dotnet_loader.hpp b/plugins/script_loader/include/loaders/dotnet/dotnet_loader.hpp index b3159916b..f0cb3467f 100644 --- a/plugins/script_loader/include/loaders/dotnet/dotnet_loader.hpp +++ b/plugins/script_loader/include/loaders/dotnet/dotnet_loader.hpp @@ -10,7 +10,7 @@ namespace hex::script::loader { class DotNetLoader : public ScriptLoader { public: - DotNetLoader() = default; + DotNetLoader() : ScriptLoader(".NET") {} ~DotNetLoader() override = default; bool initialize() override; diff --git a/plugins/script_loader/include/loaders/loader.hpp b/plugins/script_loader/include/loaders/loader.hpp index 47483096f..ee2ce5f5f 100644 --- a/plugins/script_loader/include/loaders/loader.hpp +++ b/plugins/script_loader/include/loaders/loader.hpp @@ -3,30 +3,44 @@ #include #include #include +#include + +#if defined(OS_WINDOWS) + #include +#else + #include +#endif namespace hex::script::loader { + class ScriptLoader; + struct Script { std::string name; std::function entryPoint; + const ScriptLoader *loader; }; class ScriptLoader { public: - ScriptLoader() = default; + ScriptLoader(std::string typeName) : m_typeName(std::move(typeName)) {} virtual ~ScriptLoader() = default; virtual bool initialize() = 0; virtual bool loadAll() = 0; void addScript(std::string name, std::function entryPoint) { - m_scripts.emplace_back(std::move(name), std::move(entryPoint)); + m_scripts.emplace_back(std::move(name), std::move(entryPoint), this); } const auto& getScripts() const { return m_scripts; } + const std::string& getTypeName() const { + return m_typeName; + } + protected: void clearScripts() { m_scripts.clear(); @@ -34,6 +48,49 @@ namespace hex::script::loader { private: std::vector