Home | History | Annotate | Download | only in nasm
      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