/home66/gary/public_html/cloudy/c08_branch/source/version.h

Go to the documentation of this file.
00001 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and
00002  * others.  For conditions of distribution and use see copyright notice in license.txt */
00003 
00004 #ifndef _VERSION_H_
00005 #define _VERSION_H_
00006 
00008 #include "date.h"
00009 
00010 static const int CLD_MAJOR = 8;
00011 static const int CLD_MINOR = 0;
00012 static const int CLD_PATCH = 0;
00013 
00014 static const string Url = "$HeadURL: https://svn.nublado.org/cloudy/branches/c08_branch/source/version.h $";
00015 
00016 static const char* CITATION = "Ferland, G. J., Korista, K. T., Verner, D. A., Ferguson, J. W., Kingdon, J. B., & Verner, E. M. 1998, PASP, 110, 761";
00017 static const char* CITATION_LATEX = "\\bibitem[Ferland et al.(1998)]{1998PASP..110..761F} Ferland, G.~J., Korista, K.~T., Verner, D.~A., Ferguson, J.~W., Kingdon, J.~B., \\& Verner, E.~M.\\ 1998, \\pasp, 110, 761";
00018 static const char* CITATION_SHORT = "Ferland et al. (1998)";            
00019 
00020 class t_version : public Singleton<t_version> 
00021 {
00022         friend class Singleton<t_version>;
00023 protected:
00024         t_version()
00025         {
00026                 static const char chMonth[12][4] =
00027                         { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
00028 
00029                 /* is this a release version? */
00030                 lgRelease = true;
00031 
00032                 /* is this a beta version?  0 for no
00033                  * if this is non-zero then lgRelease above should be false */
00034                 nBetaVer = 0;
00035 
00036                 if( lgRelease )
00037                 {
00038                         if( CLD_PATCH > 0 )
00039                                 sprintf( chVersion, "%2.2i.%2.2i (patch level %d)", CLD_MAJOR, CLD_MINOR, CLD_PATCH );
00040                         else
00041                                 sprintf( chVersion, "%2.2i.%2.2i", CLD_MAJOR, CLD_MINOR );
00042                 }
00043                 else if( nBetaVer > 0 )
00044                 {
00045                         sprintf( chVersion, "%2.2i.%2.2i beta %ld (prerelease)", CLD_MAJOR, CLD_MINOR, nBetaVer );
00046                 }
00047                 else
00048                 {
00049                         sprintf( chVersion, "%2.2i.%2.2i.%2.2i", YEAR%100, MONTH+1, DAY );
00050                 }
00051 
00052                 sprintf( chDate, "%2.2i%3.3s%2.2i", YEAR%100, chMonth[MONTH], DAY );
00053 
00054                 // analyze the URL to determine where we live, the version number is derived from that
00055                 // the code below is based on the following naming scheme:
00056                 //
00057                 // /branches/c08_branch -- release branch, all bug fixes are submitted here 
00058                 //
00059                 // /tags/develop/c08.00_rc1 -- release candidates go here 
00060                 //
00061                 // /tags/release/c08.00 -- first official release
00062                 // /tags/release/c08.01 -- first bug-fix rollup, etc... 
00063                 //
00064                 // /tags/patch_versions/c08.00_pl00 -- identical to /tags/release/c08.00
00065                 // /tags/patch_versions/c08.00_pl01 -- first patch update, etc... 
00066 
00067                 vector<string> Part;
00068                 Split( Url, "/", Part, SPM_RELAX );
00069                 if( Part.size() >= 3 )
00070                 {
00071                         // the last two parts are "source" and "version.h $", we don't need them...
00072                         // the one before is the relevant identifier (e.g. "c08.01")
00073                         // for conciseness we will refer to it below as the "branch"
00074                         string Branch = Part[Part.size()-3];
00075 
00076                         bool lgReleaseTag = ( Url.find("/tags/release/") != string::npos );
00077                         bool lgPatchTag = ( Url.find("/tags/patch_versions/") != string::npos );
00078                         bool lgDevelopTag = ( Url.find("/tags/develop/") != string::npos );
00079                         // this expects a branch name like "c08_branch"
00080                         bool lgReleaseBranch = ( Url.find("/branches/") != string::npos &&
00081                                                  Branch.size() == 10 && Branch[0] == 'c' &&
00082                                                  Branch.find("_branch") != string::npos );
00083 
00084                         bool lgReleaseChk = ( lgReleaseTag || lgPatchTag );
00085 
00086                         long nBetaVerChk;
00087 
00088                         // determine if this is a beta version
00089                         string::size_type ptr;
00090                         if( lgDevelopTag && ( ptr = Branch.find( "_rc" ) ) != string::npos )
00091                                 // this expects a branch name like "c08.00_rc1"
00092                                 sscanf( Branch.substr( ptr+3 ).c_str(), "%ld", &nBetaVerChk );
00093                         else
00094                                 nBetaVerChk = 0;
00095 
00096                         int nMajorLevel=0, nMinorLevel=0, nPatchLevel=0;
00097 
00098                         if( lgReleaseBranch || lgReleaseChk || nBetaVerChk > 0 )
00099                         {
00100                                 // this expects a branch name starting with "c08"
00101                                 sscanf( Branch.substr(1,2).c_str(), "%d", &nMajorLevel );
00102                                 if( nMajorLevel != CLD_MAJOR )
00103                                         fprintf( ioQQQ, "PROBLEM - CLD_MAJOR mismatch, please check version.h\n" );
00104                         }
00105 
00106                         if( lgReleaseChk || nBetaVerChk > 0 )
00107                         {
00108                                 // this expects a branch name starting with "c08.01"
00109                                 sscanf( Branch.substr(4,2).c_str(), "%d", &nMinorLevel );
00110                                 if( nMinorLevel != CLD_MINOR )
00111                                         fprintf( ioQQQ, "PROBLEM - CLD_MINOR mismatch, please check version.h\n" );
00112                         }
00113                         
00114                         if( lgPatchTag )
00115                         {
00116                                 // this expects a branch name like "c08.01_pl02"
00117                                 sscanf( Branch.substr(9,2).c_str(), "%d", &nPatchLevel );
00118                                 if( nPatchLevel != CLD_PATCH )
00119                                         fprintf( ioQQQ, "PROBLEM - CLD_PATCH mismatch, please check version.h\n" );
00120                                 // c08.00_pl00 is identical to release c08.00, so pass it off as the latter...
00121                                 if( nPatchLevel == 0 )
00122                                         lgReleaseTag = true;
00123                         }
00124 
00125                         if( nBetaVerChk > 0 )
00126                         {
00127                                 if( nBetaVerChk != nBetaVer )
00128                                         fprintf( ioQQQ, "PROBLEM - nBetaVer mismatch, please check version.h\n" );
00129                         }
00130 
00131                         if( lgReleaseChk && !lgRelease )
00132                                 fprintf( ioQQQ, "PROBLEM - lgRelease setting wrong, please check version.h\n" );
00133                 }
00134 
00135                 char mode[6];
00136                 if( sizeof(long) == 4 )
00137                         strncpy( mode, "ILP32", 6 );
00138                 else if( sizeof(long) == 8 )
00139                         strncpy( mode, "LP64", 6 );
00140                 else
00141                         strncpy( mode, "?????", 6 );
00142 
00143                 /* now generate info on how we were compiled, including compiler version */
00144                 sprintf( chInfo,
00145                          "cdInit compiled on %s in OS %s using the %s %i compiler in %s mode.",
00146                          __DATE__, __OS, __COMP, __COMP_VER, mode );
00147 
00148                 chCitation = CITATION;
00149                 chCitationLatex = CITATION_LATEX;
00150                 chCitationShort = CITATION_SHORT;
00151         }
00152 public:
00154         char chDate[INPUT_LINE_LENGTH];
00155 
00157         char chVersion[INPUT_LINE_LENGTH];
00158 
00160         long int nBetaVer;
00161 
00163         bool lgRelease;
00164 
00167         char chInfo[INPUT_LINE_LENGTH];
00168 
00170         const char *chCitation;
00171 
00173         const char *chCitationShort;
00174 
00176         const char *chCitationLatex;
00177 };
00178 
00179 #endif /* _VERSION_H_ */

Generated on Mon Feb 16 12:01:28 2009 for cloudy by  doxygen 1.4.7