Skip to content

Commit f546de2

Browse files
radaretrufae
authored andcommitted
Iterate over the external plugin system once again ##core
1 parent 424639d commit f546de2

5 files changed

Lines changed: 35 additions & 10 deletions

File tree

libr/core/core.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,6 +2691,7 @@ R_API bool r_core_init(RCore *core) {
26912691
core->autocomplete = R_NEW0 (RCoreAutocomplete);
26922692
r_core_plugins_init (core->rcmd);
26932693
r_core_config_init (core);
2694+
r_core_plugins_load (core->rcmd);
26942695
core->print->reg = core->anal->reg;
26952696
core->print->get_register = r_reg_get;
26962697
core->print->get_register_value = r_reg_get_value;

libr/core/cplugin.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,15 @@ R_API bool r_core_plugin_remove(RCmd *cmd, RCorePlugin *plugin) {
6767

6868
R_IPI void r_core_plugins_init(RCmd *cmd) {
6969
R_RETURN_IF_FAIL (cmd);
70-
r_libstore_new (&cmd->libstore, cmd, cmd_static_plugins, (RListFree)core_plugin_session_free, NULL, (RLibPluginAddCb)r_core_plugin_add, (RLibPluginAddCb)r_core_plugin_remove);
70+
r_libstore_new (&cmd->libstore, cmd, NULL, (RListFree)core_plugin_session_free, NULL, (RLibPluginAddCb)r_core_plugin_add, (RLibPluginAddCb)r_core_plugin_remove);
71+
if (cmd->libstore) {
72+
cmd->libstore->static_plugins = cmd_static_plugins;
73+
}
74+
}
75+
76+
R_IPI void r_core_plugins_load(RCmd *cmd) {
77+
R_RETURN_IF_FAIL (cmd && cmd->libstore);
78+
r_libstore_load (cmd->libstore);
7179
}
7280

7381
R_API bool r_core_plugin_check(RCmd *cmd, const char *a0) {

libr/include/r_core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,7 @@ extern RCorePlugin r_core_plugin_writedwarf;
10651065
extern RCorePlugin r_core_plugin_agD;
10661066

10671067
R_IPI void r_core_plugins_init(RCmd *cmd);
1068+
R_IPI void r_core_plugins_load(RCmd *cmd);
10681069
R_IPI void r_core_plugins_fini(RCmd *cmd);
10691070
R_API bool r_core_plugin_add(RCmd *cmd, RCorePlugin *plugin);
10701071
R_API bool r_core_plugin_remove(RCmd *cmd, RCorePlugin *plugin);

libr/xps/meson.build

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
fs = import('fs')
22

3-
#if not fs.is_file('r2plugins.h')
4-
deps_h = configure_file(
5-
input: 'r2plugins.h.in',
6-
output: 'r2plugins.h',
7-
configuration: configuration_data()
8-
)
9-
#endif
10-
3+
# External plugins drop their sources under libr/xps/p/<name>/r2plugin/, and
4+
# p/meson.build does `subdir('<name>/r2plugin')` for each entry. Plugin meson
5+
# files should append to core_plugins (plus r_core_additional_sources /
6+
# r_core_additional_inc) so the static plugin gets linked into libr_core.
117
if fs.is_file('p/meson.build')
128
subdir('p')
139
endif
10+
11+
# Auto-generate r2plugins.h from the final plugin lists. Runs after all
12+
# subdir() calls have had a chance to register plugins so that external
13+
# plugins don't need to manually append extern declarations.
14+
r2plugins_decls = '// Auto-generated by libr/xps/meson.build. Do not edit.\n'
15+
16+
_builtin_core = ['prj', 'writedwarf', 'agD', 'java']
17+
18+
foreach p : core_plugins
19+
if not _builtin_core.contains(p)
20+
r2plugins_decls += '#ifdef R2_CORE_H\nextern RCorePlugin r_core_plugin_' + p + ';\n#endif\n'
21+
endif
22+
endforeach
23+
24+
configure_file(
25+
output: 'r2plugins.h',
26+
input: 'r2plugins.h.in',
27+
configuration: {'R2_XPS_EXTERN_DECLS': r2plugins_decls},
28+
)

libr/xps/r2plugins.h.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
// nothing or yesthing
1+
@R2_XPS_EXTERN_DECLS@

0 commit comments

Comments
 (0)