From: Peter Johnson Date: Wed, 5 Apr 2006 07:14:41 +0000 (-0000) Subject: Implement better versioning. From now on, trunk's version will be the X-Git-Tag: v0.5.0rc2~2^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f9690850fcf52ccbe89d2ccdf8dccd549b109149;p=yasm Implement better versioning. From now on, trunk's version will be the current major and minor version but with subminor version = 99. All releases and snapshots will have a build version of the current svn version. Version information is put into predefined macros in the NASM preproc: __YASM_MAJOR__, __YASM_MINOR__, __YASM_SUBMINOR__, __YASM_BUILD__, __YASM_VERSION_ID__, __YASM_VER__. __YASM_VER__ does not have the build version as part of the string, and __YASM_VERSION_ID__ does not incorporate the build version. If the build version is "HEAD" (or other non-numeric), __YASM_BUILD__ is set to 0. * configure.ac: Set version to 0.4.99.HEAD for trunk. * genversion.c: Generate version.mac for the NASM preproc version macros. * Makefile.inc: Hook into build. svn path=/trunk/yasm/; revision=1464 --- diff --git a/configure.ac b/configure.ac index 387384fd..70ef04b6 100644 --- a/configure.ac +++ b/configure.ac @@ -5,12 +5,12 @@ # autoconf setup # AC_PREREQ(2.53) -AC_INIT([yasm], [HEAD], [bug-yasm@tortall.net]) +AC_INIT([yasm], [0.4.99.HEAD], [bug-yasm@tortall.net]) #AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER([config.h]) -AM_INIT_AUTOMAKE(yasm, [HEAD]) +AM_INIT_AUTOMAKE(yasm, [0.4.99.HEAD]) AM_MAINTAINER_MODE # diff --git a/modules/preprocs/nasm/Makefile.inc b/modules/preprocs/nasm/Makefile.inc index 07b957f4..a91eb914 100644 --- a/modules/preprocs/nasm/Makefile.inc +++ b/modules/preprocs/nasm/Makefile.inc @@ -11,10 +11,10 @@ libyasm_a_SOURCES += modules/preprocs/nasm/nasm-eval.c YASM_MODULES += preproc_nasm -$(top_modulesdir)/src/preprocs/nasm/nasm-pp.c: nasm-macros.c +$(top_srcdir)/src/preprocs/nasm/nasm-pp.c: nasm-macros.c -nasm-macros.c: $(top_srcdir)/modules/preprocs/nasm/standard.mac genmacro$(EXEEXT) - $(top_builddir)/genmacro$(EXEEXT) $(top_srcdir)/modules/preprocs/nasm/standard.mac +nasm-macros.c: $(top_srcdir)/modules/preprocs/nasm/standard.mac version.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $(top_srcdir)/modules/preprocs/nasm/standard.mac version.mac BUILT_SOURCES += nasm-macros.c CLEANFILES += nasm-macros.c @@ -29,6 +29,22 @@ genmacro_LINK = $(CCLD_FOR_BUILD) -o $@ genmacro.$(OBJEXT): modules/preprocs/nasm/genmacro.c $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f modules/preprocs/nasm/genmacro.c || echo '$(srcdir)/'`modules/preprocs/nasm/genmacro.c +version.mac: genversion$(EXEEXT) + $(top_builddir)/genversion$(EXEEXT) $@ + +BUILT_SOURCES += version.mac +CLEANFILES += version.mac + +noinst_PROGRAMS += genversion + +genversion_SOURCES = +EXTRA_DIST += modules/preprocs/nasm/genversion.c +genversion_LDADD = genversion.$(OBJEXT) +genversion_LINK = $(CCLD_FOR_BUILD) -o $@ + +genversion.$(OBJEXT): modules/preprocs/nasm/genversion.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f modules/preprocs/nasm/genversion.c || echo '$(srcdir)/'`modules/preprocs/nasm/genversion.c + EXTRA_DIST += modules/preprocs/nasm/standard.mac EXTRA_DIST += modules/preprocs/nasm/tests/Makefile.inc diff --git a/modules/preprocs/nasm/genversion.c b/modules/preprocs/nasm/genversion.c new file mode 100644 index 00000000..cd6493f2 --- /dev/null +++ b/modules/preprocs/nasm/genversion.c @@ -0,0 +1,120 @@ +/* $Id$ + * + * Generate version.mac + * + * Copyright (C) 2006 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "config.h" /* for PACKAGE_VERSION */ + +#include +#include +#include + +int +main(int argc, char *argv[]) +{ + FILE *out; + char *str, *tok, *strp; + int major, minor, subminor; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + out = fopen(argv[1], "wt"); + + if (!out) { + fprintf(stderr, "Could not open `%s'.\n", argv[1]); + return EXIT_FAILURE; + } + + str = malloc(strlen(PACKAGE_VERSION)+1); + strcpy(str, PACKAGE_VERSION); + + fprintf(out, "; This file auto-generated by genversion.c" + " - don't edit it\n"); + + /* Major */ + tok = strtok(str, "."); + if (!tok) { + fprintf(stderr, "Version tokenizing error\n"); + fclose(out); + remove(argv[1]); + return EXIT_FAILURE; + } + major = atoi(tok); + + /* Minor */ + tok = strtok(NULL, "."); + if (!tok) { + fprintf(stderr, "Version tokenizing error\n"); + fclose(out); + remove(argv[1]); + return EXIT_FAILURE; + } + minor = atoi(tok); + + /* Subminor */ + tok = strtok(NULL, "."); + if (!tok) { + fprintf(stderr, "Version tokenizing error\n"); + fclose(out); + remove(argv[1]); + return EXIT_FAILURE; + } + subminor = atoi(tok); + + /* Build */ + tok = strtok(NULL, "."); + if (!tok) { + fprintf(stderr, "Version tokenizing error\n"); + fclose(out); + remove(argv[1]); + return EXIT_FAILURE; + } + + fprintf(out, "%%define __YASM_MAJOR__ %d\n", major); + fprintf(out, "%%define __YASM_MINOR__ %d\n", minor); + fprintf(out, "%%define __YASM_SUBMINOR__ %d\n", subminor); + if (!isdigit(tok[0])) + fprintf(out, "%%define __YASM_BUILD__ 0\n"); + else + fprintf(out, "%%define __YASM_BUILD__ %d\n", atoi(tok)); + + /* Version id (hex number) */ + fprintf(out, "%%define __YASM_VERSION_ID__ 0%02x%02x%02x00h\n", major, + minor, subminor); + + /* Version string - version sans build */ + strcpy(str, PACKAGE_VERSION); + strp = strrchr(str, '.'); + *strp = '\0'; + fprintf(out, "%%define __YASM_VER__ \"%s\"\n", str); + fclose(out); + + free(str); + + return EXIT_SUCCESS; +}