diff --git a/test/support/Makefile.am b/test/support/Makefile.am index e10bae7969..3d8aab97f9 100644 --- a/test/support/Makefile.am +++ b/test/support/Makefile.am @@ -9,7 +9,7 @@ # University of Stuttgart. All rights reserved. # Copyright (c) 2004-2005 The Regents of the University of California. # All rights reserved. -# Copyright (c) 2008 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -18,7 +18,6 @@ # AM_CPPFLAGS = \ - $(LTDLINCL) \ -DBUILDDIR=\"$(OMPI_TOP_BUILDDIR)\" \ -DSRCDIR=\"$(OMPI_TOP_SRCDIR)\" @@ -30,7 +29,5 @@ AM_CPPFLAGS = \ check_LIBRARIES = libsupport.a libsupport_a_SOURCES = \ - components.h \ - components.c \ support.c \ support.h diff --git a/test/support/components.c b/test/support/components.c deleted file mode 100644 index 71561f4e9e..0000000000 --- a/test/support/components.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana - * University Research and Technology - * Corporation. All rights reserved. - * Copyright (c) 2004-2005 The University of Tennessee and The University - * of Tennessee Research Foundation. All rights - * reserved. - * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, - * University of Stuttgart. All rights reserved. - * Copyright (c) 2004-2005 The Regents of the University of California. - * All rights reserved. - * Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ - -#include "opal_config.h" - -#include -#include - -#include "opal/constants.h" -#include "opal/mca/mca.h" -#include "opal/libltdl/ltdl.h" - -#include "components.h" - - -/* - * Local functions - */ -static bool try_dlopen(const char *dir, const char *fw, const char *comp, - test_component_handle_t *comp_handle, - test_component_sym_t *comp_symbol); -static char *dir_concat(const char *a, const char *b); - - -int test_component_open(const char *framework, const char *component, - test_component_handle_t *comp_handle, - mca_base_component_t **mca) -{ - test_component_sym_t sym; - - if (NULL == framework || NULL == component || NULL == comp_handle || - NULL == mca) { - return OPAL_ERR_BAD_PARAM; - } - comp_handle->tch_handle = NULL; - sym.tcs_variable = NULL; - - /* It's ok to call lt_dlinit() multiple times; it ref counts for - lt_dlexit() */ - - lt_dlinit(); - - /* Try to open */ - - if (try_dlopen(".", framework, component, comp_handle, &sym) || - try_dlopen(dir_concat(BUILDDIR, "src/mca"), framework, - component, comp_handle, &sym) || - try_dlopen(dir_concat(SRCDIR, "src/mca"), framework, - component, comp_handle, &sym)) { - - /* Ok, dlopen'ed it. Now call the component's open - function. */ - - *mca = (mca_base_component_t*) sym.tcs_variable; - if (NULL == (*mca)->mca_open_component || - (NULL != (*mca)->mca_open_component && - OPAL_SUCCESS == (*mca)->mca_open_component())) { - return OPAL_SUCCESS; - } - - /* Badness occurred, so dlclose the component */ - - test_component_close(comp_handle); - } - - /* Didn't find it / unable to open it */ - - return OPAL_ERROR; -} - - -int test_component_find_symbol(const char *name, - test_component_handle_t *handle, - test_component_sym_t *sym) -{ - /* Use a union to avoid pesky compilers that complain [rightfully, - unfortunately] about converting (void*) to a function pointer - -- need to wait until the ltdl library has a lt_dlsymfunc() - function for a real fix... */ - - union { - void *vvalue; - void (*fvalue)(void); - } value; - - if (NULL == handle || NULL == sym) { - return OPAL_ERR_BAD_PARAM; - } - - value.vvalue = lt_dlsym(handle->tch_handle, name); - sym->tcs_function = value.fvalue; - return OPAL_SUCCESS; -} - - -int test_component_close(test_component_handle_t *handle) -{ - /* Note that lt_dlinit() refcounts, so ld_dlexit() only actually - shuts down if we've called it as many times as we've called - lt_dlinit() */ - - if (NULL != handle && NULL != handle->tch_handle) { - lt_dlclose(handle->tch_handle); - lt_dlexit(); - handle->tch_handle = NULL; - } - - return OPAL_SUCCESS; -} - - -static bool try_dlopen(const char *dir, const char *fw, const char *comp, - test_component_handle_t *comp_handle, - test_component_sym_t *comp_symbol) -{ - char component_name[BUFSIZ]; - char file_name[BUFSIZ]; - char dirsep = '/'; - - component_name[BUFSIZ - 1] = '\0'; - snprintf(component_name, BUFSIZ - 1, "mca_%s_%s_component", fw, comp); - if ('\0' != component_name[BUFSIZ - 1]) { - return false; - } - - /* First, look for the component symbol statically */ - - comp_handle->tch_handle = lt_dlopen(NULL); - if (NULL != comp_handle->tch_handle) { - comp_symbol->tcs_variable = - lt_dlsym(comp_handle->tch_handle, component_name); - if (NULL != comp_symbol->tcs_variable) { - return true; - } - lt_dlclose(comp_handle->tch_handle); - } - - /* Not in self -- look for a real component */ - - file_name[BUFSIZ - 1] = '\0'; - snprintf(file_name, BUFSIZ - 1, "%s%c%s%c%s%cmca_%s_%s", dir, dirsep, - fw, dirsep, comp, dirsep, fw, comp); - if ('\0' != file_name[BUFSIZ - 1]) { - return false; - } - comp_handle->tch_handle = lt_dlopenext(file_name); - if (NULL != comp_handle->tch_handle) { - comp_symbol->tcs_variable = - lt_dlsym(comp_handle->tch_handle, component_name); - if (NULL != comp_symbol->tcs_variable) { - return true; - } - lt_dlclose(comp_handle->tch_handle); - } - - /* Nope, didn't find it */ - - return false; -} - - -static char *dir_concat(const char *a, const char *b) -{ - static char name[BUFSIZ]; - name[0] = '\0'; - if (NULL != a) { - strcat(name, a); - strcat(name, "/"); - } - if (NULL != b) { - strcat(name, b); - } - - return name; -} diff --git a/test/support/components.h b/test/support/components.h deleted file mode 100644 index 6db1f0d7c1..0000000000 --- a/test/support/components.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana - * University Research and Technology - * Corporation. All rights reserved. - * Copyright (c) 2004-2005 The University of Tennessee and The University - * of Tennessee Research Foundation. All rights - * reserved. - * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, - * University of Stuttgart. All rights reserved. - * Copyright (c) 2004-2005 The Regents of the University of California. - * All rights reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ -/** @file */ - -#ifndef OMPI_SUPPORT_COMPONENTS_H -#define OMPI_SUPPORT_COMPONENTS_H - -#include "opal/libltdl/ltdl.h" -#include "opal/mca/mca.h" - -BEGIN_C_DECLS - - /** - * Generic function pointer, suitable for casting - */ - typedef void (*test_component_fn_t)(void); - - /** - * Type to hold both a variable and a function pointer, especially - * for platforms where they are different sizes. - */ - union test_component_sym_t { - void *tcs_variable; - test_component_fn_t tcs_function; - }; - /** Convenience typedef */ - typedef union test_component_sym_t test_component_sym_t; - - /** - * Type for masking the real/underlying type of opened components - */ - struct test_component_handle_t { - lt_dlhandle tch_handle; - }; - /** - * Convenience typedef - */ - typedef struct test_component_handle_t test_component_handle_t; - - /** - * Open a specific MCA component in the build tree - * - * void *test_component_open() - */ - int test_component_open(const char *framework, const char *component, - test_component_handle_t *comp_handle, - mca_base_component_t **mca); - - /** - * Find a symbol in an MCA component - * - * ompi_test_component_sym_t test_component_find_symbol() - */ - int test_component_find_symbol(const char *name, - test_component_handle_t *handle, - test_component_sym_t *sym); - - /** - * Close a specific MCA component - * - * int test_component_close() - */ - int test_component_close(test_component_handle_t *handle); - - -END_C_DECLS - -#endif /* OMPI_SUPPORT_COMPONENTS_H */