00001
00002
00003
00004 #include "cddefines.h"
00005 #include "date.h"
00006 #include "version.h"
00007
00008 static const int CLD_MAJOR = 13;
00009 static const int CLD_MINOR = 0;
00010 static const int CLD_PATCH = 0;
00011
00012 #ifdef SVN_REVISION
00013 static const char* svn_revision = SVN_REVISION;
00014 #else
00015 static const char* svn_revision = "rev_not_set";
00016 #endif
00017
00018 static const string Url = "$HeadURL: https://svn.nublado.org/cloudy/branches/c13_branch/source/version.cpp $";
00019
00020 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";
00021 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";
00022 static const char* CITATION_SHORT = "Ferland et al. (1998)";
00023
00024 t_version::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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 vector<string> Part;
00047 Split( Url, "/", Part, SPM_RELAX );
00048 if( Part.size() >= 3 )
00049 {
00050
00051
00052
00053 string Branch = Part[Part.size()-3];
00054
00055 bool lgReleaseTag = ( Url.find("/tags/release/") != string::npos );
00056 bool lgPatchTag = ( Url.find("/tags/patch_versions/") != string::npos );
00057 bool lgDevelopTag = ( Url.find("/tags/develop/") != string::npos );
00058
00059 lgReleaseBranch = ( Url.find("/branches/") != string::npos &&
00060 Branch.size() == 10 && Branch[0] == 'c' &&
00061 Branch.find("_branch") != string::npos );
00062
00063 lgRelease = ( lgReleaseTag || lgPatchTag );
00064
00065
00066 string::size_type ptr;
00067 if( lgDevelopTag && ( ptr = Branch.find( "_rc" ) ) != string::npos )
00068
00069 sscanf( Branch.substr( ptr+3 ).c_str(), "%ld", &nBetaVer );
00070 else
00071 nBetaVer = 0;
00072
00073 int nMajorLevel=0, nMinorLevel=0, nPatchLevel=0;
00074
00075 if( lgReleaseBranch || lgRelease || nBetaVer > 0 )
00076 {
00077
00078 sscanf( Branch.substr(1,2).c_str(), "%d", &nMajorLevel );
00079 if( nMajorLevel != CLD_MAJOR )
00080 fprintf( ioQQQ, "PROBLEM - CLD_MAJOR mismatch, please check version.h\n" );
00081 }
00082
00083 if( lgRelease || nBetaVer > 0 )
00084 {
00085
00086 sscanf( Branch.substr(4,2).c_str(), "%d", &nMinorLevel );
00087 if( nMinorLevel != CLD_MINOR )
00088 fprintf( ioQQQ, "PROBLEM - CLD_MINOR mismatch, please check version.h\n" );
00089 }
00090
00091 if( lgPatchTag )
00092 {
00093
00094 sscanf( Branch.substr(9,2).c_str(), "%d", &nPatchLevel );
00095 if( nPatchLevel != CLD_PATCH )
00096 fprintf( ioQQQ, "PROBLEM - CLD_PATCH mismatch, please check version.h\n" );
00097
00098 if( nPatchLevel == 0 )
00099 lgReleaseTag = true;
00100 }
00101
00102 string pps = ( isdigit(svn_revision[0]) ) ? "r" : "";
00103
00104 if( lgReleaseTag )
00105
00106 strncpy( chVersion, Branch.substr(1,5).c_str(), INPUT_LINE_LENGTH );
00107 else if( lgPatchTag )
00108
00109 sprintf( chVersion, "%s (patch level %d)", Branch.substr(1,5).c_str(), nPatchLevel );
00110 else if( nBetaVer > 0 )
00111
00112 sprintf( chVersion, "%s beta %ld (prerelease)", Branch.substr(1,5).c_str(), nBetaVer );
00113 else if( lgReleaseBranch )
00114
00115 sprintf( chVersion, "(%s, %s%s, prerelease)", Branch.c_str(), pps.c_str(), svn_revision );
00116 else
00117
00118 sprintf( chVersion, "(%s, %s%s, experimental)", Branch.c_str(), pps.c_str(), svn_revision );
00119 }
00120 else
00121 {
00122
00123
00124
00125 lgReleaseBranch = false;
00126
00127 lgRelease = false;
00128
00129
00130
00131 nBetaVer = 0;
00132
00133 if( lgRelease )
00134 {
00135 if( CLD_PATCH > 0 )
00136 sprintf( chVersion, "%2.2i.%2.2i (patch level %d)",
00137 CLD_MAJOR, CLD_MINOR, CLD_PATCH );
00138 else
00139 sprintf( chVersion, "%2.2i.%2.2i", CLD_MAJOR, CLD_MINOR );
00140 }
00141 else if( nBetaVer > 0 )
00142 {
00143 sprintf( chVersion, "%2.2i.%2.2i beta %ld (prerelease)",
00144 CLD_MAJOR, CLD_MINOR, nBetaVer );
00145 }
00146 else
00147 {
00148 sprintf( chVersion, "%2.2i.%2.2i.%2.2i", YEAR%100, MONTH+1, DAY );
00149 }
00150 }
00151
00152 sprintf( chDate, "%2.2i%3.3s%2.2i", YEAR%100, chMonth[MONTH], DAY );
00153
00154 char mode[8];
00155 if( sizeof(int) == 4 && sizeof(long) == 4 && sizeof(long*) == 4 )
00156 strncpy( mode, "ILP32", sizeof(mode) );
00157 else if( sizeof(int) == 4 && sizeof(long) == 4 && sizeof(long*) == 8 )
00158 strncpy( mode, "IL32P64", sizeof(mode) );
00159 else if( sizeof(int) == 4 && sizeof(long) == 8 && sizeof(long*) == 8 )
00160 strncpy( mode, "I32LP64", sizeof(mode) );
00161 else if( sizeof(int) == 8 && sizeof(long) == 8 && sizeof(long*) == 8 )
00162 strncpy( mode, "ILP64", sizeof(mode) );
00163 else
00164 strncpy( mode, "UNKN", sizeof(mode) );
00165
00166 bool flag[2];
00167 flag[0] = ( cpu.i().min_float()/2.f > 0.f );
00168 flag[1] = ( cpu.i().min_double()/2. > 0. );
00169
00170
00171 sprintf( chInfo,
00172 "Cloudy compiled on %s in OS %s using the %s %i compiler. Mode %s, "
00173 "denormalized float: %c double: %c.",
00174 __DATE__, __OS, __COMP, __COMP_VER, mode, TorF(flag[0]), TorF(flag[1]) );
00175
00176 chCitation = CITATION;
00177 chCitationLatex = CITATION_LATEX;
00178 chCitationShort = CITATION_SHORT;
00179 }