aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/app_adsiprog.c6
-rw-r--r--apps/app_followme.c1
-rw-r--r--apps/app_getcpeid.c6
-rw-r--r--apps/app_queue.c3
-rw-r--r--apps/app_speech_utils.c6
-rw-r--r--apps/app_stack.c6
-rw-r--r--apps/app_voicemail.c4
-rw-r--r--channels/chan_agent.c2
-rw-r--r--channels/chan_dahdi.c3
-rw-r--r--channels/chan_iax2.c1
-rw-r--r--channels/chan_mgcp.c3
-rw-r--r--channels/chan_sip.c2
-rw-r--r--funcs/func_aes.c6
-rw-r--r--include/asterisk/module.h5
-rw-r--r--main/loader.c20
-rw-r--r--pbx/pbx_dundi.c1
-rw-r--r--pbx/pbx_loopback.c1
-rw-r--r--pbx/pbx_realtime.c1
18 files changed, 65 insertions, 12 deletions
diff --git a/apps/app_adsiprog.c b/apps/app_adsiprog.c
index 8af1473d1..c138f0429 100644
--- a/apps/app_adsiprog.c
+++ b/apps/app_adsiprog.c
@@ -1591,4 +1591,8 @@ static int load_module(void)
return AST_MODULE_LOAD_SUCCESS;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Asterisk ADSI Programming Application");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk ADSI Programming Application",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_adsi",
+ );
diff --git a/apps/app_followme.c b/apps/app_followme.c
index fcab992d3..b17d5252b 100644
--- a/apps/app_followme.c
+++ b/apps/app_followme.c
@@ -51,7 +51,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/cli.h"
#include "asterisk/manager.h"
#include "asterisk/config.h"
-#include "asterisk/monitor.h"
#include "asterisk/utils.h"
#include "asterisk/causes.h"
#include "asterisk/astdb.h"
diff --git a/apps/app_getcpeid.c b/apps/app_getcpeid.c
index 93df1623a..220708156 100644
--- a/apps/app_getcpeid.c
+++ b/apps/app_getcpeid.c
@@ -132,4 +132,8 @@ static int load_module(void)
return ast_register_application_xml(app, cpeid_exec);
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get ADSI CPE ID");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Get ADSI CPE ID",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_adsi",
+ );
diff --git a/apps/app_queue.c b/apps/app_queue.c
index ccdee7fb3..08167b463 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -57,7 +57,7 @@
*/
/*** MODULEINFO
- <depend>res_monitor</depend>
+ <use>res_monitor</use>
***/
#include "asterisk.h"
@@ -8197,5 +8197,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "True Call Queueing",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_DEVSTATE_CONSUMER,
+ .nonoptreq = "res_monitor",
);
diff --git a/apps/app_speech_utils.c b/apps/app_speech_utils.c
index 60af43640..0323f7c47 100644
--- a/apps/app_speech_utils.c
+++ b/apps/app_speech_utils.c
@@ -955,4 +955,8 @@ static int load_module(void)
return res;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialplan Speech Applications");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Dialplan Speech Applications",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_speech",
+ );
diff --git a/apps/app_stack.c b/apps/app_stack.c
index dcf13a00d..29c37a20b 100644
--- a/apps/app_stack.c
+++ b/apps/app_stack.c
@@ -704,4 +704,8 @@ static int load_module(void)
return 0;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialplan subroutines (Gosub, Return, etc)");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Dialplan subroutines (Gosub, Return, etc)",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_agi",
+ );
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 4ff67e371..5b050e99d 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -38,7 +38,8 @@
*/
/*** MODULEINFO
- <depend>res_smdi</depend>
+ <use>res_adsi</use>
+ <use>res_smdi</use>
***/
/*** MAKEOPTS
@@ -13085,4 +13086,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, tdesc,
.load = load_module,
.unload = unload_module,
.reload = reload,
+ .nonoptreq = "res_adsi,res_smdi",
);
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index b8e142d04..37a6688d7 100644
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -32,6 +32,7 @@
*/
/*** MODULEINFO
<depend>chan_local</depend>
+ <depend>res_monitor</depend>
***/
#include "asterisk.h"
@@ -2484,4 +2485,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Agent Proxy Channel",
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .nonoptreq = "res_monitor,chan_local",
);
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 14c43f8fa..25246cd56 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -38,7 +38,7 @@
*/
/*** MODULEINFO
- <depend>res_smdi</depend>
+ <use>res_smdi</use>
<depend>dahdi</depend>
<depend>tonezone</depend>
<use>pri</use>
@@ -17941,4 +17941,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, tdesc,
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .nonoptreq = "res_smdi",
);
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index f038f205e..90ae4eef5 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -14620,4 +14620,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Inter Asterisk eXchan
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .nonoptreq = "res_crypto",
);
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index a787eab72..2f953a9ae 100644
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -30,7 +30,7 @@
*/
/*** MODULEINFO
- <depend>res_pktccops</depend>
+ <use>res_pktccops</use>
***/
#include "asterisk.h"
@@ -4915,4 +4915,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Media Gateway Control
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .nonoptreq = "res_pktccops",
);
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 09531f2ad..432adedfe 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -162,6 +162,7 @@
*/
/*** MODULEINFO
+ <depend>res_crypto</depend>
<depend>chan_local</depend>
***/
@@ -28623,4 +28624,5 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Session Initiation Pr
.unload = unload_module,
.reload = reload,
.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+ .nonoptreq = "res_crypto,chan_local",
);
diff --git a/funcs/func_aes.c b/funcs/func_aes.c
index 21ee244ab..7cc8f4d57 100644
--- a/funcs/func_aes.c
+++ b/funcs/func_aes.c
@@ -163,4 +163,8 @@ static int load_module(void)
return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
}
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "AES dialplan functions");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "AES dialplan functions",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_crypto",
+ );
diff --git a/include/asterisk/module.h b/include/asterisk/module.h
index 24f66fc36..aaa8cbef3 100644
--- a/include/asterisk/module.h
+++ b/include/asterisk/module.h
@@ -242,6 +242,11 @@ struct ast_module_info {
* this value will never be read and the module will be given the lowest possible priority
* on load. */
unsigned char load_pri;
+
+ /*! Modules which should be loaded first, in comma-separated string format.
+ * These are only required for loading, when the optional_api header file
+ * detects that the compiler does not support the optional API featureset. */
+ const char *nonoptreq;
};
void ast_module_register(const struct ast_module_info *);
diff --git a/main/loader.c b/main/loader.c
index 17bb1f821..dea236b05 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -414,6 +414,26 @@ static struct ast_module *load_dynamic_module(const char *resource_in, unsigned
return NULL;
}
+ /* This section is a workaround for a gcc 4.1 bug that has already been
+ * fixed in later versions. Unfortunately, some distributions, such as
+ * RHEL/CentOS 5, distribute gcc 4.1, so we're stuck with having to deal
+ * with this issue. This basically ensures that optional_api modules are
+ * loaded before any module which requires their functionality. */
+#if !defined(HAVE_ATTRIBUTE_weak_import) && !defined(HAVE_ATTRIBUTE_weakref)
+ if (!ast_strlen_zero(mod->info->nonoptreq)) {
+ /* Force any required dependencies to load */
+ char *each, *required_resource = ast_strdupa(mod->info->nonoptreq);
+ while ((each = strsep(&required_resource, ","))) {
+ each = ast_strip(each);
+
+ /* Is it already loaded? */
+ if (!find_resource(each, 0)) {
+ load_dynamic_module(each, global_symbols_only);
+ }
+ }
+ }
+#endif
+
while (!dlclose(lib));
resource_being_loaded = NULL;
diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c
index aaa30da0c..ef482df2c 100644
--- a/pbx/pbx_dundi.c
+++ b/pbx/pbx_dundi.c
@@ -4880,5 +4880,6 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Distributed Universal Nu
.load = load_module,
.unload = unload_module,
.reload = reload,
+ .nonoptreq = "res_crypto",
);
diff --git a/pbx/pbx_loopback.c b/pbx/pbx_loopback.c
index f51ec8204..9ab146398 100644
--- a/pbx/pbx_loopback.c
+++ b/pbx/pbx_loopback.c
@@ -41,7 +41,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/sched.h"
#include "asterisk/io.h"
#include "asterisk/utils.h"
-#include "asterisk/crypto.h"
#include "asterisk/astdb.h"
diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c
index 2697ea0d2..f183c867b 100644
--- a/pbx/pbx_realtime.c
+++ b/pbx/pbx_realtime.c
@@ -46,7 +46,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/sched.h"
#include "asterisk/io.h"
#include "asterisk/utils.h"
-#include "asterisk/crypto.h"
#include "asterisk/astdb.h"
#include "asterisk/app.h"
#include "asterisk/astobj2.h"