diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/internal/abi.h | 45 | ||||
-rw-r--r-- | include/ruby/ruby.h | 1 |
2 files changed, 46 insertions, 0 deletions
diff --git a/include/ruby/internal/abi.h b/include/ruby/internal/abi.h new file mode 100644 index 0000000000..78ed4c1875 --- /dev/null +++ b/include/ruby/internal/abi.h @@ -0,0 +1,45 @@ +#ifndef RUBY_ABI_H +#define RUBY_ABI_H + +/* This number represents Ruby's ABI version. + * + * In development Ruby, it should be bumped every time an ABI incompatible + * change is introduced. This will force other developers to rebuild extension + * gems. + * + * The following cases are considered as ABI incompatible changes: + * - Changing any data structures. + * - Changing macros or inline functions causing a change in behavior. + * - Deprecating or removing function declarations. + * + * The following cases are NOT considered as ABI incompatible changes: + * - Any changes that does not involve the header files in the `include` + * directory. + * - Adding macros, inline functions, or function declarations. + * - Backwards compatible refactors. + * - Editing comments. + * + * In released versions of Ruby, this number should not be changed since teeny + * versions of Ruby should guarantee ABI compatibility. + */ +#define RUBY_ABI_VERSION 0 + +/* Windows does not support weak symbols so ruby_abi_version will not exist + * in the shared library. */ +#if defined(HAVE_FUNC_WEAK) && !defined(_WIN32) && !defined(__MINGW32__) +# define RUBY_DLN_CHECK_ABI 1 +#else +# define RUBY_DLN_CHECK_ABI 0 +#endif + +#if RUBY_DLN_CHECK_ABI + +RUBY_FUNC_EXPORTED unsigned long long __attribute__((weak)) +ruby_abi_version(void) +{ + return RUBY_ABI_VERSION; +} + +#endif + +#endif diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index f35d13685c..108127a93c 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -23,6 +23,7 @@ #include <stdarg.h> #include "defines.h" +#include "ruby/internal/abi.h" #include "ruby/internal/anyargs.h" #include "ruby/internal/arithmetic.h" #include "ruby/internal/core.h" |