[ros-diffs] [hpoussin] 31764: Better arguments check Do not prepend '-' if build tag is empty Fix check to know if file needs to be rewritten Support a custom buildtag with -t

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Sun Jan 13 19:54:53 CET 2008


Author: hpoussin
Date: Sun Jan 13 21:54:52 2008
New Revision: 31764

URL: http://svn.reactos.org/svn/reactos?rev=31764&view=rev
Log:
Better arguments check
Do not prepend '-' if build tag is empty
Fix check to know if file needs to be rewritten
Support a custom buildtag with -t

Modified:
    trunk/reactos/tools/buildno/buildno.cpp

Modified: trunk/reactos/tools/buildno/buildno.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/buildno/buildno.cpp?rev=31764&r1=31763&r2=31764&view=diff
==============================================================================
--- trunk/reactos/tools/buildno/buildno.cpp (original)
+++ trunk/reactos/tools/buildno/buildno.cpp Sun Jan 13 21:54:52 2008
@@ -3,27 +3,25 @@
  *
  * Copyright (c) 1999,2000 Emanuele Aliberti
  * Copyright (c) 2006 Christoph von Wittich
+ * Copyright (c) 2008 Hervé Poussineau
  *
  * The build number is the day on which the build took
  * place, as YYYYMMDD
  *
- * The build number is stored in the file
- * <reactos/buildno.h> as a set of macros:
- *
- * KERNEL_VERSION_BUILD     base 10 number
- * KERNEL_VERSION_BUILD_STR C string
- * KERNEL_VERSION_BUILD_RC  RC string
+ * The build number is stored in the output file as a set of macros
  *
  * REVISIONS
  * ---------
+ * 2008-01-12 (hpoussin)
+ *  Add -t option to change the build tag
  * 2006-09-09 (cwittich)
- *  read binary entries files from SVN 1.4.x
+ *  Read binary entries files from SVN 1.4.x
  * 2000-01-22 (ea)
- * 	Fixed bugs: tm_year is (current_year - 1900),
- * 	tm_month is 0-11 not 1-12 and code ignored TZ.
+ *  Fixed bugs: tm_year is (current_year - 1900),
+ *  tm_month is 0-11 not 1-12 and code ignored TZ.
  * 2000-12-10 (ea)
- * 	Added -p option to make it simply print the
- * 	version number, but skip buildno.h generation.
+ *  Added -p option to make it simply print the
+ *  version number, but skip buildno.h generation.
  */
 #include <stdio.h>
 #include <stdlib.h>
@@ -36,8 +34,8 @@
 #define TRUE  1
 
 static char * argv0 = "";
-static char * filename = "";
-static char * kernel_version_build_type = 0;
+static char * filename = NULL;
+static char * build_tag = NULL;
 
 int count_wide_string( wchar_t *str )
 {
@@ -169,7 +167,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\\0\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\\0\"\n", build_tag);
 	s = s + sprintf (s, "#define KERNEL_RELEASE_STR\t\"%d.%d",
 	                 KERNEL_VERSION_MAJOR,
 	                 KERNEL_VERSION_MINOR);
@@ -177,7 +175,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\"\n", build_tag);
 	s = s + sprintf (s, "#define KERNEL_VERSION_RC\t\"%d.%d",
 	                 KERNEL_VERSION_MAJOR,
 	                 KERNEL_VERSION_MINOR);
@@ -185,7 +183,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\\0\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\\0\"\n", build_tag);
 	s = s + sprintf (s, "#define KERNEL_VERSION_STR\t\"%d.%d",
 	                 KERNEL_VERSION_MAJOR,
 	                 KERNEL_VERSION_MINOR);
@@ -193,7 +191,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\"\n", build_tag);
 	s = s + sprintf (s, "#define REACTOS_DLL_VERSION_MAJOR\t%d\n", dllversion);
 	s = s + sprintf (s, "#define REACTOS_DLL_RELEASE_RC\t\"%d.%d",
 	                 dllversion, KERNEL_VERSION_MINOR);
@@ -201,7 +199,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\\0\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\\0\"\n", build_tag);
 	s = s + sprintf (s, "#define REACTOS_DLL_RELEASE_STR\t\"%d.%d",
 	                 dllversion,
 	                 KERNEL_VERSION_MINOR);
@@ -209,7 +207,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\"\n", build_tag);
 	s = s + sprintf (s, "#define REACTOS_DLL_VERSION_RC\t\"%d.%d",
 	                 dllversion,
 	                 KERNEL_VERSION_MINOR);
@@ -217,7 +215,7 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\\0\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\\0\"\n", build_tag);
 	s = s + sprintf (s, "#define REACTOS_DLL_VERSION_STR\t\"%d.%d",
 	                 dllversion,
 	                 KERNEL_VERSION_MINOR);
@@ -225,10 +223,10 @@
 	{
 		s = s + sprintf (s, ".%d", KERNEL_VERSION_PATCH_LEVEL);
 	}
