1 /* Generate gcov version string from version.c. See gcov-io.h for 2 description of how the version string is generated. 3 Copyright (C) 2002, 2003, 2005, 2007, 2010 Free Software Foundation, Inc. 4 Contributed by Nathan Sidwell <nathan@codesourcery.com> 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 3, or (at your option) any later 11 version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING3. If not see 20 <http://www.gnu.org/licenses/>. */ 21 22 #include "bconfig.h" 23 #include "system.h" 24 25 /* Command line arguments are the base GCC version and the development 26 phase (the latter may be an empty string). */ 27 28 int 29 main (int argc, char **argv) 30 { 31 unsigned int version = 0; 32 unsigned char v[4]; 33 unsigned int ix; 34 unsigned long major; 35 unsigned long minor = 0; 36 char phase = 0; 37 char *ptr; 38 39 if (argc != 3) 40 { 41 fprintf (stderr, "usage: %s 'version' 'phase'\n", argv[0]); 42 return 1; 43 } 44 45 ptr = argv[1]; 46 major = strtoul (ptr, &ptr, 10); 47 48 if (*ptr == '.') 49 minor = strtoul (ptr + 1, 0, 10); 50 51 /* For releases the development phase is an empty string, for 52 prerelease versions on a release branch it is "prerelease". 53 Consider both equal as patch-level releases do not change 54 the GCOV version either. 55 On the trunk the development phase is "experimental". */ 56 phase = argv[2][0]; 57 if (phase == '\0' 58 || strcmp (argv[2], "prerelease") == 0) 59 phase = '*'; 60 61 v[0] = (major < 10 ? '0' : 'A' - 10) + major; 62 v[1] = (minor / 10) + '0'; 63 v[2] = (minor % 10) + '0'; 64 v[3] = phase; 65 66 for (ix = 0; ix != 4; ix++) 67 version = (version << 8) | v[ix]; 68 69 printf ("/* Generated automatically by the program `%s'\n", argv[0]); 70 printf (" from `%s (%lu %lu) and %s (%c)'. */\n", 71 argv[1], major, minor, argv[2], phase); 72 printf ("\n"); 73 printf ("#define GCOV_VERSION ((gcov_unsigned_t)0x%08x) /* %.4s */\n", 74 version, v); 75 76 return 0; 77 } 78