summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/Anope.cmake8
-rw-r--r--include/modes.h2
-rw-r--r--modules/CMakeLists.txt2
-rw-r--r--modules/extra/m_ldap.cpp1
-rw-r--r--modules/extra/m_mysql.cpp7
-rw-r--r--modules/extra/m_regex_pcre.cpp1
-rw-r--r--modules/extra/m_sasl_dh-aes.cpp1
-rw-r--r--modules/extra/m_sasl_dh-blowfish.cpp1
-rw-r--r--modules/extra/m_sqlite.cpp1
-rw-r--r--modules/extra/m_ssl_gnutls.cpp1
-rw-r--r--modules/extra/m_ssl_openssl.cpp1
-rw-r--r--src/modulemanager.cpp24
12 files changed, 38 insertions, 12 deletions
diff --git a/cmake/Anope.cmake b/cmake/Anope.cmake
index 587e32980..4c71d132c 100644
--- a/cmake/Anope.cmake
+++ b/cmake/Anope.cmake
@@ -432,11 +432,15 @@ macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
# Reset libraries
set(LIBRARIES)
# Check to see if there are any lines matching: /* RequiredLibraries: [something] */
- read_from_file(${SRC} "/\\\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
+ if(WIN32)
+ read_from_file(${SRC} "/\\\\*[ \t]*RequiredWindowsLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
+ else(WIN32)
+ read_from_file(${SRC} "/\\\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
+ endif(WIN32)
# Iterate through those lines
foreach(REQUIRED_LIBRARY ${REQUIRED_LIBRARIES})
# Strip off the /* RequiredLibraries: and */ from the line
- string(REGEX REPLACE "/\\*[ \t]*RequiredLibraries:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
+ string(REGEX REPLACE "/\\*[ \t]*Required.*Libraries:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Iterate through the libraries given
diff --git a/include/modes.h b/include/modes.h
index d1dc4624e..9c5916c0f 100644
--- a/include/modes.h
+++ b/include/modes.h
@@ -205,7 +205,7 @@ class CoreExport ChannelModeStatus : public ChannelMode
* but we still have a representation for it.
*/
template<typename T>
-class ChannelModeVirtual : public T
+class CoreExport ChannelModeVirtual : public T
{
Anope::string base;
ChannelMode *basech;
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index e9afbf45b..26af2745e 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -50,7 +50,7 @@ macro(build_modules SRC)
add_library(${SO} MODULE ${MODULE_SRC})
# Windows requires this because it's weird
if(WIN32)
- set(WIN32_NO_LIBS "/nodefaultlib:\"libcmt.lib\"")
+ set(WIN32_NO_LIBS "/nodefaultlib:\"libcmt.lib\" /OPT:NOREF")
else(WIN32)
set(WIN32_NO_LIBS)
endif(WIN32)
diff --git a/modules/extra/m_ldap.cpp b/modules/extra/m_ldap.cpp
index 7dc6bc038..755187b25 100644
--- a/modules/extra/m_ldap.cpp
+++ b/modules/extra/m_ldap.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: ldap,lber */
+/* RequiredWindowsLibraries: libldap,liblber */
#include "module.h"
#include "modules/ldap.h"
diff --git a/modules/extra/m_mysql.cpp b/modules/extra/m_mysql.cpp
index ceb7af0ef..de8ed4f7d 100644
--- a/modules/extra/m_mysql.cpp
+++ b/modules/extra/m_mysql.cpp
@@ -1,9 +1,14 @@
/* RequiredLibraries: mysqlclient */
+/* RequiredWindowsLibraries: libmysql */
#include "module.h"
#include "modules/sql.h"
#define NO_CLIENT_LONG_LONG
-#include <mysql/mysql.h>
+#ifdef WIN32
+# include <mysql.h>
+#else
+# include <mysql/mysql.h>
+#endif
using namespace SQL;
diff --git a/modules/extra/m_regex_pcre.cpp b/modules/extra/m_regex_pcre.cpp
index b6bf88af1..7cbde87db 100644
--- a/modules/extra/m_regex_pcre.cpp
+++ b/modules/extra/m_regex_pcre.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: pcre */
+/* RequiredWindowsLibraries: libpcre */
#include "module.h"
#include <pcre.h>
diff --git a/modules/extra/m_sasl_dh-aes.cpp b/modules/extra/m_sasl_dh-aes.cpp
index a4fc5ea44..d556e8502 100644
--- a/modules/extra/m_sasl_dh-aes.cpp
+++ b/modules/extra/m_sasl_dh-aes.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: ssl,crypto */
+/* RequiredWindowsLibraries: ssleay32,libeay32 */
#include "module.h"
#include "modules/sasl.h"
diff --git a/modules/extra/m_sasl_dh-blowfish.cpp b/modules/extra/m_sasl_dh-blowfish.cpp
index 1bfd50173..df55f06ea 100644
--- a/modules/extra/m_sasl_dh-blowfish.cpp
+++ b/modules/extra/m_sasl_dh-blowfish.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: ssl,crypto */
+/* RequiredWindowsLibraries: ssleay32,libeay32 */
#include "module.h"
#include "modules/sasl.h"
diff --git a/modules/extra/m_sqlite.cpp b/modules/extra/m_sqlite.cpp
index b306ccfcf..86f21667a 100644
--- a/modules/extra/m_sqlite.cpp
+++ b/modules/extra/m_sqlite.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: sqlite3 */
+/* RequiredWindowsLibraries: sqlite3 */
#include "module.h"
#include "modules/sql.h"
diff --git a/modules/extra/m_ssl_gnutls.cpp b/modules/extra/m_ssl_gnutls.cpp
index 011530280..d391b6f5b 100644
--- a/modules/extra/m_ssl_gnutls.cpp
+++ b/modules/extra/m_ssl_gnutls.cpp
@@ -7,6 +7,7 @@
*/
/* RequiredLibraries: gnutls */
+/* RequiredWindowsLibraries: libgnutls-28 */
#include "module.h"
#include "modules/ssl.h"
diff --git a/modules/extra/m_ssl_openssl.cpp b/modules/extra/m_ssl_openssl.cpp
index a274dc78d..ebf88ad63 100644
--- a/modules/extra/m_ssl_openssl.cpp
+++ b/modules/extra/m_ssl_openssl.cpp
@@ -1,4 +1,5 @@
/* RequiredLibraries: ssl,crypto */
+/* RequiredWindowsLibraries: ssleay32,libeay32 */
#include "module.h"
#include "modules/ssl.h"
diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp
index 2832a562a..71e692dd2 100644
--- a/src/modulemanager.cpp
+++ b/src/modulemanager.cpp
@@ -185,6 +185,7 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
Module *m;
+ ModuleReturn moderr = MOD_ERR_OK;
try
{
m = func(modname, nick);
@@ -192,9 +193,14 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
catch (const ModuleException &ex)
{
Log() << "Error while loading " << modname << ": " << ex.GetReason();
- /*if (dlclose(handle))
- Log() << dlerror();*/
- return MOD_ERR_EXCEPTION;
+ moderr = MOD_ERR_EXCEPTION;
+ }
+
+ if (moderr != MOD_ERR_OK)
+ {
+ if (dlclose(handle))
+ Log() << dlerror();
+ return moderr;
}
m->filename = pbuf;
@@ -236,18 +242,22 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
catch (const ModuleException &ex)
{
Log() << "Module " << modname << " couldn't load:" << ex.GetReason();
- DeleteModule(m);
- return MOD_ERR_EXCEPTION;
+ moderr = MOD_ERR_EXCEPTION;
}
catch (const ConfigException &ex)
{
Log() << "Module " << modname << " couldn't load due to configuration problems: " << ex.GetReason();
- DeleteModule(m);
- return MOD_ERR_EXCEPTION;
+ moderr = MOD_ERR_EXCEPTION;
}
catch (const NotImplementedException &ex)
{
}
+
+ if (moderr != MOD_ERR_OK)
+ {
+ DeleteModule(m);
+ return moderr;
+ }
Log(LOG_DEBUG) << "Module " << modname << " loaded.";