-#define VMG_HAS_PERL(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S))))))
-
-#define VMG_HAS_PERL_BRANCH(R, V, S) (PERL_REVISION == (R) && PERL_VERSION == (V) && PERL_SUBVERSION >= (S))
-
-#define VMG_HAS_PERL_MAINT(R, V, S, P) (PERL_REVISION == (R) && PERL_VERSION == (V) && (VMG_PERL_PATCHLEVEL >= (P) || (!VMG_PERL_PATCHLEVEL && PERL_SUBVERSION >= (S))))
-
-/* --- Threads and multiplicity -------------------------------------------- */
-
-#ifndef NOOP
-# define NOOP
-#endif
-
-#ifndef dNOOP
-# define dNOOP
-#endif
-
-/* Safe unless stated otherwise in Makefile.PL */
-#ifndef VMG_FORKSAFE
-# define VMG_FORKSAFE 1
-#endif
-
-#ifndef VMG_MULTIPLICITY
-# if defined(MULTIPLICITY)
-# define VMG_MULTIPLICITY 1
-# else
-# define VMG_MULTIPLICITY 0
-# endif
-#endif
-#if VMG_MULTIPLICITY
-# ifndef PERL_IMPLICIT_CONTEXT
-# error MULTIPLICITY builds must set PERL_IMPLICIT_CONTEXT
-# endif
-#endif
-
-#if VMG_MULTIPLICITY && defined(USE_ITHREADS) && defined(dMY_CXT) && defined(MY_CXT) && defined(START_MY_CXT) && defined(MY_CXT_INIT) && (defined(MY_CXT_CLONE) || defined(dMY_CXT_SV))
-# ifndef VMG_THREADSAFE
-# define VMG_THREADSAFE 1
-# endif
-# ifndef MY_CXT_CLONE
-# define MY_CXT_CLONE \
- dMY_CXT_SV; \
- my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1)); \
- Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t); \
- sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
-# endif
-#else
-# undef VMG_THREADSAFE
-# define VMG_THREADSAFE 0
-# undef dMY_CXT
-# define dMY_CXT dNOOP
-# undef MY_CXT
-# define MY_CXT vmg_globaldata
-# undef START_MY_CXT
-# define START_MY_CXT STATIC my_cxt_t MY_CXT;
-# undef MY_CXT_INIT
-# define MY_CXT_INIT NOOP
-# undef MY_CXT_CLONE
-# define MY_CXT_CLONE NOOP
-#endif
-
-#if VMG_THREADSAFE
-# define VMG_LOCK(M) MUTEX_LOCK(M)
-# define VMG_UNLOCK(M) MUTEX_UNLOCK(M)
-#else
-# define VMG_LOCK(M)
-# define VMG_UNLOCK(M)
-#endif
-
-/* --- Compatibility ------------------------------------------------------- */
-
-#ifndef Newx
-# define Newx(v, n, c) New(0, v, n, c)
-#endif
-
-#ifndef SvMAGIC_set
-# define SvMAGIC_set(sv, val) (SvMAGIC(sv) = (val))
-#endif
-
-#ifndef SvRV_const
-# define SvRV_const(sv) SvRV((SV *) sv)
-#endif
-
-#ifndef SvREFCNT_inc_simple_void
-# define SvREFCNT_inc_simple_void(sv) ((void) SvREFCNT_inc(sv))
-#endif
-
-#ifndef mPUSHu
-# define mPUSHu(U) PUSHs(sv_2mortal(newSVuv(U)))
-#endif
-
-#ifndef PERL_MAGIC_ext
-# define PERL_MAGIC_ext '~'
-#endif
-
-#ifndef PERL_MAGIC_tied
-# define PERL_MAGIC_tied 'P'
-#endif
-
-#ifndef MGf_LOCAL
-# define MGf_LOCAL 0
-#endif
-
-#ifndef IN_PERL_COMPILETIME
-# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
-#endif
-
-#ifdef DEBUGGING
-# define VMG_ASSERT(C) assert(C)
-#else
-# define VMG_ASSERT(C)
-#endif