diff options
author | Adam <Adam@anope.org> | 2014-05-30 15:45:57 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-05-30 18:14:55 -0400 |
commit | f20bac996da46556a821c1b0244a202e652fe247 (patch) | |
tree | 438bfc81c3094163bd37f552cac0f5acc335c58a | |
parent | 93bfd4cbe1674c063dca17e7176364f30348eb7c (diff) |
Fix Windows build and update library names to the newer ones.
Also fix crash on Windows when unloading a module because it threw an
exception.
-rw-r--r-- | cmake/Anope.cmake | 8 | ||||
-rw-r--r-- | include/modes.h | 2 | ||||
-rw-r--r-- | modules/CMakeLists.txt | 2 | ||||
-rw-r--r-- | modules/extra/m_ldap.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_mysql.cpp | 7 | ||||
-rw-r--r-- | modules/extra/m_regex_pcre.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_sasl_dh-aes.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_sasl_dh-blowfish.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_sqlite.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_ssl_gnutls.cpp | 1 | ||||
-rw-r--r-- | modules/extra/m_ssl_openssl.cpp | 1 | ||||
-rw-r--r-- | src/modulemanager.cpp | 24 |
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."; |