1################################################################################ 2## 3## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4## Version 2.x, Copyright (C) 2001, Paul Marquess. 5## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6## 7## This program is free software; you can redistribute it and/or 8## modify it under the same terms as Perl itself. 9## 10################################################################################ 11 12=provides 13 14__UNDEFINED__ 15 16=dontwarn 17 18## We don't want people to be using these symbols so even though we provide 19## them, we don't publicly mention them 20 21PERL_REVISION 22PERL_VERSION 23PERL_SUBVERSION 24PERL_PATCHLEVEL_H_IMPLICIT 25PERL_BCDVERSION 26 27=implementation 28 29#define D_PPP_RELEASE_DATE 1693785600 /* 2023-09-04 */ 30 31#if ! defined(PERL_REVISION) && ! defined(PERL_VERSION_MAJOR) 32# if ! defined(__PATCHLEVEL_H_INCLUDED__) \ 33 && ! ( defined(PATCHLEVEL) && defined(SUBVERSION)) 34# define PERL_PATCHLEVEL_H_IMPLICIT 35# include <patchlevel.h> 36# endif 37# if ! defined(PERL_VERSION) \ 38 && ! defined(PERL_VERSION_MAJOR) \ 39 && ( ! defined(SUBVERSION) || ! defined(PATCHLEVEL) ) 40# include <could_not_find_Perl_patchlevel.h> 41# endif 42#endif 43 44#ifdef PERL_VERSION_MAJOR 45# define D_PPP_MAJOR PERL_VERSION_MAJOR 46#elif defined(PERL_REVISION) 47# define D_PPP_MAJOR PERL_REVISION 48#else 49# define D_PPP_MAJOR 5 50#endif 51 52#ifdef PERL_VERSION_MINOR 53# define D_PPP_MINOR PERL_VERSION_MINOR 54#elif defined(PERL_VERSION) 55# define D_PPP_MINOR PERL_VERSION 56#elif defined(PATCHLEVEL) 57# define D_PPP_MINOR PATCHLEVEL 58# define PERL_VERSION PATCHLEVEL /* back-compat */ 59#else 60# error Could not find a source for PERL_VERSION_MINOR 61#endif 62 63#ifdef PERL_VERSION_PATCH 64# define D_PPP_PATCH PERL_VERSION_PATCH 65#elif defined(PERL_SUBVERSION) 66# define D_PPP_PATCH PERL_SUBVERSION 67#elif defined(SUBVERSION) 68# define D_PPP_PATCH SUBVERSION 69# define PERL_SUBVERSION SUBVERSION /* back-compat */ 70#else 71# error Could not find a source for PERL_VERSION_PATCH 72#endif 73 74#if D_PPP_MAJOR < 5 || D_PPP_MAJOR == 6 75# error Devel::PPPort works only on Perl 5, Perl 7, ... 76#elif D_PPP_MAJOR != 5 77 /* Perl 7 and above: the old forms are deprecated, set up so that they 78 * assume Perl 5, and will make this look like 5.201.201. 79 * 80 * 201 is used so will be well above anything that would come from a 5 81 * series if we unexpectedly have to continue it, but still gives plenty of 82 * room, up to 255, of numbers that will fit into a byte in case there is 83 * something else unforeseen */ 84# undef PERL_REVISION 85# undef PERL_VERSION 86# undef PERL_SUBVERSION 87# define D_PPP_REVISION 5 88# define D_PPP_VERSION 201 89# define D_PPP_SUBVERSION 201 90# if (defined(__clang__) /* _Pragma here doesn't work with gcc */ \ 91 && ( (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ 92 || defined(_STDC_C99) \ 93 || defined(__c99))) 94# define D_PPP_STRINGIFY(x) #x 95# define D_PPP_deprecate(xyz) _Pragma(D_PPP_STRINGIFY(GCC warning(D_PPP_STRINGIFY(xyz) " is deprecated"))) 96# define PERL_REVISION (D_PPP_REVISION D_PPP_deprecate(PERL_REVISION)) 97# define PERL_VERSION (D_PPP_REVISION D_PPP_deprecate(PERL_VERSION)) 98# define PERL_SUBVERSION (D_PPP_SUBVERSION D_PPP_deprecate(PERL_SUBVERSION)) 99# else 100# define PERL_REVISION D_PPP_REVISION 101# define PERL_VERSION D_PPP_REVISION 102# define PERL_SUBVERSION D_PPP_SUBVERSION 103# endif 104#endif 105 106/* Warning: PERL_PATCHLEVEL PATCHLEVEL SUBVERSION PERL_REVISION PERL_VERSION 107 * PERL_SUBVERSION PERL_BCDVERSION 108 * 109 * You should be using PERL_VERSION_xy(maj,min,ptch) instead of this, where xy 110 * is one of EQ, NE, LE, GT, LT, GE 111 */ 112 113/* Replace PERL_PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 114/* Replace PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 115/* Replace SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 116/* Replace PERL_REVISION with PERL_VERSION_xy(a,b,c) (where xy is EQ,LT,GT...) */ 117/* Replace PERL_VERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 118/* Replace PERL_SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 119/* Replace PERL_BCDVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */ 120 121#define D_PPP_DEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) 122#define D_PPP_JNP_TO_BCD(j,n,p) ((D_PPP_DEC2BCD(j)<<24)|(D_PPP_DEC2BCD(n)<<12)|D_PPP_DEC2BCD(p)) 123#define PERL_BCDVERSION D_PPP_JNP_TO_BCD(D_PPP_MAJOR, \ 124 D_PPP_MINOR, \ 125 D_PPP_PATCH) 126 127/* These differ from the versions outside D:P in using PERL_BCDVERSION instead 128 * of PERL_DECIMAL_VERSION. The formats printing in this module assume BCD, so 129 * always use it */ 130#undef PERL_VERSION_EQ 131#undef PERL_VERSION_NE 132#undef PERL_VERSION_LT 133#undef PERL_VERSION_GE 134#undef PERL_VERSION_LE 135#undef PERL_VERSION_GT 136 137/* N.B. These don't work if the patch number is 42 or 92, as those are what '*' 138 * is in ASCII and EBCDIC respectively */ 139__UNDEFINED__ PERL_VERSION_EQ(j,n,p) \ 140 (((p) == '*') ? ( (j) == D_PPP_MAJOR \ 141 && (n) == D_PPP_MINOR) \ 142 : (PERL_BCDVERSION == D_PPP_JNP_TO_BCD(j,n,p))) 143__UNDEFINED__ PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p)) 144 145__UNDEFINED__ PERL_VERSION_LT(j,n,p) /* p=='*' means _LT(j,n,0) */ \ 146 (PERL_BCDVERSION < D_PPP_JNP_TO_BCD( (j), \ 147 (n), \ 148 (((p) == '*') ? 0 : (p)))) 149__UNDEFINED__ PERL_VERSION_GE(j,n,p) (! PERL_VERSION_LT(j,n,p)) 150 151__UNDEFINED__ PERL_VERSION_LE(j,n,p) /* p=='*' means _LE(j,n,999) */ \ 152 (PERL_BCDVERSION <= D_PPP_JNP_TO_BCD( (j), \ 153 (n), \ 154 (((p) == '*') ? 999 : (p)))) 155__UNDEFINED__ PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p)) 156 157=xsmisc 158 159/* PERL_VERSION_xx sanity checks */ 160 161#if !PERL_VERSION_EQ(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 162# error PERL_VERSION_EQ(major, minor, patch) is false; expected true 163#endif 164#if !PERL_VERSION_EQ(D_PPP_MAJOR, D_PPP_MINOR, '*') 165# error PERL_VERSION_EQ(major, minor, '*') is false; expected true 166#endif 167#if PERL_VERSION_NE(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 168# error PERL_VERSION_NE(major, minor, patch) is true; expected false 169#endif 170#if PERL_VERSION_NE(D_PPP_MAJOR, D_PPP_MINOR, '*') 171# error PERL_VERSION_NE(major, minor, '*') is true; expected false 172#endif 173#if PERL_VERSION_LT(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 174# error PERL_VERSION_LT(major, minor, patch) is true; expected false 175#endif 176#if PERL_VERSION_LT(D_PPP_MAJOR, D_PPP_MINOR, '*') 177# error PERL_VERSION_LT(major, minor, '*') is true; expected false 178#endif 179#if !PERL_VERSION_LE(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 180# error PERL_VERSION_LE(major, minor, patch) is false; expected true 181#endif 182#if !PERL_VERSION_LE(D_PPP_MAJOR, D_PPP_MINOR, '*') 183# error PERL_VERSION_LE(major, minor, '*') is false; expected true 184#endif 185#if PERL_VERSION_GT(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 186# error PERL_VERSION_GT(major, minor, patch) is true; expected false 187#endif 188#if PERL_VERSION_GT(D_PPP_MAJOR, D_PPP_MINOR, '*') 189# error PERL_VERSION_GT(major, minor, '*') is true; expected false 190#endif 191#if !PERL_VERSION_GE(D_PPP_MAJOR, D_PPP_MINOR, D_PPP_PATCH) 192# error PERL_VERSION_GE(major, minor, patch) is false; expected true 193#endif 194#if !PERL_VERSION_GE(D_PPP_MAJOR, D_PPP_MINOR, '*') 195# error PERL_VERSION_GE(major, minor, '*') is false; expected true 196#endif 197