1 /* 2 * 3 * Generate version.mac 4 * 5 * Copyright (C) 2006-2007 Peter Johnson 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 #include "config.h" /* for PACKAGE_VERSION */ 29 30 #include <stdio.h> 31 #include <stdlib.h> 32 #include <string.h> 33 #include <ctype.h> 34 35 int 36 main(int argc, char *argv[]) 37 { 38 FILE *out; 39 int major, minor, subminor, patchlevel, matched; 40 41 if (argc != 2) { 42 fprintf(stderr, "Usage: %s <outfile>\n", argv[0]); 43 return EXIT_FAILURE; 44 } 45 46 matched = sscanf(PACKAGE_VERSION, "%d.%d.%d.%d", &major, &minor, &subminor, 47 &patchlevel); 48 49 if (matched == 3) 50 patchlevel = 0; 51 else if (matched != 4) { 52 fprintf(stderr, "Version tokenizing error\n"); 53 return EXIT_FAILURE; 54 } 55 56 out = fopen(argv[1], "wt"); 57 58 if (!out) { 59 fprintf(stderr, "Could not open `%s'.\n", argv[1]); 60 return EXIT_FAILURE; 61 } 62 63 fprintf(out, "; This file auto-generated by genversion.c" 64 " - don't edit it\n"); 65 66 fprintf(out, "%%define __YASM_MAJOR__ %d\n", major); 67 fprintf(out, "%%define __YASM_MINOR__ %d\n", minor); 68 fprintf(out, "%%define __YASM_SUBMINOR__ %d\n", subminor); 69 fprintf(out, "%%define __YASM_BUILD__ %d\n", patchlevel); 70 fprintf(out, "%%define __YASM_PATCHLEVEL__ %d\n", patchlevel); 71 72 /* Version id (hex number) */ 73 fprintf(out, "%%define __YASM_VERSION_ID__ 0%02x%02x%02x%02xh\n", major, 74 minor, subminor, patchlevel); 75 76 /* Version string */ 77 fprintf(out, "%%define __YASM_VER__ \"%s\"\n", PACKAGE_VERSION); 78 fclose(out); 79 80 return EXIT_SUCCESS; 81 } 82