AC_ARG_VAR([BABELTRACE_PLUGINS_DIR], [built-in plugins install directory [LIBDIR/babeltrace2/plugins]])
AS_IF([test "x$BABELTRACE_PLUGINS_DIR" = x], [BABELTRACE_PLUGINS_DIR='${libdir}/babeltrace2/plugins'])
+# BABELTRACE_PLUGIN_PROVIDERS_DIR: Plugin providers directory
+AC_ARG_VAR([BABELTRACE_PLUGIN_PROVIDERS_DIR], [built-in plugin providers install directory [LIBDIR/babeltrace2/plugin-providers]])
+AS_IF([test "x$BABELTRACE_PLUGIN_PROVIDERS_DIR" = x], [BABELTRACE_PLUGIN_PROVIDERS_DIR='${libdir}/babeltrace2/plugin-providers'])
+
# BABELTRACE_MINIMAL_LOG_LEVEL:
AC_ARG_VAR([BABELTRACE_MINIMAL_LOG_LEVEL], [Minimal log level for Babeltrace program, library, and plugins (TRACE, DEBUG (default), or INFO)])
AS_IF([test "x$BABELTRACE_MINIMAL_LOG_LEVEL" = x], [BABELTRACE_MINIMAL_LOG_LEVEL="DEBUG"])
report_libdir="`eval eval echo $libdir`"
report_sysconfdif="`eval eval echo $sysconfdir`"
report_pluginsdir="`eval eval eval echo $BABELTRACE_PLUGINS_DIR`"
+report_pluginprovidersdir="`eval eval eval echo $BABELTRACE_PLUGIN_PROVIDERS_DIR`"
# Print the bindir and libdir this `make install' will install into.
AS_ECHO
PPRINT_PROP_STRING([Binaries], [$report_bindir])
PPRINT_PROP_STRING([Libraries], [$report_libdir])
PPRINT_PROP_STRING([Plugins], [$report_pluginsdir])
+PPRINT_PROP_STRING([Plugin providers], [$report_pluginprovidersdir])
PPRINT_PROP_STRING([Configuration], [$report_sysconfdif])
$(top_builddir)/src/compat/libcompat.la
if ENABLE_BUILT_IN_PYTHON_PLUGIN_SUPPORT
-libbabeltrace2_la_LIBADD += $(top_builddir)/src/python-plugin-provider/libbabeltrace2-python-plugin-provider.la
+libbabeltrace2_la_LIBADD += $(top_builddir)/src/python-plugin-provider/babeltrace2-python-plugin-provider.la
endif
+AM_CPPFLAGS += '-DBABELTRACE_PLUGIN_PROVIDERS_DIR="$(BABELTRACE_PLUGIN_PROVIDERS_DIR)"'
+
noinst_LTLIBRARIES = libplugin.la
# Plug-in system library
#include "plugin-so.h"
#include "lib/func-status.h"
-#define PYTHON_PLUGIN_PROVIDER_FILENAME "libbabeltrace2-python-plugin-provider." G_MODULE_SUFFIX
+#define PYTHON_PLUGIN_PROVIDER_FILENAME "babeltrace2-python-plugin-provider." G_MODULE_SUFFIX
+#define PYTHON_PLUGIN_PROVIDER_DIR BABELTRACE_PLUGIN_PROVIDERS_DIR
#define PYTHON_PLUGIN_PROVIDER_SYM_NAME bt_plugin_python_create_all_from_file
#define PYTHON_PLUGIN_PROVIDER_SYM_NAME_STR G_STRINGIFY(PYTHON_PLUGIN_PROVIDER_SYM_NAME)
static
int init_python_plugin_provider(void) {
int status = BT_FUNC_STATUS_OK;
+ const char *provider_dir_envvar;
+ static const char * const provider_dir_envvar_name = "LIBBABELTRACE2_PLUGIN_PROVIDER_DIR";
+ char *provider_path = NULL;
if (bt_plugin_python_create_all_from_file_sym != NULL) {
goto end;
}
BT_LOGI_STR("Loading Python plugin provider module.");
- python_plugin_provider_module =
- g_module_open(PYTHON_PLUGIN_PROVIDER_FILENAME, 0);
+
+ provider_dir_envvar = getenv(provider_dir_envvar_name);
+ if (provider_dir_envvar) {
+ provider_path = g_build_filename(provider_dir_envvar,
+ PYTHON_PLUGIN_PROVIDER_FILENAME, NULL);
+ BT_LOGI("Using `%s` environment variable to find the Python "
+ "plugin provider: path=\"%s\"", provider_dir_envvar_name,
+ provider_path);
+ } else {
+ provider_path = g_build_filename(PYTHON_PLUGIN_PROVIDER_DIR,
+ PYTHON_PLUGIN_PROVIDER_FILENAME, NULL);
+ BT_LOGI("Using default path (`%s` environment variable is not "
+ "set) to find the Python plugin provider: path=\"%s\"",
+ provider_dir_envvar_name, provider_path);
+ }
+
+ python_plugin_provider_module = g_module_open(provider_path, 0);
if (!python_plugin_provider_module) {
/*
* This is not an error. The whole point of having an
* missing and the Babeltrace library still works.
*/
BT_LOGI("Cannot open `%s`: %s: continuing without Python plugin support.",
- PYTHON_PLUGIN_PROVIDER_FILENAME, g_module_error());
+ provider_path, g_module_error());
goto end;
}
"%s: continuing without Python plugin support: "
"file=\"%s\", symbol=\"%s\"",
g_module_error(),
- PYTHON_PLUGIN_PROVIDER_FILENAME,
+ provider_path,
PYTHON_PLUGIN_PROVIDER_SYM_NAME_STR);
status = BT_FUNC_STATUS_ERROR;
goto end;
python_plugin_provider_module);
end:
+ g_free(provider_path);
+
return status;
}
if ENABLE_PYTHON_PLUGINS
AM_CPPFLAGS += $(PYTHON_INCLUDE)
-lib_LTLIBRARIES = libbabeltrace2-python-plugin-provider.la
+pluginproviderdir = "$(BABELTRACE_PLUGIN_PROVIDERS_DIR)"
+pluginprovider_LTLIBRARIES = babeltrace2-python-plugin-provider.la
-libbabeltrace2_python_plugin_provider_la_SOURCES = \
+babeltrace2_python_plugin_provider_la_SOURCES = \
python-plugin-provider.c \
python-plugin-provider.h
-libbabeltrace2_python_plugin_provider_la_LDFLAGS = \
+babeltrace2_python_plugin_provider_la_LDFLAGS = \
$(LT_NO_UNDEFINED) \
- -version-info $(BABELTRACE_LIBRARY_VERSION) \
+ -avoid-version -module \
$(PYTHON_LDFLAGS)
-libbabeltrace2_python_plugin_provider_la_LIBADD =
+babeltrace2_python_plugin_provider_la_LIBADD =
# Link the Python plugin provider library with libbabeltrace2
# when it's not built-in the babeltrace2 executable.
if !ENABLE_BUILT_IN_PLUGINS
-libbabeltrace2_python_plugin_provider_la_LIBADD += \
+babeltrace2_python_plugin_provider_la_LIBADD += \
$(top_builddir)/src/logging/libbabeltrace2-logging.la \
$(top_builddir)/src/common/libbabeltrace2-common.la \
$(top_builddir)/src/py-common/libbabeltrace2-py-common.la \
BT_TESTS_BABELTRACE_PLUGIN_PATH="${BT_PLUGINS_PATH}/ctf:${BT_PLUGINS_PATH}/utils:${BT_PLUGINS_PATH}/text"
fi
+if [ "x${BT_TESTS_PROVIDER_DIR:-}" = "x" ]; then
+ BT_TESTS_PROVIDER_DIR="${BT_TESTS_BUILDDIR}/../src/python-plugin-provider/.libs"
+fi
+
# Allow overriding the babeltrace2 executables
if [ "x${BT_TESTS_PYTHONPATH:-}" = "x" ]; then
BT_TESTS_PYTHONPATH="${BT_TESTS_BUILDDIR}/../src/bindings/python/bt2/build/build_lib"
local lib_search_var
local lib_search_path
- local python_provider_path="${BT_TESTS_BUILDDIR}/../src/python-plugin-provider/.libs"
local main_lib_path="${BT_TESTS_BUILDDIR}/../src/lib/.libs"
# Set the library search path so the python interpreter can load libbabeltrace2
if [ "$BT_OS_TYPE" = "mingw" ]; then
lib_search_var="PATH"
- lib_search_path="${python_provider_path}:${main_lib_path}:${PATH:-}"
+ lib_search_path="${main_lib_path}:${PATH:-}"
elif [ "$BT_OS_TYPE" = "darwin" ]; then
lib_search_var="DYLD_LIBRARY_PATH"
- lib_search_path="${python_provider_path}:${main_lib_path}:${DYLD_LIBRARY_PATH:-}"
+ lib_search_path="${main_lib_path}:${DYLD_LIBRARY_PATH:-}"
else
lib_search_var="LD_LIBRARY_PATH"
- lib_search_path="${python_provider_path}:${main_lib_path}:${LD_LIBRARY_PATH:-}"
+ lib_search_path="${main_lib_path}:${LD_LIBRARY_PATH:-}"
fi
env \
BABELTRACE_PYTHON_BT2_NO_TRACEBACK=1 \
BABELTRACE_PLUGIN_PATH="${BT_TESTS_BABELTRACE_PLUGIN_PATH}" \
+ LIBBABELTRACE2_PLUGIN_PROVIDER_DIR=${BT_TESTS_PROVIDER_DIR} \
BT_CTF_TRACES_PATH="${BT_CTF_TRACES_PATH}" \
BT_PLUGINS_PATH="${BT_PLUGINS_PATH}" \
PYTHONPATH="${BT_TESTS_PYTHONPATH}:${BT_TESTS_SRCDIR}/utils/python" \