diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-20 19:12:52 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-11-20 19:12:52 +0000 |
commit | feb6455c27b594d3da0dd96fe5c519a49c04c337 (patch) | |
tree | af59f272fdab5c0ecb7b1dc1e2b348ff25f3d2bb | |
parent | e4f591091a1c38d9c4eb6e272d21e7c37e7221aa (diff) |
bring back compile-option checking when loading modules, only this time use a string-based storage and comparison mechanism because it is easier to support on other platforms
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@89461 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | build_tools/make_buildopts_h | 12 | ||||
-rw-r--r-- | include/asterisk/module.h | 5 | ||||
-rw-r--r-- | main/loader.c | 9 |
3 files changed, 25 insertions, 1 deletions
diff --git a/build_tools/make_buildopts_h b/build_tools/make_buildopts_h index ac41a006a..531bb93a6 100755 --- a/build_tools/make_buildopts_h +++ b/build_tools/make_buildopts_h @@ -14,4 +14,16 @@ done if ${GREP} AST_DEVMODE makeopts | ${GREP} -q yes then echo "#define AST_DEVMODE 1" + TMP="${TMP} AST_DEVMODE" fi + +case ${OSARCH} in # actually we should check build_os +*BSD|mingw|darwin*) + BUILDSUM=`echo ${TMP} | md5 | cut -c1-32` + ;; +*) + BUILDSUM=`echo ${TMP} | md5sum | cut -c1-32` + ;; +esac + +echo "#define AST_BUILDOPT_SUM \"${BUILDSUM}\"" diff --git a/include/asterisk/module.h b/include/asterisk/module.h index 7f14df7f9..7ea89fc36 100644 --- a/include/asterisk/module.h +++ b/include/asterisk/module.h @@ -203,6 +203,7 @@ struct ast_module_info { const char *key; unsigned int flags; + const char buildopt_sum[33]; /* The value of AST_BUILDOPT_SUM when this module was compiled */ }; void ast_module_register(const struct ast_module_info *); @@ -229,7 +230,8 @@ void ast_module_unref(struct ast_module *); AST_MODULE, \ desc, \ keystr, \ - flags_to_set \ + flags_to_set, \ + AST_BUILDOPT_SUM, \ }; \ static void __attribute__ ((constructor)) __reg_module(void) \ { \ @@ -259,6 +261,7 @@ const static __attribute__((unused)) struct ast_module_info *ast_module_info; .flags = flags_to_set, \ .description = desc, \ .key = keystr, \ + .buildopt_sum = AST_BUILDOPT_SUM, \ fields \ }; \ static void __attribute__ ((constructor)) __reg_module(void) \ diff --git a/main/loader.c b/main/loader.c index 7df486251..6522f01bf 100644 --- a/main/loader.c +++ b/main/loader.c @@ -76,6 +76,8 @@ static unsigned char expected_key[] = { 0x87, 0x76, 0x79, 0x35, 0x23, 0xea, 0x3a, 0xd3, 0x25, 0x2a, 0xbb, 0x35, 0x87, 0xe4, 0x22, 0x24 }; +static char buildopt_sum[33] = AST_BUILDOPT_SUM; + static unsigned int embedding = 1; /* we always start out by registering embedded modules, since they are here before we dlopen() any */ @@ -613,6 +615,13 @@ static unsigned int inspect_module(const struct ast_module *mod) return 1; } + if (!ast_strlen_zero(mod->info->buildopt_sum) && + strcmp(buildopt_sum, mod->info->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; } |