-	s = s + sprintf (s, "-%s\"\n", kernel_version_build_type);
+	s = s + sprintf (s, "%s\"\n", build_tag);
 	s = s + sprintf (s, "#endif\n/* EOF */\n");
 
-	h = fopen (filename, "wb");
+	h = fopen (filename, "rb");
 	if (h != NULL)
 	{
 		fseek(h, 0, SEEK_END);
@@ -269,9 +267,10 @@
 {
 	fprintf (
 		stderr,
-		"Usage: %s [-{p|q}] path-to-header\n\n"
+		"Usage: %s [-{p|q}] [-t tag] path-to-header\n\n"
 		"  -p  print version number and exit\n"
-		"  -q  run in quiet mode\n",
+		"  -q  run in quiet mode\n"
+		"  -t  specify a build tag\n",
 		argv0);
 	exit (EXIT_SUCCESS);
 }
@@ -292,40 +291,45 @@
 
 	argv0 = argv[0];
 
-	switch (argc)
-	{
-		case 1:
-			break;
-		case 2:
-		case 3:
-			if (argv[1][0] == '-')
+	/* Check arguments */
+	for (i = 1; i < argc; i++)
+	{
+		if (*argv[i] == '-')
+		{
+			switch (argv[i][1])
 			{
-				if (argv[1][1] == 'q')
-				{
+				case 'p':
+					print_only = TRUE;
+					break;
+				case 'q':
 					quiet = TRUE;
-				}
-				else  if (argv[1][1] == 'p')
-				{
-					print_only = TRUE;
-				}
-				else
-				{
-					usage ();
-				}
-				filename = argv[2];
+					break;
+				case 't':
+					if (i + 1 != argc)
+					{
+						build_tag = argv[++i];
+						break;
+					}
+					/* fall through */
+				default:
+					usage();
+					return EXIT_SUCCESS;
 			}
-			else if (argc == 2)
-			{
-				filename = argv[1];
-			}
-			else
-			{
-				usage ();
-			}
-			break;
-		default:
-			usage ();
-	}
+		}
+		else if (!filename)
+			filename = argv[i];
+		else
+		{
+			usage();
+			return EXIT_SUCCESS;
+		}
+	}
+	if (!filename)
+	{
+		usage();
+		return EXIT_SUCCESS;
+	}
+
 	/* Set TZ information. */
 	tzset ();
 	/* We are building TODAY! */
@@ -333,15 +337,6 @@
 	{
 		printf ( "\nReactOS Build Number Generator\n\n");
 	}
-
-	/* Convert kernel_version_build_type to a host-friendly string */
-	length = count_wide_string(KERNEL_VERSION_BUILD_TYPE);
-	kernel_version_build_type = (char *)malloc(length+1);
-	for( i = 0; KERNEL_VERSION_BUILD_TYPE[i]; i++ )
-	{
-		kernel_version_build_type[i] = KERNEL_VERSION_BUILD_TYPE[i];
-	}
-	kernel_version_build_type[i] = 0;
 
 	time (& t1); /* current build time */
 	t1_tm = gmtime (& t1);
@@ -355,10 +350,36 @@
 			(t1_tm->tm_mon + 1),
 			t1_tm->tm_mday);
 	}
-	/*
-	 * Compute build number.
-	 */
+
+	/* Compute build number. */
 	build = t1_tm->tm_year * 10000 + (t1_tm->tm_mon + 1) * 100 + t1_tm->tm_mday;
+
+	if (!build_tag)
+	{
+		/* Create default build tag */
+		length = count_wide_string(KERNEL_VERSION_BUILD_TYPE);
+		build_tag = (char *)malloc(length+2);
+		if (length > 0)
+		{
+			build_tag[0] = '-';
+			for (i = 0; KERNEL_VERSION_BUILD_TYPE[i]; i++)
+			{
+				build_tag[i + 1] = KERNEL_VERSION_BUILD_TYPE[i];
+			}
+			build_tag[i+1] = 0;
+		}
+		else
+			build_tag[0] = 0;
+	}
+	else if (*build_tag)
+	{
+		/* Prepend '-' */
+		length = strlen(build_tag);
+		char *new_build_tag = (char *)malloc(length + 2);
+		strcpy(new_build_tag, "-");
+		strcat(new_build_tag, build_tag);
+		build_tag = new_build_tag;
+	}
 
 	sprintf(buildstr, "%d-r%s", build, GetRev());
 
@@ -372,7 +393,7 @@
 		{
 			printf(".%d", KERNEL_VERSION_PATCH_LEVEL);
 		}
-		printf("-%s (Build %s)\n\n", kernel_version_build_type, buildstr);
+		printf("%s (Build %s)\n\n", build_tag, buildstr);
 	}
 	/* (Over)write the include file, unless the user switched on -p. */
 	if (! print_only)
@@ -384,8 +405,6 @@
 		printf ("%s: no code generated", argv [0]);
 	}
 
-	free(kernel_version_build_type);
-
 	return EXIT_SUCCESS;
 }
 




More information about the Ros-diffs mailing list