Plugin API: Add version query (#3545)

This commit is contained in:
Vaxry 2023-10-14 18:47:43 +01:00 committed by GitHub
parent 424c9a7e70
commit d5a572bd39
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 2 deletions

View file

@ -277,7 +277,7 @@ APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HANDLE hand
const auto FPATH = std::filesystem::canonical(exe); const auto FPATH = std::filesystem::canonical(exe);
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
// Neither KERN_PROC_PATHNAME nor /proc are supported // Neither KERN_PROC_PATHNAME nor /proc are supported
const auto FPATH = std::filesystem::canonical("/usr/local/bin/Hyprland"); const auto FPATH = std::filesystem::canonical("/usr/local/bin/Hyprland");
#else #else
const auto FPATH = std::filesystem::canonical("/proc/self/exe"); const auto FPATH = std::filesystem::canonical("/proc/self/exe");
#endif #endif
@ -338,3 +338,12 @@ APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HANDLE hand
return matches; return matches;
} }
APICALL SVersionInfo HyprlandAPI::getHyprlandVersion(HANDLE handle) {
auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle);
if (!PLUGIN)
return {};
return {GIT_COMMIT_HASH, GIT_TAG, GIT_DIRTY != std::string(""), GIT_BRANCH, GIT_COMMIT_MESSAGE};
}

View file

@ -42,6 +42,14 @@ struct SFunctionMatch {
std::string demangled; std::string demangled;
}; };
struct SVersionInfo {
std::string hash;
std::string tag;
bool dirty = false;
std::string branch;
std::string message;
};
#define APICALL extern "C" #define APICALL extern "C"
#define EXPORT __attribute__((visibility("default"))) #define EXPORT __attribute__((visibility("default")))
#define REQUIRED #define REQUIRED
@ -250,4 +258,20 @@ namespace HyprlandAPI {
Empty means either none found or handle was invalid Empty means either none found or handle was invalid
*/ */
APICALL std::vector<SFunctionMatch> findFunctionsByName(HANDLE handle, const std::string& name); APICALL std::vector<SFunctionMatch> findFunctionsByName(HANDLE handle, const std::string& name);
};
/*
Returns the hyprland version data. It's highly advised to not run plugins compiled
for a different hash.
*/
APICALL SVersionInfo getHyprlandVersion(HANDLE handle);
};
/*
Get the hash this plugin/server was compiled with.
This function will end up in both hyprland and any/all plugins,
and can be found by a simple dlsym()
*/
APICALL inline EXPORT const char* __hyprland_api_get_hash() {
return GIT_COMMIT_HASH;
}