rpm
5.2.1
|
00001 #ifndef __RPMVERSION_H__ 00002 #define __RPMVERSION_H__ 00003 00004 #ifdef __cplusplus 00005 extern "C" { 00006 #endif 00007 00008 /*@unchecked@*/ /*@observer@*/ 00009 extern const char * RPMVERSION; 00010 00011 /*@unchecked@*/ /*@observer@*/ 00012 extern const char * rpmNAME; 00013 00014 /*@unchecked@*/ /*@observer@*/ 00015 extern const char * rpmEVR; 00016 00017 /*@unchecked@*/ 00018 extern int rpmFLAGS; 00019 00020 /* 00021 VERSION <M,N,t,O,R,s> 00022 --------------------- 00023 00024 3 2 1 0 00025 10987654321098765432109876543210 00026 | || || || || || 00027 | M || N ||t|| O || R |s 00028 00029 M: bits 31-27 (5 bit): [0... 32[ [0..31] major version (architecture generation counter) 00030 N: bits 26-21 (6 bit): [0... 64[ [0..63] minor version (functionality generation counter) 00031 t: bits 20-18 (3 bit): {_,a,b,c,r} {_,a,b,c,r} release type 00032 O: bits 17-10 (8 bit): [0...256[ [0..255] major revision (maintenance generation counter) 00033 R: bits 09-01 (9 bit): [0...512[ [0..511] minor revision (hotfix generation counter) 00034 s: bits 00-00 (1 bit): {_,s} {_,s} is snapshot? 00035 00036 TIMESTAMP <Y,M,D,h,m> 00037 --------------------- 00038 00039 3 2 1 0 00040 10987654321098765432109876543210 00041 | || || || || | 00042 | Y ||M || D || h || m | 00043 00044 Y: bits 30-20 (12 bit): [0...4096[ [0...4095] year 00045 M: bits 19-16 ( 4 bit): [0...16[ [1..12] month 00046 D: bits 15-11 ( 5 bit): [0...32[ [1..31] day 00047 h: bits 10-06 ( 5 bit): [0...32[ [00..23] hour (UTC +0000) 00048 m: bits 05-00 ( 6 bit): [0...64[ [00..61] minute (UTC +0000) 00049 00050 EXAMPLES 00051 -------- 00052 00053 version encoding 00054 5.6.DEV RPMLIB_VERSION_ENCODE(5,6,_,0,0,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,HH,MM) 00055 5.6.SNAP.YYYYMMDD RPMLIB_VERSION_ENCODE(5,6,_,0,0,s) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00056 5.6a7 RPMLIB_VERSION_ENCODE(5,6,a,7,0,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00057 5.6b7 RPMLIB_VERSION_ENCODE(5,6,b,7,0,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00058 5.6rc7 RPMLIB_VERSION_ENCODE(5,6,b,7,0,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00059 5.6.7 RPMLIB_VERSION_ENCODE(5,6,r,7,0,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00060 5.6.7.8 RPMLIB_VERSION_ENCODE(5,6,r,7,8,_) RPMLIB_TIMESTAMP_ENCODE(YYYY,MM,DD,00,00) 00061 00062 USAGE 00063 ----- 00064 00065 #include <rpmversion.h> 00066 #if defined(RPMLIB_VERSION) && RPMLIB_VENDOR_EQ('R','P','M','5') && \ 00067 RPMLIB_VERSION_GE(5,0,a,1,0,_) && RPMLIB_TIMESTAMP_GT(2007,11,13,00,00) 00068 [...] 00069 #endif 00070 */ 00071 00072 /* link-time information */ 00073 extern uint32_t rpmlibVersion(void) 00074 /*@*/; 00075 extern uint32_t rpmlibTimestamp(void) 00076 /*@*/; 00077 extern uint32_t rpmlibVendor(void) 00078 /*@*/; 00079 00080 /* compile-time information */ 00081 #define RPMLIB_VERSION RPMLIB_VERSION_ENCODE(5,2,r,1,0,_) 00082 #define RPMLIB_TIMESTAMP RPMLIB_TIMESTAMP_ENCODE(2009,0,0,0,0) 00083 #define RPMLIB_VENDOR RPMLIB_VENDOR_ENCODE('R','P','M','5') 00084 00085 /* RPM release version encoding */ 00086 #define RPMLIB_VERSION_ENCODE(major,minor,type,micro,revision,snap) \ 00087 ( RPMLIB_BITFIELD_SET(31,27,(major)) \ 00088 | RPMLIB_BITFIELD_SET(26,21,(minor)) \ 00089 | RPMLIB_BITFIELD_SET(20,18,RPMLIB_VERSION_ENCODE_T(type)) \ 00090 | RPMLIB_BITFIELD_SET(17,10,(micro)) \ 00091 | RPMLIB_BITFIELD_SET(9,1,(revision)) \ 00092 | RPMLIB_BITFIELD_SET(0,0,RPMLIB_VERSION_ENCODE_S(snap))) 00093 #define RPMLIB_VERSION_ENCODE_T(type) RPMLIB_VERSION_ENCODE_T_##type 00094 #define RPMLIB_VERSION_ENCODE_T__ 0 00095 #define RPMLIB_VERSION_ENCODE_T_a 1 00096 #define RPMLIB_VERSION_ENCODE_T_b 2 00097 #define RPMLIB_VERSION_ENCODE_T_c 3 00098 #define RPMLIB_VERSION_ENCODE_T_r 4 00099 #define RPMLIB_VERSION_ENCODE_S(snap) RPMLIB_VERSION_ENCODE_S_##snap 00100 #define RPMLIB_VERSION_ENCODE_S__ 0 00101 #define RPMLIB_VERSION_ENCODE_S_s 1 00102 00103 /* RPM release timestamp encoding */ 00104 #define RPMLIB_TIMESTAMP_ENCODE(year,month,date,hour,minute) \ 00105 ( RPMLIB_BITFIELD_SET(31,20,(year)) \ 00106 | RPMLIB_BITFIELD_SET(19,16,(month)) \ 00107 | RPMLIB_BITFIELD_SET(15,11,(date)) \ 00108 | RPMLIB_BITFIELD_SET(10,6,(hour)) \ 00109 | RPMLIB_BITFIELD_SET(5,0,(minute))) 00110 00111 /* RPM vendor tag encoding */ 00112 #define RPMLIB_VENDOR_ENCODE(c1,c2,c3,c4) \ 00113 ( RPMLIB_BITFIELD_SET(31,24,(c1)) \ 00114 | RPMLIB_BITFIELD_SET(23,16,(c2)) \ 00115 | RPMLIB_BITFIELD_SET(15,8,(c3)) \ 00116 | RPMLIB_BITFIELD_SET(7,0,(c4))) 00117 00118 /* RPM release version assertion */ 00119 #define RPMLIB_VERSION_LT(major,minor,type,micro,revision,snap) \ 00120 (RPMLIB_VERSION < RPMLIB_VERSION_ENCODE((major),(minor),(type),(micro),(revision),(snap))) 00121 #define RPMLIB_VERSION_LE(major,minor,type,micro,revision,snap) \ 00122 (RPMLIB_VERSION <= RPMLIB_VERSION_ENCODE((major),(minor),(type),(micro),(revision),(snap))) 00123 #define RPMLIB_VERSION_EQ(major,minor,type,micro,revision,snap) \ 00124 (RPMLIB_VERSION == RPMLIB_VERSION_ENCODE((major),(minor),(type),(micro),(revision),(snap))) 00125 #define RPMLIB_VERSION_GE(major,minor,type,micro,revision,snap) \ 00126 (RPMLIB_VERSION >= RPMLIB_VERSION_ENCODE((major),(minor),(type),(micro),(revision),(snap))) 00127 #define RPMLIB_VERSION_GT(major,minor,type,micro,revision,snap) \ 00128 (RPMLIB_VERSION > RPMLIB_VERSION_ENCODE((major),(minor),(type),(micro),(revision),(snap))) 00129 00130 /* RPM release timestamp assertion */ 00131 #define RPMLIB_TIMESTAMP_LT(year,month,date,hour,minute) \ 00132 (RPMLIB_TIMESTAMP < RPMLIB_TIMESTAMP_ENCODE((year),(month),(date),(hour),(minute))) 00133 #define RPMLIB_TIMESTAMP_LE(major,minor,type,micro,revision) \ 00134 (RPMLIB_TIMESTAMP <= RPMLIB_TIMESTAMP_ENCODE((year),(month),(date),(hour),(minute))) 00135 #define RPMLIB_TIMESTAMP_EQ(major,minor,type,micro,revision) \ 00136 (RPMLIB_TIMESTAMP == RPMLIB_TIMESTAMP_ENCODE((year),(month),(date),(hour),(minute))) 00137 #define RPMLIB_TIMESTAMP_GE(major,minor,type,micro,revision) \ 00138 (RPMLIB_TIMESTAMP >= RPMLIB_TIMESTAMP_ENCODE((year),(month),(date),(hour),(minute))) 00139 #define RPMLIB_TIMESTAMP_GT(major,minor,type,micro,revision) \ 00140 (RPMLIB_TIMESTAMP > RPMLIB_TIMESTAMP_ENCODE((year),(month),(date),(hour),(minute))) 00141 00142 /* RPM vendor tag assertion */ 00143 #define RPMLIB_VENDOR_EQ(c1,c2,c3,c4) \ 00144 (RPMLIB_VENDOR == RPMLIB_VENDOR_ENCODE((c1),(c2),(c3),(c4))) 00145 00146 /* encode numer "n" into the bits "l" (msb) to "r" (lsb) */ 00147 #define RPMLIB_BITFIELD_SET(l,r,n) \ 00148 (((n) & ((1<<(((l)-(r))+1))-1) ) << (r)) 00149 00150 #ifdef __cplusplus 00151 } 00152 #endif 00153 00154 #endif /* __RPMVERSION_H__ */