if ${GREP} AST_DEVMODE makeopts | ${GREP} -q yes
then
echo "#define AST_DEVMODE 1"
+ TMP="${TMP} AST_DEVMODE"
fi
+BUILDSUM=`echo ${TMP} | md5sum`
+echo "#define AST_BUILDOPT_SUM {0x${BUILDSUM:0:8}, 0x${BUILDSUM:8:8}, 0x${BUILDSUM:16:8}, 0x${BUILDSUM:24:8}}"
const char *key;
unsigned int flags;
+ unsigned int buildopt_sum[4]; /* The value of AST_BUILDOPT_SUM when this module was compiled */
};
void ast_module_register(const struct ast_module_info *);
AST_MODULE, \
desc, \
keystr, \
- flags_to_set \
+ flags_to_set, \
+ AST_BUILDOPT_SUM, \
}; \
static void __attribute__ ((constructor)) __reg_module(void) \
{ \
.flags = flags_to_set, \
.description = desc, \
.key = keystr, \
+ .buildopt_sum = AST_BUILDOPT_SUM, \
fields \
}; \
static void __attribute__ ((constructor)) __reg_module(void) \
{ 0x87, 0x76, 0x79, 0x35, 0x23, 0xea, 0x3a, 0xd3,
0x25, 0x2a, 0xbb, 0x35, 0x87, 0xe4, 0x22, 0x24 };
+static unsigned int buildopt_sum[4] = AST_BUILDOPT_SUM;
+
static unsigned int embedding = 1; /* we always start out by registering embedded modules,
since they are here before we dlopen() any
*/
static unsigned int inspect_module(const struct ast_module *mod)
{
+ unsigned int buildopt_empty[4] = { 0, };
+
if (!mod->info->description) {
ast_log(LOG_WARNING, "Module '%s' does not provide a description.\n", mod->resource);
return 1;
return 1;
}
+ if (memcmp(buildopt_empty, mod->info->buildopt_sum, sizeof(buildopt_empty)) &&
+ memcmp(buildopt_sum, mod->info->buildopt_sum, sizeof(buildopt_sum))) {
+ ast_log(LOG_WARNING, "Module '%s' was not compiled with the same compile-time options as this version of Asterisk.\n", mod->resource);
+ ast_log(LOG_WARNING, "Module '%s' will not be initialized as it may cause instability.\n", mod->resource);
+ return 1;
+ }
+
return 0;
}