diff options
-rw-r--r-- | include/modules.h | 43 | ||||
-rw-r--r-- | src/Makefile | 5 | ||||
-rw-r--r-- | src/core/Makefile | 23 | ||||
-rw-r--r-- | src/mod_version.c | 42 | ||||
-rw-r--r-- | src/module.cpp | 23 | ||||
-rw-r--r-- | src/modulemanager.cpp | 27 | ||||
-rw-r--r-- | src/modules/Makefile | 23 | ||||
-rw-r--r-- | src/modules/Makefile.sub | 18 | ||||
-rw-r--r-- | src/protocol/Makefile | 21 | ||||
-rw-r--r-- | src/protocol/Makefile.sub | 15 |
10 files changed, 135 insertions, 105 deletions
diff --git a/include/modules.h b/include/modules.h index fc00fafee..45f5bf091 100644 --- a/include/modules.h +++ b/include/modules.h @@ -19,6 +19,7 @@ #include <stdio.h> #include "timers.h" #include "hashcomp.h" +#include "version.h" /* Cross OS compatibility macros */ #ifdef _WIN32 @@ -295,6 +296,42 @@ class CoreExport Command char *service; /* Service we provide this command for */ Command *next; }; + +class CoreExport Version +{ + private: + unsigned Major; + unsigned Minor; + unsigned Build; + + public: + /** Constructor + * @param vMajor The major version numbber + * @param vMinor The minor version numbber + * @param vBuild The build version numbber + */ + Version(unsigned vMajor, unsigned vMinor, unsigned vBuild); + + /** Destructor + */ + virtual ~Version(); + + /** Get the major version of Anope this was built against + * @return The major version + */ + const unsigned GetMajor(); + + /** Get the minor version of Anope this was built against + * @return The minor version + */ + const unsigned GetMinor(); + + /** Get the build version this was built against + * @return The build version + */ + const unsigned GetBuild(); +}; + /** Every module in Anope is actually a class. */ class CoreExport Module @@ -362,6 +399,12 @@ class CoreExport Module */ void SetAuthor(const std::string &author); + /** Get the version of Anope this module was + * compiled against + * @return The version + */ + virtual Version GetVersion() { return Version(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD); } + /** Add output to NickServ Help. * When doing /msg NickServ HELP, this function will be calloed to allow it to send out * a notice witht he code you wish to display diff --git a/src/Makefile b/src/Makefile index a76a13112..a54d194c4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -29,7 +29,7 @@ all: services distclean: spotless distclean_modules: clean_modules spotless -services: $(OBJS) mod_version +services: $(OBJS) $(MAKEBIN) $(CC) $(CFLAGS) $(OBJS) $(ANOPELIBS) $(MLIBS) -o $@ $(LDFLAGS) $(OBJS): Makefile @@ -77,9 +77,6 @@ users.o: users.c $(INCLUDES) vsnprintf.o: vsnprintf.c $(INCLUDES) wildcard.o: wildcard.cpp $(INCLUDES) -mod_version: mod_version.c $(INCLUDES) - $(MAKEBIN) $(CC) $(CDEFS) $(CFLAGS) $(MODULEFLAGS) -I../include/ -c mod_version.c - modules: DUMMY @modules/configure modules @${MAKE} -C modules ${MAKEARGS} all diff --git a/src/core/Makefile b/src/core/Makefile index 7065c03aa..985cf3011 100644 --- a/src/core/Makefile +++ b/src/core/Makefile @@ -8,29 +8,24 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \ 'PROFILE=${PROFILE}' 'SHARED=${SHARED}' \ 'MODULEFLAGS=${MODULEFLAGS}' 'MAKEBIN=${MAKEBIN}' -OBJECTS= $(SRCS:.c=.o) -OBJECTS+= $(SRCS:.cpp=.o) -SO_FILES=$(OBJECTS:.o=.s) +OBJECTS= $(SRCS:.c=.so) +OBJECTS+= $(SRCS:.cpp=.so) CDEFS= -rdynamic -Wall all: modules subs -modules: $(OBJECTS) $(SO_FILES) +modules: $(OBJECTS) install: $(CP) ./*.so $(INSTDIR)/data/modules distclean: spotless -.c.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< +%.so: %.c + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.c -.cpp.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< - -.o.s: - $(MAKEBIN) $(CC) ${SHARED} ../mod_version.o $< -o $*.so ${PROFILE} - @$(TOUCH) $*.s +%.so: %.cpp + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.cpp subs: @for i in $(SUBS); do \ @@ -43,8 +38,8 @@ subs_clean: (cd $$i; $(MAKE) clean); done clean: subs_clean - rm -f *.o *.s *.so *.c~ core + rm -f *.so~ core spotless: subs_clean - rm -f *.o *.s *.so *.c~ core *.so Makefile.inc + rm -f *.so~ core *.so Makefile.inc diff --git a/src/mod_version.c b/src/mod_version.c deleted file mode 100644 index 98c27d259..000000000 --- a/src/mod_version.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "version.h" - -#ifdef _WIN32 -# ifdef MODULE_COMPILE -# define E extern __declspec(dllexport) -# else -# define E extern __declspec(dllimport) -# endif -#else -# define E extern -#endif - -extern "C" -{ - E int getAnopeBuildVersion(); - E int getAnopeMajorVersion(); - E int getAnopeMinorVersion(); - E int getAnopePatchVersion(); - - int getAnopeBuildVersion() - { -#if 0 - return VERSION_BUILD; -#endif - return 0; // XXX - } - - int getAnopeMajorVersion() - { - return VERSION_MAJOR; - } - - int getAnopeMinorVersion() - { - return VERSION_MINOR; - } - - int getAnopePatchVersion() - { - return VERSION_PATCH; - } -} diff --git a/src/module.cpp b/src/module.cpp index 463a083c7..888087d85 100644 --- a/src/module.cpp +++ b/src/module.cpp @@ -166,3 +166,26 @@ void Module::SetAuthor(const std::string &nauthor) { this->author = nauthor; } + +Version::Version(unsigned vMajor, unsigned vMinor, unsigned vBuild) : Major(vMajor), Minor(vMinor), Build(vBuild) +{ +} + +Version::~Version() +{ +} + +const unsigned Version::GetMajor() +{ + return Major; +} + +const unsigned Version::GetMinor() +{ + return Minor; +} + +const unsigned Version::GetBuild() +{ + return Build; +}
\ No newline at end of file diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp index 887820ead..efbb6db83 100644 --- a/src/modulemanager.cpp +++ b/src/modulemanager.cpp @@ -216,6 +216,33 @@ int ModuleManager::LoadModule(const std::string &modname, User * u) m->filename = pbuf; m->handle = handle; + Version v = m->GetVersion(); + if (v.GetMajor() < VERSION_MAJOR || (v.GetMajor() == VERSION_MAJOR && v.GetMinor() < VERSION_MINOR)) + { + alog("Module %s is compiled against an older version of Anope %d.%d, this is %d.%d", modname.c_str(), v.GetMajor(), v.GetMinor(), VERSION_MAJOR, VERSION_MINOR); + DeleteModule(m); + return MOD_STOP; + } + else if (v.GetMajor() > VERSION_MAJOR || (v.GetMajor() == VERSION_MAJOR && v.GetMinor() > VERSION_MINOR)) + { + alog("Module %s is compiled against a newer version of Anope %d.%d, this is %d.%d", modname.c_str(), v.GetMajor(), v.GetMinor(), VERSION_MAJOR, VERSION_MINOR); + DeleteModule(m); + return MOD_STOP; + } + else if (v.GetBuild() < VERSION_BUILD) + { + alog("Module %s is compiled against an older revision of Anope %d, this is %d", modname.c_str(), v.GetBuild(), VERSION_BUILD); + } + else if (v.GetBuild() > VERSION_BUILD) + { + alog("Module %s is compiled against a newer revision of Anope %d, this is %d", modname.c_str(), v.GetBuild(), VERSION_BUILD); + } + else if (v.GetBuild() == VERSION_BUILD) + { + alog("Module %s compiled against current version of Anope %d", modname.c_str(), v.GetBuild()); + } + + if (m->type == PROTOCOL && IsOneOfModuleTypeLoaded(PROTOCOL)) { DeleteModule(m); diff --git a/src/modules/Makefile b/src/modules/Makefile index 531e01736..c6653b5f3 100644 --- a/src/modules/Makefile +++ b/src/modules/Makefile @@ -8,14 +8,13 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \ 'PROFILE=${PROFILE}' 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}'\ 'MAKEBIN=${MAKEBIN}' -OBJECTS= $(SRCS:.c=.o) -OBJECTS+= $(SRCS:.cpp=.o) -SO_FILES=$(OBJECTS:.o=.s) +OBJECTS= $(SRCS:.c=.so) +OBJECTS+= $(SRCS:.cpp=.so) CDEFS= -rdynamic -Wall all: modules subs -modules: $(OBJECTS) $(SO_FILES) +modules: $(OBJECTS) install: $(CP) ./*.so $(INSTDIR)/data/modules @@ -25,15 +24,11 @@ install: distclean: spotless -.c.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< +%.so: %.c + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.c -.cpp.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< - -.o.s: - $(MAKEBIN) $(CC) ${SHARED} ../mod_version.o $< -o $*.so ${PROFILE} - @$(TOUCH) $*.s +%.so: %.cpp + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.cpp subs: @for i in $(SUBS); do \ @@ -46,8 +41,8 @@ subs_clean: (cd $$i; $(MAKE) $(MAKEARGS) clean); done clean: subs_clean - rm -f *.o *.s *.so *.c~ core + rm -f *.so~ core spotless: - rm -f *.o *.s *.so *.c~ core *.so Makefile.inc + rm -f *.so~ core *.so Makefile.inc diff --git a/src/modules/Makefile.sub b/src/modules/Makefile.sub index d9011d602..65c83fb89 100644 --- a/src/modules/Makefile.sub +++ b/src/modules/Makefile.sub @@ -5,24 +5,24 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \ 'RUNGROUP=${RUNGROUP}' \ 'PROFILE=${PROFILE}' 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' -OBJECTS= $(SRCS:.c=.o) -SO_FILES=$(OBJECTS:.o=.s) +OBJECTS= $(SRCS:.c=.so) +OBJECTS+=$(SRCS:.cpp=.so) CDEFS= -rdynamic -Wall all: module -module: $(OBJECTS) so +module: $(OBJECTS) distclean: spotless -.c.o: - $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -c $< +%.so: %.c + $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -o $*.so $*.cpp -so: - $(CC) ${SHARED} ../../mod_version.o $(OBJECTS) -o ../$(TARGET).so ${PROFILE} +%.so: %.cpp + $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -o $*.so $*.cpp clean: - rm -f *.o *.so *.c~ core + rm -f *.so~ core spotless: - rm -f *~ *.o *.so *.c~ core + rm -f *~ *.so~ core diff --git a/src/protocol/Makefile b/src/protocol/Makefile index 9cef64955..a58fd8e64 100644 --- a/src/protocol/Makefile +++ b/src/protocol/Makefile @@ -8,9 +8,8 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \ 'PROFILE=${PROFILE}' 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}'\ 'MAKEBIN=${MAKEBIN}' -OBJECTS= $(SRCS:.c=.o) -OBJECTS+= $(SRCS:.cpp=.o) -SO_FILES=$(OBJECTS:.o=.s) +OBJECTS= $(SRCS:.c=.so) +OBJECTS+= $(SRCS:.cpp=.so) CDEFS= -rdynamic -Wall all: modules subs @@ -22,15 +21,11 @@ install: distclean: clean spotless -.c.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< +%.so: %.c + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.c -.cpp.o: - $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -c $< - -.o.s: - $(MAKEBIN) $(CC) ${SHARED} ../mod_version.o $< -o $*.so ${PROFILE} - @$(TOUCH) $*.s +%.so: %.cpp + $(MAKEBIN) $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../${INCLUDEDIR} -o $*.so $*.cpp subs: @for i in $(SUBS); do \ @@ -43,9 +38,9 @@ subs_clean: (cd $$i; $(MAKE) clean); done clean: subs_clean - rm -f *.o *.s *.so *.c~ core + rm -f *.so~ core spotless: subs_clean - rm -f *.o *.s *.so *.c~ core *.so Makefile.inc + rm -f *.so~ core *.so Makefile.inc diff --git a/src/protocol/Makefile.sub b/src/protocol/Makefile.sub index 12502d87e..60b95920d 100644 --- a/src/protocol/Makefile.sub +++ b/src/protocol/Makefile.sub @@ -5,8 +5,8 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \ 'RUNGROUP=${RUNGROUP}' \ 'PROFILE=${PROFILE}' 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' -OBJECTS= $(SRCS:.c=.o) -SO_FILES=$(OBJECTS:.o=.s) +OBJECTS= $(SRCS:.c=.so) +OBJECTS+=$(SRCS:.cpp=.so) CDEFS= -rdynamic -Wall all: module @@ -15,14 +15,11 @@ module: $(OBJECTS) so distclean: spotless -.c.o: - $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -c $< +%.so: %.c + $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -o $*.so $*.c -.cpp.o: - $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -c $< - -so: - $(CC) ${SHARED} $(OBJECTS) -o ../$(TARGET).so ${PROFILE} +%.so: %.cpp + $(CC) ${CFLAGS} ${CDEFS} ${MODULEFLAGS} -I../ -I../../${INCLUDEDIR} -o $*.so $*.cpp clean: rm -f *.o *.so *.c~ core |