Signed-off-by: Steven Noonan <steven@uplinklabs.net>
NCYUW5C4IA6JQMFGJQUZNB2GBLKG6ROI7I3ZKO5O5DIQSQNXLNDAC
FPEDPMNC2PK2N636TO46VYNGQGGBSBSDEFOPV7M26I25LK4XMPEAC
LCXMLLOYRE6UWNTREC62EVW3DQHXX7DCY7ZFCDPT4FZBOEVZBYEQC
2AQN6I4JEKVYBDBN4DZKOLGBTDCDPZ4XAQLI67FXCFVD6MX4SHTQC
7JMN4TTOB7J56UAHT47USGLXARDHDEB7SYIHA5QTGMDX3AZ6ZCSQC
KWVLKKCTRMUXMAD4LWXJFQKJGBGCEPZY6LUFC3ENOCZUCYMXDD7QC
2EBEWIV4YHXXAFR4GG2GMZJ2K77NK762HNQ77CZLHI3LDVGX7RJAC
JI6X5RSEBSQXO2M5LDL7DI45TLY7ZLG2BWNXWMTIU2JGAW3AJGZQC
36BFWYZWCQGMAMK4EF2R5C66RA2EBLTX3MJW3QDEKN64C3BJQX7AC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
IAAPG4VMQN6O4CZYNR5QA7MXWVII5USVV2HRX2MDAF2GLDGRUZGAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
PNVQYVU2PFWPYY5TAAW3IUYHRRHALTKRNH2GPWZWUUAOWJ2R4M2QC
467AWA4ZIVLXCJAAYRP5EZUF2YEM6QPRSLYIUBQ65GQ4DXQYX3UAC
N7J2IWU7B34XIUYWHJF2RTRAXXAQLVVZLWWHFWN4FC5PLNFFEWCAC
RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC
JMGFP3NPBN3IMFWC2T42UERZBAU3SPCTJ4SOJ5WL6WRUNB6BPKIQC
7OEQPUSDZ3CTUQYZLALUI7PHZOUBL2TTOKRJBCVEYTL5J2LQUNRQC
L3DRKFURVDCV3EJKGG6GVVQX3D5MZPICTVOKNOD3LGM2PECBA7PQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
UN7KHEPBHUUULGFWVZA7CGO2URKGTU5EKNRCZQFNBCZFFYWZTXIQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
IXO5VNCDYDYI46Y5QWNJMD7TURKYO526CJA4TIMH5PDDAYHMK5YQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
3SQQ4MM6YO4I37CQ6GIBIX6BXAEVHNVNHPVMR3PPBBNO454D6XWQC
PBTLQZHBQK5TAIO7SNSCKSHOQQ65CFFI55OTTETV7FG2FCJOXKHQC
MADTICUXDKQB7EKTXG7J2OIJGUM7A437FRWIBRA3BIVEKXEXHO6AC
AM7QPHDAWNXHLUEVUHVRHG2RO2DOIEFFU4GV3DCIROW6O5HW7H4AC
KSFNXBKBU4XJLJMHLVG73ZFW5CGN2D7UN32OUFHCXMHFOWF7C6TAC
IHV7JHD4E67NEGLZEO3FPQGJPJF3IAV6QV5A63FPG4SU2VRFV47QC
K2GMFKXUWN5R3KCW6OYVXHN47MIQZKEEIOSAU6LFFKBNKF6JBVWAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
2D77G7XIIDVS2RUE33YH2NAPSXNLXKXXN3RP2TKPLWRXTEAVSZ3QC
IPPPBA4G2LODBP3EJIYGUAAOMHKLNBXHBD7KVX2JVDTA4DETHO4AC
ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC
COLMJH3UIQFF4R5AV642OJK4HHGUIIPLNP5WGKLWWYNJV7ZGPI7AC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC
5UC5TI7B6NWGIGN74QRBZKDBYUMHLM2ZO5ATXEZ6TZOGOLF3JX5QC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
GL5T36G3A2LUTTYSL7ZQVUYONUCXL5DK36532FM6XRAQCLYDWW2QC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
NEECVIIAOBP72T6O44DWAA6HFSDY3KSWYCFMKAEMDMVOI7XASD7QC
TOKBONNNPTP2CIEHMMR4QAJZTXYETS55OGGDA6FY6NIMNDYMWJDAC
DUN7EE7M7EH27OMYTBAAN2KIPQH4T375WLDSV2M3C7V54C4QOVXAC
TAVHZJPVNJBZR7CUURAOYNDZPNVQ3AGHTXDEP5K4JGYETBLQJDRQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
4XGOVPFCU6KZIYHKWCHUTZY6G5S326DKBG3UREPR34Q4TSDD3TAAC
FUEEIUKGHHFPIRZCN3N753GONWAZTWQ2ZWR53IBJAAZ6FZUNGOMAC
PVWTSJSXXLI7SBNQZHV4VVB725I3LGYAKFKR3KPYYOLPOCJNGY2QC
Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC
OIAQU4VDTZ3EHBNC7FZIOW2QEQLTDHZ7O46XW2YWM6JRVBC66UPQC
CKY7MRFWMNHXIPJD5ZUAJN5T2YHUIEAYBNYYV5GN74LBZJRDJMEQC
HQ5FYPDFIQNNDMKDSGWAAXYIVIRK42B4OBA2LESP2OA5SPKSTLVQC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
ZF6STV5NEMEP5O5S6QO52R2CS5JEAGUQA5OKSBI2BIWF3OLZP4CQC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC
/* Crawl versioning:
* Crawl uses three numbers to determine the version:
* Version, which changes when the dev team makes enormous overhauls
* to the game (which may cause savefiles from previous versions to
* temporarily stop working, for example)
* Release, which changes when siginficant new features have been
* added to the game.
* Mod, which changes with every publicly released version that
* contains nothing more than bug fixes, cosmetic changes,
* internal cleanup, etc.
*
* Further, any source or binary uploaded anywhere that is _not_ of
* release quality should be labelled as such:
* alpha for potentially unstable dev versions, or
* beta for feature-complete and mostly balanced versions
*
* several alphas or betas in a row should be labelled incrementally;
* alpha1 -> alpha2 -> alpha3 -> beta1 -> beta2 -> ...
*/
#define VER_NUM "0.6"
#define VER_QUAL "-git"
namespace Version
{
//! The short version string.
/*!
* This version will generally match the last version tag. For instance,
* if the last tag of Crawl before this build was '0.1.2', you'd see
* '0.1.2'. This version number does not include some rather important
* extra information useful for getting the exact revision (the Git commit
* hash and the number of revisions since the tag). For that extra information,
* use Version::Long() instead.
*
* For extracting individual components of the version, you should use the
* Major(), Minor(), Revision() and Build() functions.
*/
std::string Short();
//! The long version string.
/*!
* This string contains detailed version information about the CrissCross
* build in use. The string will always start with the Git tag that this
* build descended from. If this build is not an exact match for a given
* tag, this string will also include the number of commits since the tag
* and the Git commit id (the SHA-1 hash).
*/
std::string Long();
// Undefine for official releases.
#define DISPLAY_BUILD_REVISION
//! The major version number.
/*!
* This is the first number to appear in a version tag. For instance,
* if the tag is '0.1.2.3', this function would return '0'.
*/
int Major();
//! The minor version number.
/*!
* This is the second number to appear in a version tag. For instance,
* if the tag is '0.1.2.3', this function would return '1'.
*/
int Minor();
// last updated 07august2001 {mv}
/* ***********************************************************************
* called from: chardump - command - newgame
* *********************************************************************** */
#define VERSION VER_NUM VER_QUAL " (crawl-ref)"
//! The revision number.
/*!
* This is the third number to appear in a version tag. For instance,
* if the tag is '0.1.2.3', this function would return '2'.
*/
int Revision();
// last updated 20feb2001 {GDL}
/* ***********************************************************************
* called from: command
* *********************************************************************** */
#define VERSION_DETAIL __DATE__
//! The build number.
/*!
* This is the fourth number to appear in a version tag. For instance,
* if the tag is '0.1.2.3', this function would return '3'.
*/
int Build();
// Returns the largest SVN revision number that a source file has been updated
// to. This is not perfectly accurate, but should be good enough for save
// files, as breaking a save almost always involves changing a source file.
int svn_revision();
typedef enum {
DEV, /*!< In-development version (does not exactly match a tag). i.e. '0.1.2-3-g3af4131'. */
ALPHA, /*!< An alpha release. i.e. '0.1.2-a3' */
BETA, /*!< A beta release. i.e. '0.1.2-b3' */
RC, /*!< A release candidate. i.e. '0.1.2-rc3' */
FINAL /*!< A final release. i.e. '0.1.2' */
} Class;
class check_revision
{
public:
check_revision(const char *rev_string);
static int max_rev;
};
//! The release class.
/*!
* Indicates the type of release. For instance, if you have a tag such
* as '0.1.2-b1', the class is 'BETA'. Valid suffixes are '-a', '-b',
* '-rc'. If the version string does not precisely match a tag, then it
* is considered an in-development version.
*/
Class ReleaseType();
// This macro is meant to be used once per source file.
// It can't be put in header files, as there's no way to generate a unique
// object name across includes. Blame the lack of cross-platform __COUNTER__.
#define REVISION(rev) static check_revision check_this_source_file_revision(rev)
//! The release ID.
/*!
* If this is a special type of release (alpha, beta, rc), then this
* will return the alpha/beta/rc number. Otherwise, this returns 0.
*/
int ReleaseID();
}
int svn_revision()
{
#if BUILD_REVISION
return BUILD_REVISION;
#else
return check_revision::max_rev;
#endif
int Major()
{
return CRAWL_VERSION_MAJOR;
}
int Minor()
{
return CRAWL_VERSION_MINOR;
}
int Revision()
{
return CRAWL_VERSION_REVISION;
}
int Build()
{
return CRAWL_VERSION_BUILD;
}
Class ReleaseType()
{
return CRAWL_VERSION_PREREL_TYPE;
}
int ReleaseID()
{
return CRAWL_VERSION_PREREL_NUM;
}
std::string result = "This is <w>" CRAWL " " VERSION "</w> (";
#ifdef DISPLAY_BUILD_REVISION
result += "r" + number_to_string(svn_revision()) + ", ";
#endif
result += VERSION_DETAIL ").";
std::string result = "This is <w>" CRAWL " " + Version::Long() + "</w>";