lcpu: Load lua_shared (I'll probably be replacing ILuaBase usage with this)
This commit is contained in:
parent
9c5415c061
commit
b6d41d33fa
|
@ -5,7 +5,10 @@ add_library(lcpu_native SHARED
|
||||||
src/LcpuGlobals.cpp
|
src/LcpuGlobals.cpp
|
||||||
src/LuaCpu.cpp
|
src/LuaCpu.cpp
|
||||||
src/LuaDevice.cpp
|
src/LuaDevice.cpp
|
||||||
|
|
||||||
|
# Support code
|
||||||
src/SourceSink.cpp
|
src/SourceSink.cpp
|
||||||
|
src/LuaShared.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "LuaShared.hpp"
|
||||||
|
|
||||||
|
#include <lucore/Assert.hpp>
|
||||||
|
#include <lucore/Library.hpp>
|
||||||
|
|
||||||
|
namespace lcpu::lua {
|
||||||
|
|
||||||
|
// A global pointer to the loaded instance of the lua_shared library.
|
||||||
|
lucore::Library* luaSharedLibrary = nullptr;
|
||||||
|
|
||||||
|
#define LUA_SHARED_FUNC(Retty, name, ...) Retty (*name)(__VA_ARGS__) = nullptr;
|
||||||
|
#include "LuaSharedFunctions.inc"
|
||||||
|
#undef LUA_SHARED_FUNC
|
||||||
|
|
||||||
|
void LoadLuaShared() {
|
||||||
|
// Open the lua_shared library
|
||||||
|
luaSharedLibrary = lucore::Library::OpenExisting("lua_shared");
|
||||||
|
LUCORE_CHECK(luaSharedLibrary != nullptr, "Could not open lua_shared library for some reason.");
|
||||||
|
|
||||||
|
// Load the functions from lua_shared
|
||||||
|
// This is helped quite a bit by using an x-macro
|
||||||
|
#define LUA_SHARED_FUNC(Retty, name, ...) \
|
||||||
|
name = luaSharedLibrary->Symbol<decltype(name)>(#name); \
|
||||||
|
LUCORE_CHECK(name != nullptr, "Could not load lua_shared function \"{}\"", #name);
|
||||||
|
#include "LuaSharedFunctions.inc"
|
||||||
|
#undef LUA_SHARED_FUNC
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnloadLuaShared() {
|
||||||
|
LUCORE_ASSERT(luaSharedLibrary != nullptr, "UnloadLuaShared() should only be called if LoadLuaShared() was called");
|
||||||
|
delete luaSharedLibrary;
|
||||||
|
|
||||||
|
#define LUA_SHARED_FUNC(Retty, name, ...) name = nullptr;
|
||||||
|
#include "LuaSharedFunctions.inc"
|
||||||
|
#undef LUA_SHARED_FUNC
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace lcpu::lua
|
|
@ -0,0 +1,56 @@
|
||||||
|
//! Loader/types for lua_shared API. I plan to use this instead of the Garry's Mod
|
||||||
|
//! ILuaBase interface; they are interchangable (and in fact, less friction to use!)
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <GarrysMod/Lua/Interface.h>
|
||||||
|
|
||||||
|
namespace lcpu::lua {
|
||||||
|
|
||||||
|
#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */
|
||||||
|
|
||||||
|
struct lua_Debug {
|
||||||
|
int event;
|
||||||
|
const char* name; /* (n) */
|
||||||
|
const char* namewhat; /* (n) `global', `local', `field', `method' */
|
||||||
|
const char* what; /* (S) `Lua', `C', `main', `tail' */
|
||||||
|
const char* source; /* (S) */
|
||||||
|
int currentline; /* (l) */
|
||||||
|
int nups; /* (u) number of upvalues */
|
||||||
|
int linedefined; /* (S) */
|
||||||
|
int lastlinedefined; /* (S) */
|
||||||
|
char short_src[LUA_IDSIZE]; /* (S) */
|
||||||
|
/* private part */
|
||||||
|
int i_ci; /* active function */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef int (*lua_CFunction)(lua_State* L);
|
||||||
|
typedef void* (*lua_Alloc)(void* ud, void* ptr, size_t osize, size_t nsize);
|
||||||
|
typedef const char* (*lua_Reader)(lua_State* L, void* ud, size_t* sz);
|
||||||
|
typedef int (*lua_Writer)(lua_State* L, const void* p, size_t sz, void* ud);
|
||||||
|
//typedef struct lua_Debug lua_Debug; /* activation record */
|
||||||
|
typedef void (*lua_Hook)(lua_State* L, lua_Debug* ar);
|
||||||
|
|
||||||
|
typedef struct luaL_Buffer {
|
||||||
|
char* p; /* current position in buffer */
|
||||||
|
int lvl; /* number of strings in the stack (level) */
|
||||||
|
lua_State* L;
|
||||||
|
char buffer[8192];
|
||||||
|
} luaL_Buffer;
|
||||||
|
|
||||||
|
typedef struct luaL_Reg {
|
||||||
|
const char* name;
|
||||||
|
lua_CFunction func;
|
||||||
|
} luaL_Reg;
|
||||||
|
|
||||||
|
#define LUA_SHARED_FUNC(Retty, name, ...) extern Retty (*name)(__VA_ARGS__);
|
||||||
|
#include "LuaSharedFunctions.inc"
|
||||||
|
#undef LUA_SHARED_FUNC
|
||||||
|
|
||||||
|
/// Load lua_shared
|
||||||
|
void LoadLuaShared();
|
||||||
|
|
||||||
|
/// .. and unload it.
|
||||||
|
void UnloadLuaShared();
|
||||||
|
|
||||||
|
} // namespace lcpu::lua
|
|
@ -0,0 +1,128 @@
|
||||||
|
//! This is an X-Macro file of all the interesting functions in lua_shared
|
||||||
|
LUA_SHARED_FUNC(lua_State*, luaL_newstate, void);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_loadstring, lua_State *L, const char* code);
|
||||||
|
LUA_SHARED_FUNC(lua_CFunction, lua_atpanic, lua_State *L, lua_CFunction panicf);
|
||||||
|
LUA_SHARED_FUNC(void, lua_call, lua_State *L, int nargs, int nresults);
|
||||||
|
LUA_SHARED_FUNC(int, lua_checkstack, lua_State *L, int size);
|
||||||
|
LUA_SHARED_FUNC(void, lua_close, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(void, lua_concat, lua_State*L,int n);
|
||||||
|
LUA_SHARED_FUNC(int, lua_cpcall, lua_State *L, lua_CFunction func, void *ud);
|
||||||
|
LUA_SHARED_FUNC(void, lua_createtable, lua_State *L, int narray, int nrec);
|
||||||
|
LUA_SHARED_FUNC(int, lua_dump, lua_State *L, lua_Writer writer, void *data);
|
||||||
|
LUA_SHARED_FUNC(int, lua_equal, lua_State *L, int idx1, int idx2);
|
||||||
|
LUA_SHARED_FUNC(int, lua_error, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, lua_gc, lua_State *L, int what, int data);
|
||||||
|
LUA_SHARED_FUNC(lua_Alloc, lua_getallocf, lua_State *L, void **ud);
|
||||||
|
LUA_SHARED_FUNC(void, lua_getfenv, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_getfield, lua_State *L, int idx, const char *k);
|
||||||
|
LUA_SHARED_FUNC(lua_Hook, lua_gethook, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, lua_gethookcount, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, lua_gethookmask, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, lua_getinfo, lua_State *L, const char *what, lua_Debug *ar);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_getlocal, lua_State *L, const lua_Debug *ar, int n);
|
||||||
|
LUA_SHARED_FUNC(int, lua_getmetatable, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_getstack, lua_State *L, int level, lua_Debug *ar);
|
||||||
|
LUA_SHARED_FUNC(void, lua_gettable, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_gettop, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_getupvalue, lua_State *L, int idx, int n);
|
||||||
|
LUA_SHARED_FUNC(void, lua_insert, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_iscfunction, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_isnumber, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_isstring, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_isuserdata, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_lessthan, lua_State *L, int idx1, int idx2);
|
||||||
|
LUA_SHARED_FUNC(int, lua_load, lua_State *L, lua_Reader reader, void *dt, const char *chunkname);
|
||||||
|
LUA_SHARED_FUNC(int, lua_loadx, lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode);
|
||||||
|
LUA_SHARED_FUNC(lua_State*, lua_newstate, lua_Alloc f, void *ud);
|
||||||
|
LUA_SHARED_FUNC(lua_State*, lua_newthread, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(void*, lua_newuserdata, lua_State *L, size_t size);
|
||||||
|
LUA_SHARED_FUNC(int, lua_next, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(size_t, lua_objlen, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_pcall, lua_State *L, int nargs, int nresults, int errfunc);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushboolean, lua_State *L, int b);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushcclosure, lua_State *L, lua_CFunction f, int n);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_pushfstring, lua_State *L, const char *fmt, ...);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushlightuserdata, lua_State *L, void *p);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushlstring, lua_State *L, const char *str, size_t len);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushnil, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushnumber, lua_State *L, double n);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushstring, lua_State *L, const char *str);
|
||||||
|
LUA_SHARED_FUNC(int, lua_pushthread, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(void, lua_pushvalue, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_pushvfstring, lua_State *L, const char *fmt, char* argp);
|
||||||
|
LUA_SHARED_FUNC(int, lua_rawequal, lua_State *L, int idx1, int idx2);
|
||||||
|
LUA_SHARED_FUNC(void, lua_rawget, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_rawgeti, lua_State *L, int idx, int n);
|
||||||
|
LUA_SHARED_FUNC(void, lua_rawset, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_rawseti, lua_State *L, int idx, int n);
|
||||||
|
LUA_SHARED_FUNC(void, lua_remove, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_replace, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_setallocf, lua_State *L, lua_Alloc f, void *ud);
|
||||||
|
LUA_SHARED_FUNC(int, lua_setfenv, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_setfield, lua_State *L, int idx, const char *k);
|
||||||
|
LUA_SHARED_FUNC(int, lua_sethook, lua_State *L, lua_Hook func, int mask, int count);
|
||||||
|
LUA_SHARED_FUNC(const char *, lua_setlocal, lua_State *L, const lua_Debug *ar, int n);
|
||||||
|
LUA_SHARED_FUNC(int, lua_setmetatable, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_settable, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void, lua_settop, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_setupvalue, lua_State *L, int idx, int n);
|
||||||
|
LUA_SHARED_FUNC(int, lua_status, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, lua_toboolean, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(lua_CFunction, lua_tocfunction, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_tolstring, lua_State *L, int idx, size_t *len);
|
||||||
|
LUA_SHARED_FUNC(double, lua_tonumber, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const void*, lua_topointer, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(lua_State*, lua_tothread, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(void*, lua_touserdata, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, lua_type, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const char*, lua_typename, lua_State *L, int t);
|
||||||
|
LUA_SHARED_FUNC(void*, lua_upvalueid, lua_State *L, int idx, int n);
|
||||||
|
LUA_SHARED_FUNC(void, lua_upvaluejoin, lua_State *L, int idx1, int n1, int idx2, int n2);
|
||||||
|
LUA_SHARED_FUNC(void, lua_xmove, lua_State *from, lua_State *to, int n);
|
||||||
|
LUA_SHARED_FUNC(int, lua_yield, lua_State *L, int nresults);
|
||||||
|
LUA_SHARED_FUNC(int, luaJIT_setmode, lua_State *L, int idx, int mode);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_addlstring, luaL_Buffer *B, const char *s, size_t l);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_addstring, luaL_Buffer *B, const char *s);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_addvalue, luaL_Buffer *B);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_argerror, lua_State *L, int narg, const char *msg);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_buffinit, lua_State *L, luaL_Buffer *B);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_callmeta, lua_State *L, int idx, const char *field);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_checkany, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(const char*, luaL_checklstring, lua_State *L, int idx, size_t *len);
|
||||||
|
LUA_SHARED_FUNC(double, luaL_checknumber, lua_State *L, int idx);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_checkoption, lua_State *L, int idx, const char *def, const char *const lst[]);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_checkstack, lua_State *L, int size, const char *msg);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_checktype, lua_State *L, int idx, int tt);
|
||||||
|
LUA_SHARED_FUNC(void*, luaL_checkudata, lua_State *L, int idx, const char *tname);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_error, lua_State *L, const char *fmt, ...);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_execresult, lua_State *L, int stat);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_fileresult, lua_State *L, int stat, const char *fname);
|
||||||
|
LUA_SHARED_FUNC(const char*, luaL_findtable, lua_State *L, int idx, const char *fname, int szhint);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_getmetafield, lua_State *L, int idx, const char *field);
|
||||||
|
LUA_SHARED_FUNC(const char*, luaL_gsub, lua_State *L, const char *s, const char *p, const char *r);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_loadbuffer, lua_State *L, const char *buff, size_t sz, const char *name);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_loadbufferx, lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_loadfile, lua_State *L, const char *filename);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_loadfilex, lua_State *L, const char *filename, const char *mode);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_newmetatable, lua_State *L, const char *tname);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_openlib, lua_State *L, const char *libname, const luaL_Reg *l, int nup);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_openlibs, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(const char*, luaL_optlstring, lua_State *L, int idx, const char *def, size_t *len);
|
||||||
|
LUA_SHARED_FUNC(double, luaL_optnumber, lua_State *L, int idx, double def);
|
||||||
|
LUA_SHARED_FUNC(char*, luaL_prepbuffer, luaL_Buffer *B);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_pushresult, luaL_Buffer *B);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_ref, lua_State *L, int t);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_register, lua_State *L, const char *libname, const luaL_Reg *l);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_traceback, lua_State *L, lua_State *L1, const char *msg, int level);
|
||||||
|
LUA_SHARED_FUNC(int, luaL_typerror, lua_State *L, int narg, const char *tname);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_unref, lua_State *L, int t, int ref);
|
||||||
|
LUA_SHARED_FUNC(void, luaL_where, lua_State *L, int lvl);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_base, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_bit, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_debug, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_jit, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_math, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_os, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_package, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_string, lua_State *L);
|
||||||
|
LUA_SHARED_FUNC(int, luaopen_table, lua_State *L);
|
|
@ -11,7 +11,6 @@
|
||||||
#define LCPU_SUPPORT_OLD_GMOD
|
#define LCPU_SUPPORT_OLD_GMOD
|
||||||
|
|
||||||
namespace tier0 {
|
namespace tier0 {
|
||||||
// TODO: For now this'll leak..
|
|
||||||
lucore::Library* library = nullptr;
|
lucore::Library* library = nullptr;
|
||||||
|
|
||||||
using Msg_t = void (*)(const char*, ...);
|
using Msg_t = void (*)(const char*, ...);
|
||||||
|
|
|
@ -6,13 +6,19 @@
|
||||||
|
|
||||||
#include "LcpuGlobals.hpp"
|
#include "LcpuGlobals.hpp"
|
||||||
|
|
||||||
|
#include "LuaShared.hpp"
|
||||||
|
|
||||||
GMOD_MODULE_OPEN() {
|
GMOD_MODULE_OPEN() {
|
||||||
lucore::Logger::The().AttachSink(lcpu::SourceSink::The());
|
lucore::Logger::The().AttachSink(lcpu::SourceSink::The());
|
||||||
lucore::LogInfo("LCPU Native Module! (ModuleVersion {})", LCPU_MODULE_VERSION);
|
lucore::LogInfo("LCPU Native Module! (ModuleVersion {})", LCPU_MODULE_VERSION);
|
||||||
|
|
||||||
|
lcpu::lua::LoadLuaShared();
|
||||||
|
|
||||||
GlobalsBind(LUA);
|
GlobalsBind(LUA);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GMOD_MODULE_CLOSE() {
|
GMOD_MODULE_CLOSE() {
|
||||||
|
lcpu::lua::UnloadLuaShared();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,22 +84,27 @@ namespace lucore {
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void LogInfo(std::string_view format, Args... args) {
|
constexpr void LogDebug(std::string_view format, Args... args) {
|
||||||
|
Logger::The().Debug(format, std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class... Args>
|
||||||
|
constexpr void LogInfo(std::string_view format, Args... args) {
|
||||||
Logger::The().Info(format, std::forward<Args>(args)...);
|
Logger::The().Info(format, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void LogWarning(std::string_view format, Args... args) {
|
constexpr void LogWarning(std::string_view format, Args... args) {
|
||||||
Logger::The().Warning(format, std::forward<Args>(args)...);
|
Logger::The().Warning(format, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void LogError(std::string_view format, Args... args) {
|
constexpr void LogError(std::string_view format, Args... args) {
|
||||||
Logger::The().Error(format, std::forward<Args>(args)...);
|
Logger::The().Error(format, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void LogFatal(std::string_view format, Args... args) {
|
constexpr void LogFatal(std::string_view format, Args... args) {
|
||||||
Logger::The().Fatal(format, std::forward<Args>(args)...);
|
Logger::The().Fatal(format, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,17 @@ namespace lucore {
|
||||||
|
|
||||||
Library* Library::OpenExisting(std::string_view dllname) {
|
Library* Library::OpenExisting(std::string_view dllname) {
|
||||||
auto name = FormatLibraryName(dllname);
|
auto name = FormatLibraryName(dllname);
|
||||||
|
if(!detail::OsLibraryLoaded(name.c_str())) {
|
||||||
|
#ifndef _WIN32
|
||||||
|
// Try without a prefix; some libraries need this.
|
||||||
|
name = std::format("{}.so", dllname);
|
||||||
if(!detail::OsLibraryLoaded(name.c_str()))
|
if(!detail::OsLibraryLoaded(name.c_str()))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
#else
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return new Library(detail::OsOpenLibrary(name.c_str()));
|
return new Library(detail::OsOpenLibrary(name.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue