Skip to content

Commit

Permalink
Add a feature to include extensions into the library
Browse files Browse the repository at this point in the history
  • Loading branch information
tagoh committed Oct 12, 2012
1 parent ee70831 commit 90ebe3a
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 12 deletions.
6 changes: 3 additions & 3 deletions extensions/Makefile.am
Expand Up @@ -11,7 +11,6 @@ INCLUDES = \
$(NULL)
LIBS = \
@LDFLAGS@ \
$(top_builddir)/liblangtag/liblangtag.la \
$(LIBXML2_LIBS) \
$(NULL)
EXTRA_DIST = \
Expand Down Expand Up @@ -46,10 +45,11 @@ if ENABLE_MODULE
module_LTLIBRARIES += $(modules)
module_t_cflags =
module_u_cflags =
LIBS += $(top_builddir)/liblangtag/liblangtag.la
else
noinst_LTLIBRARIES += $(modules)
module_t_cflags = -DLT_MODULE_PREFIX=lt_module_ext_t_
module_u_cflags = -DLT_MODULE_PREFIX=lt_module_ext_u_
module_t_cflags = -DLT_MODULE_PREFIX=lt_module_ext_t
module_u_cflags = -DLT_MODULE_PREFIX=lt_module_ext_u
endif
#
liblangtag_ext_ldml_t_la_SOURCES = \
Expand Down
3 changes: 3 additions & 0 deletions extensions/lt-ext-ldml-t.c
Expand Up @@ -44,6 +44,9 @@ typedef struct _lt_ext_ldml_t_data_t {
lt_list_t *fields;
} lt_ext_ldml_t_data_t;

int LT_MODULE_SYMBOL (get_version) (void);
const lt_ext_module_funcs_t *LT_MODULE_SYMBOL (get_funcs) (void);

