diff --git a/src/include/tc_module.h b/src/include/tc_module.h index b3909b7..b45bacc 100644 --- a/src/include/tc_module.h +++ b/src/include/tc_module.h @@ -9,6 +9,8 @@ extern "C" { #endif +// Provide default + // Categories for modules. enum tc_module_category { TC_CATEGORY_ASSIGNABLE, @@ -16,9 +18,10 @@ enum tc_module_category { TC_CATEGORY_INTERFACE }; -// REPLACE THIS WITH SOMETHING MORE ROBUST -// Default path for modules -#define TC_MODULE_PATH "/usr/lib/tuxclocker" +// Default module path in case not defined +#ifndef TC_MODULE_PATH +#define TC_MODULE_PATH "/usr/lib/tuxclocker/modules" +#endif // Env variable name to load modules from in addition #define TC_MODULE_PATH_ENV "TC_MODULE_PATH" diff --git a/src/lib/tc_module.c b/src/lib/tc_module.c index 8af7144..9a94724 100644 --- a/src/lib/tc_module.c +++ b/src/lib/tc_module.c @@ -9,18 +9,22 @@ tc_module_t *tc_module_find(enum tc_module_category category, const char *name) char mod_abs_path[128]; // Find the folder where the module should reside + // TC_MODULE_PATH should be defined as an absolute path switch (category) { case TC_CATEGORY_ASSIGNABLE: - snprintf(mod_abs_path, 128, "%s/%s", "assignable", name); + snprintf(mod_abs_path, 128, "%s/%s/%s", TC_MODULE_PATH, "assignable", name); break; case TC_CATEGORY_INTERFACE: - snprintf(mod_abs_path, 128, "%s/%s", "interface", name); + snprintf(mod_abs_path, 128, "%s/%s/%s", TC_MODULE_PATH, "interface", name); + // snprintf(mod_abs_path, 128, "/usr/lib/tuxclocker/modules/interface/%s", name); + //snprintf(mod_abs_path, 128, "%s", name); break; default: return NULL; } void *handle = tc_dlopen(mod_abs_path); if (handle == NULL) { + printf("%s\n", tc_dlerror()); return NULL; } @@ -30,5 +34,7 @@ tc_module_t *tc_module_find(enum tc_module_category category, const char *name) } tc_module_t **tc_module_find_all_from_category(enum tc_module_category category, uint16_t *count) { + + return NULL; } diff --git a/src/main/meson.build b/src/main/meson.build index 5394176..44a61da 100644 --- a/src/main/meson.build +++ b/src/main/meson.build @@ -1,5 +1,5 @@ - posix_bin = executable('tuxclocker', 'tuxclocker.c', include_directories : incdir, - link_with : libtuxclocker) + link_with : libtuxclocker, + install : true) diff --git a/src/main/tuxclocker.c b/src/main/tuxclocker.c index a214673..ebb6058 100644 --- a/src/main/tuxclocker.c +++ b/src/main/tuxclocker.c @@ -7,7 +7,7 @@ int main(int argc, char **argv) { // Load an interface here - tc_module_t *mod = tc_module_find(TC_CATEGORY_INTERFACE, "/qt/libqt.so"); + tc_module_t *mod = tc_module_find(TC_CATEGORY_INTERFACE, "libqt.so"); if (mod != NULL) { printf("successful load for %s\n", mod->name); diff --git a/src/meson.build b/src/meson.build index 0d4ff6b..45c038e 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,9 +4,9 @@ libtuxclocker_posix_sources = ['lib/posix/module.c'] libtuxclocker_posix_libs = [cc.find_library('dl')] -# Posix library uses runpath for specifying module directory root - -posix_rpath = get_option('libdir' ) + '/tuxclocker/modules' +# Compile time definition for module path +module_path_def_template = '-DTC_MODULE_PATH="@0@/@1@/tuxclocker/modules"' +module_path_def = module_path_def_template.format(get_option('prefix'), get_option('libdir')) libtuxclocker = shared_library('libtuxclocker', ['lib/tc_assignable.c', @@ -14,8 +14,8 @@ libtuxclocker = shared_library('libtuxclocker', libtuxclocker_posix_sources], include_directories : incdir, dependencies : libtuxclocker_posix_libs, - install_rpath : posix_rpath, - link_args : '-Wl,--enable-new-dtags') + c_args : module_path_def, + install : true) subdir('modules') subdir('main') diff --git a/src/modules/interface/qt/meson.build b/src/modules/interface/qt/meson.build index b8d5e75..04180b9 100644 --- a/src/modules/interface/qt/meson.build +++ b/src/modules/interface/qt/meson.build @@ -19,4 +19,6 @@ shared_library('qt', moc_files, include_directories : [incdir, local_qt_incdirs], dependencies : qt5_dep, - link_with : libtuxclocker) + link_with : libtuxclocker, + install_dir : get_option('libdir') / 'tuxclocker' / 'modules' / 'interface', + install : true) diff --git a/src/modules/interface/qt/widgets/AssignableWidget.cpp b/src/modules/interface/qt/widgets/AssignableWidget.cpp index 0aa11d3..eb041c9 100644 --- a/src/modules/interface/qt/widgets/AssignableWidget.cpp +++ b/src/modules/interface/qt/widgets/AssignableWidget.cpp @@ -11,7 +11,7 @@ AssignableWidget::AssignableWidget(QWidget *parent) : QWidget(parent) { m_mainLayout->addWidget(m_splitter); m_assignableTreeView = new QTreeView; - genAssignableTree(m_assignableTreeView); + //genAssignableTree(m_assignableTreeView); m_splitter->addWidget(m_assignableTreeView); m_assignableEditor = new AssignableEditor;