summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel De Graaf <danieldg@inspircd.org>2010-04-01 18:50:16 -0500
committerDaniel De Graaf <danieldg@inspircd.org>2010-04-01 19:01:32 -0500
commitcd6b7a8cda83f54679634624e84e92b91cf80683 (patch)
tree311a67cdc262ab4e5721c899f15b631e5b2d870b
parenta72520a03c2176f0a99a2dbe2f3c4b4c6a95a3e1 (diff)
Split up API_VERSION number
Since we can make API changes in multiple branches at the same time, a single sequence number is insufficient. Use two numbers to indicate the major version and API increment.
-rw-r--r--include/modules.h36
-rw-r--r--make/template/main.mk4
-rw-r--r--src/modules.cpp13
3 files changed, 23 insertions, 30 deletions
diff --git a/include/modules.h b/include/modules.h
index 102ed180b..3601dd659 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -94,10 +94,17 @@ struct ModResult {
}
};
-/** If you change the module API in any way, increment this value.
- * This MUST be a pure integer, with no parenthesis
+/** InspIRCd major version.
+ * 1.2 -> 102; 2.1 -> 201; 2.12 -> 212
*/
-#define API_VERSION 141
+#define INSPIRCD_VERSION_MAJ 200
+/** InspIRCd API version.
+ * If you change any API elements, increment this value. This counter should be
+ * reset whenever the major version is changed. Modules can use these two values
+ * and numerical comparisons in preprocessor macros if they wish to support
+ * multiple versions of InspIRCd in one file.
+ */
+#define INSPIRCD_VERSION_API 1
/**
* This #define allows us to call a method in all
@@ -169,12 +176,8 @@ do { \
/** Holds a module's Version information.
* The members (set by the constructor only) indicate details as to the version number
* of a module. A class of type Version is returned by the GetVersion method of the Module class.
- *
- * The core provides only one implementation of the template, causing a run-time linking
- * error when attempting to load a module compiled against a different API_VERSION.
*/
-template<int api>
-class CoreExport VersionBase
+class CoreExport Version
{
public:
/** Module description
@@ -189,19 +192,14 @@ class CoreExport VersionBase
const std::string link_data;
/** Simple module version */
- VersionBase(const std::string &desc, int flags = VF_NONE);
+ Version(const std::string &desc, int flags = VF_NONE);
/** Complex version information, including linking compatability data */
- VersionBase(const std::string &desc, int flags, const std::string& linkdata);
+ Version(const std::string &desc, int flags, const std::string& linkdata);
- virtual ~VersionBase() {}
-
- /** Return true if the module can link (default is identity comparison) */
- virtual bool CanLink(const std::string& other_data);
+ virtual ~Version() {}
};
-typedef VersionBase<API_VERSION> Version;
-
/** The Request class is a unicast message directed at a given module.
* When this class is properly instantiated it may be sent to a module
* using the Send() method, which will call the given module's OnRequest
@@ -1646,9 +1644,9 @@ class CoreExport ModuleManager
#define MODULE_INIT_STR MODULE_INIT_STR_FN_2(MODULE_INIT_SYM)
#define MODULE_INIT_STR_FN_2(x) MODULE_INIT_STR_FN_1(x)
#define MODULE_INIT_STR_FN_1(x) #x
-#define MODULE_INIT_SYM MODULE_INIT_SYM_FN_2(API_VERSION)
-#define MODULE_INIT_SYM_FN_2(x) MODULE_INIT_SYM_FN_1(x)
-#define MODULE_INIT_SYM_FN_1(x) inspircd_module_ ## x
+#define MODULE_INIT_SYM MODULE_INIT_SYM_FN_2(INSPIRCD_VERSION_MAJ, INSPIRCD_VERSION_API)
+#define MODULE_INIT_SYM_FN_2(x,y) MODULE_INIT_SYM_FN_1(x,y)
+#define MODULE_INIT_SYM_FN_1(x,y) inspircd_module_ ## x ## _ ## y
#ifdef PURE_STATIC
diff --git a/make/template/main.mk b/make/template/main.mk
index cd00cfe19..a3daaee10 100644
--- a/make/template/main.mk
+++ b/make/template/main.mk
@@ -132,6 +132,10 @@ debug-header:
@echo "*************************************"
mod-header:
+@IFEQ $(PURE_STATIC) 1
+ @echo 'Cannot build single modules in pure-static build'
+ @exit 1
+@ENDIF
@echo 'Building single module:'
mod-footer: target
diff --git a/src/modules.cpp b/src/modules.cpp
index f2ce6d372..8af5b95e3 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -34,24 +34,15 @@ void dynamic_reference_base::reset_all()
}
// Version is a simple class for holding a modules version number
-template<>
-VersionBase<API_VERSION>::VersionBase(const std::string &desc, int flags)
-: description(desc), Flags(flags)
+Version::Version(const std::string &desc, int flags) : description(desc), Flags(flags)
{
}
-template<>
-VersionBase<API_VERSION>::VersionBase(const std::string &desc, int flags, const std::string& linkdata)
+Version::Version(const std::string &desc, int flags, const std::string& linkdata)
: description(desc), Flags(flags), link_data(linkdata)
{
}
-template<>
-bool VersionBase<API_VERSION>::CanLink(const std::string& other_data)
-{
- return link_data == other_data;
-}
-
Request::Request(Module* src, Module* dst, const char* idstr)
: id(idstr), source(src), dest(dst)
{