/*< private >*/
static lt_bool_t
_lt_ext_ldml_t_lookup_type(lt_ext_ldml_t_data_t *data,
Expand Down
7 changes: 5 additions & 2 deletions extensions/lt-ext-ldml-u.c
Expand Up @@ -41,6 +41,9 @@ typedef struct _lt_ext_ldml_u_data_t {
lt_list_t *tags;
} lt_ext_ldml_u_data_t;

int LT_MODULE_SYMBOL (get_version) (void);
const lt_ext_module_funcs_t *LT_MODULE_SYMBOL (get_funcs) (void);

/*< private >*/
static int
_lt_ext_ldml_u_sort_attributes(const lt_pointer_t a,
Expand Down Expand Up @@ -417,13 +420,13 @@ static const lt_ext_module_funcs_t __funcs = {

/*< public >*/
int
module_get_version(void)
LT_MODULE_SYMBOL (get_version) (void)
{
return LT_EXT_MODULE_VERSION;
}

const lt_ext_module_funcs_t *
module_get_funcs(void)
LT_MODULE_SYMBOL (get_funcs) (void)
{
return &__funcs;
}
23 changes: 22 additions & 1 deletion liblangtag/Makefile.am
Expand Up @@ -125,7 +125,13 @@ liblangtag_sources = \
#
stamp_files = \
$(NULL)

included_modules = $(NULL)
if !ENABLE_MODULE
included_modules += \
$(top_builddir)/extensions/liblangtag-ext-ldml-t.la \
$(top_builddir)/extensions/liblangtag-ext-ldml-u.la \
$(NULL)
endif

##
# Local Rules
Expand All @@ -135,6 +141,14 @@ lt-localealias.h: @BUILD_LOCALEALIAS@ Makefile
echo "Failed to generate $@."; \
exit 1; \
fi
if !ENABLE_MODULE
included-modules:
$(AM_V_GEN) cd $(top_builddir)/extensions && $(MAKE) $(AM_MAKEFLAGS)
$(included_modules): included-modules
$(AM_V_GEN) true

.PHONY: included-modules
endif

##
# Target platform
Expand All @@ -160,6 +174,13 @@ liblangtag_la_SOURCES = \
liblangtag_la_CFLAGS = \
-DG_LOG_DOMAIN="\"LangTag\"" \
$(NULL)
liblangtag_la_LIBADD = \
$(LIBS) \
$(included_modules) \
$(NULL)
liblangtag_la_DEPENDENCIES = \
$(included_modules) \
$(NULL)
liblangtag_la_LDFLAGS = \
$(LDFLAGS) \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
Expand Down
27 changes: 24 additions & 3 deletions liblangtag/lt-ext-module.c
Expand Up @@ -70,6 +70,10 @@ static lt_bool_t _lt_ext_eaw_parse_tag (lt_ext_module_data_t
static char *_lt_ext_eaw_get_tag (lt_ext_module_data_t *data);
static lt_bool_t _lt_ext_eaw_validate_tag (lt_ext_module_data_t *data);

#ifndef ENABLE_MODULE
extern const lt_ext_module_funcs_t *LT_MODULE_SYMBOL_ (lt_module_ext_t, get_funcs) (void);
extern const lt_ext_module_funcs_t *LT_MODULE_SYMBOL_ (lt_module_ext_u, get_funcs) (void);
#endif

static lt_ext_module_t *__lt_ext_modules[LT_MAX_EXT_MODULES + 1];
static lt_ext_module_t *__lt_ext_default_handler;
Expand Down Expand Up @@ -198,11 +202,11 @@ _lt_ext_eaw_validate_tag(lt_ext_module_data_t *data)
return TRUE;
}

#if ENABLE_MODULE
static lt_bool_t
lt_ext_module_load(lt_ext_module_t *module)
{
lt_bool_t retval = FALSE;
#if ENABLE_MODULE
lt_string_t *fullname = lt_string_new(NULL);
char *filename = lt_strdup_printf("liblangtag-ext-%s." LT_MODULE_SUFFIX,
module->name);
Expand Down Expand Up @@ -288,10 +292,10 @@ lt_ext_module_load(lt_ext_module_t *module)
lt_string_unref(fullname);
free(filename);
free(path_list);
#endif /* ENABLE_MODULE */

return retval;
}
#endif /* ENABLE_MODULE */

static lt_ext_module_t *
lt_ext_module_new_with_data(const char *name,
Expand Down Expand Up @@ -374,10 +378,11 @@ lt_ext_module_singleton_int_to_char(int singleton)
lt_ext_module_t *
lt_ext_module_new(const char *name)
{
lt_ext_module_t *retval;
lt_ext_module_t *retval = NULL;

lt_return_val_if_fail (name != NULL, NULL);

#ifdef ENABLE_MODULE
retval = lt_mem_alloc_object(sizeof (lt_ext_module_t));

if (retval) {
Expand Down Expand Up @@ -438,6 +443,7 @@ lt_ext_module_new(const char *name)
lt_mem_add_weak_pointer(&retval->parent,
(lt_pointer_t *)&__lt_ext_modules[singleton]);
}
#endif /* ENABLE_MODULE */

return retval;
}
Expand Down Expand Up @@ -617,6 +623,21 @@ lt_ext_modules_load(void)
} while (1);

free(path_list);
#else /* !ENABLE_MODULE */
const lt_ext_module_funcs_t *f;
int c;

#define REGISTER(_ext_) \
f = LT_MODULE_SYMBOL_ (lt_module_ext_##_ext_, get_funcs) (); \
c = lt_ext_module_singleton_char_to_int(f->get_singleton()); \
__lt_ext_modules[c] = lt_ext_module_new_with_data(#_ext_, f); \
lt_mem_add_weak_pointer(&__lt_ext_modules[c]->parent, \
(lt_pointer_t *)&__lt_ext_modules[c]);

REGISTER (t);
REGISTER (u);

#undef REGISTER
#endif /* ENABLE_MODULE */
__lt_ext_default_handler = lt_ext_module_new_with_data("default",
&__default_funcs);
Expand Down
7 changes: 4 additions & 3 deletions liblangtag/lt-ext-module.h
Expand Up @@ -158,11 +158,12 @@ lt_ext_module_t *lt_ext_module_ref (lt_ext_module_t *module);
void lt_ext_module_unref (lt_ext_module_t *module);

#ifdef LT_MODULE_PREFIX
# define LT_MODULE_SYMBOL(__sym__) LT_MODULE_SYMBOL_(LT_MODULE_PREFIX, __sym__)
# define LT_MODULE_SYMBOL_(__prefix__,__sym__) __prefix__##_module_##__sym__
# define LT_MODULE_SYMBOL(__sym__) LT_MODULE_SYMBOL_(LT_MODULE_PREFIX, __sym__)
#else
# define LT_MODULE_SYMBOL(__sym__) module_##__sym__
# define LT_MODULE_SYMBOL(__sym__) module_##__sym__
#endif
#define LT_MODULE_SYMBOL_(__prefix__,__sym__) LT_MODULE_SYMBOL__(__prefix__, __sym__)
#define LT_MODULE_SYMBOL__(__prefix__,__sym__) __prefix__##_module_##__sym__

/**
* module_get_version:
Expand Down

0 comments on commit 90ebe3a

Please sign in to comment.