1 | /* Generate version strings. See gcov-io.h for |
2 | description of how the version string is generated. |
3 | Copyright (C) 2002-2023 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 (void) |
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 basever[] = BASEVER; |
38 | char *ptr = basever; |
39 | |
40 | major = strtoul (nptr: ptr, endptr: &ptr, base: 10); |
41 | |
42 | if (*ptr == '.') |
43 | minor = strtoul (nptr: ptr + 1, endptr: 0, base: 10); |
44 | |
45 | /* For releases the development phase is an empty string, for |
46 | prerelease versions on a release branch it is "prerelease". |
47 | Consider both equal as patch-level releases do not change |
48 | the GCOV version either. |
49 | On the trunk the development phase is "experimental". */ |
50 | phase = DEVPHASE[0]; |
51 | if (phase == '\0' |
52 | || strcmp (DEVPHASE, "prerelease" ) == 0) |
53 | phase = '*'; |
54 | |
55 | v[0] = (major / 10) + 'A'; |
56 | v[1] = (major % 10) + '0'; |
57 | v[2] = minor + '0'; |
58 | v[3] = phase; |
59 | |
60 | for (ix = 0; ix != 4; ix++) |
61 | version = (version << 8) | v[ix]; |
62 | |
63 | printf (format: "#ifndef VERSION_H\n" ); |
64 | printf (format: "#define VERSION_H\n\n" ); |
65 | printf (format: "/* Generated automatically by genversion. */\n" ); |
66 | printf (format: "\n" ); |
67 | printf (format: "#define GCC_major_version %lu\n\n" , major); |
68 | |
69 | printf (format: "/* The complete version string, assembled from several pieces.\n" |
70 | "BASEVER, DATESTAMP, DEVPHASE, and REVISION are defined by the\n" |
71 | "Makefile. */\n\n" ); |
72 | |
73 | printf ("#define version_string \"" BASEVER DATESTAMP DEVPHASE REVISION "\"\n" ); |
74 | printf ("#define pkgversion_string \"" PKGVERSION "\"\n\n" ); |
75 | |
76 | printf (format: "/* This is the location of the online document giving instructions for\n" |
77 | "reporting bugs. If you distribute a modified version of GCC,\n" |
78 | "please configure with --with-bugurl pointing to a document giving\n" |
79 | "instructions for reporting bugs to you, not us. (You are of course\n" |
80 | "welcome to forward us bugs reported to you, if you determine that\n" |
81 | "they are not bugs in your modifications.) */\n\n" ); |
82 | printf ("#define bug_report_url \"" BUGURL "\"\n\n" ); |
83 | |
84 | printf (format: "#define GCOV_VERSION ((gcov_unsigned_t)0x%08x) /* %.4s */\n" , |
85 | version, v); |
86 | printf (format: "\n#endif /* VERSION_H */\n" ); |
87 | |
88 | return 0; |
89 | } |
90 | |