Include svn revision in build string Modified: trunk/reactos/tools/buildno.c _____
Modified: trunk/reactos/tools/buildno.c --- trunk/reactos/tools/buildno.c 2005-02-18 21:20:01 UTC (rev 13637) +++ trunk/reactos/tools/buildno.c 2005-02-18 22:46:49 UTC (rev 13638) @@ -53,28 +53,8 @@
} #endif
- -int -elapsed_days ( - time_t t_today, - time_t t_release_day - ) -{ - double seconds = difftime (t_today, t_release_day); - double days = seconds / (double) 86400.0; - char buf [32]; - char * dot = buf; - - sprintf (buf, "%f", days ); - - while ( *dot && *dot != '.') ++dot; - *dot = '\0'; - - return atol (buf); -} - void -write_h (int build) +write_h (int build, char *buildstr) { FILE *h = NULL; char* s; @@ -90,8 +70,8 @@ s = s + sprintf (s, "#define _INC_REACTOS_BUILDNO\n" );
s = s + sprintf (s, "#define KERNEL_VERSION_BUILD\t%d\n", build); - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_STR\t"%d"\n", build); - s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_RC\t"%d\0"\n", build); + s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_STR\t"%s"\n", buildstr); + s = s + sprintf (s, "#define KERNEL_VERSION_BUILD_RC\t"%s\0"\n", buildstr); s = s + sprintf (s, "#define KERNEL_RELEASE_RC\t"%d.%d", KERNEL_VERSION_MAJOR, KERNEL_VERSION_MINOR); if (0 != KERNEL_VERSION_PATCH_LEVEL) @@ -191,6 +171,48 @@ fclose (h); }
+char * +GetRev(void) +{ + static char Unknown[] = "UNKNOWN"; + static char Rev[10]; /* 999999999 revisions should be enough for everyone... */ + FILE *SvnCmd; + char Line[256]; + char *p; + + SvnCmd = popen("svn info", "r"); + if (NULL == SvnCmd) + { + fprintf(stderr, "Failed to run "svn info" command\n"); + return Unknown; + } + while (! feof(SvnCmd) && ! ferror(SvnCmd)) + { + if (NULL == fgets(Line, sizeof(Line), SvnCmd)) + { + break; + } + if (0 == strncmp(Line, "Revision: ", 10)) + { + pclose(SvnCmd); + p = Line + 10; + if (sizeof(Rev) < strlen(p)) + { + fprintf(stderr, "Weird SVN revision number %s", p); + return Unknown; + } + strncpy(Rev, p, strlen(p) - 1); + Rev[strlen(p) - 1] = '\0'; + return Rev; + } + } + + pclose(SvnCmd); + + return Unknown; +} + + void usage (void) { @@ -210,6 +232,7 @@ int quiet = FALSE;
int build = 0; + char buildstr[64];
time_t t1 = 0; struct tm * t1_tm = NULL; @@ -251,7 +274,7 @@ /* * We are building TODAY! */ - if (FALSE == quiet) + if (! quiet) { printf ( "\nReactOS Build Number Generator\n\n"); } @@ -266,7 +289,7 @@ #ifdef DBG tm_dump ("t1", t1_tm); #endif - if (FALSE == quiet) + if (! quiet) { printf ( "Current date: %4d-%02d-%02d\n\n", @@ -280,7 +303,9 @@ */ build = t1_tm->tm_year * 10000 + (t1_tm->tm_mon + 1) * 100 + t1_tm->tm_mday;
- if (FALSE == quiet) + sprintf(buildstr, "%d-r%s", build, GetRev()); + + if (! quiet) { printf ( "ROS Version : %d.%d", @@ -291,15 +316,15 @@ { printf(".%d", KERNEL_VERSION_PATCH_LEVEL); } - printf("-%S (Build %d)\n\n", KERNEL_VERSION_BUILD_TYPE, build); + printf("-%S (Build %s)\n\n", KERNEL_VERSION_BUILD_TYPE, buildstr); } /* * (Over)write the include file, unless * the user switched on -p. */ - if (FALSE == print_only) + if (! print_only) { - write_h (build); + write_h (build, buildstr); } else {