]> granicus.if.org Git - yasm/commitdiff
Implement better versioning. From now on, trunk's version will be the
authorPeter Johnson <peter@tortall.net>
Wed, 5 Apr 2006 07:14:41 +0000 (07:14 -0000)
committerPeter Johnson <peter@tortall.net>
Wed, 5 Apr 2006 07:14:41 +0000 (07:14 -0000)
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

configure.ac
modules/preprocs/nasm/Makefile.inc
modules/preprocs/nasm/genversion.c [new file with mode: 0644]

index 387384fd8e4e36aebe3abef448ad636a83c7f038..70ef04b6aafc4e3e60ec306c12cb2c018567ce6e 100644 (file)
@@ -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
 
 #
index 07b957f43be7c980fd54b9d1930c06ca29f28168..a91eb91419048219c50de27d8280c748a1be4ff9 100644 (file)
@@ -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 (file)
index 0000000..cd6493f
--- /dev/null
@@ -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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+    FILE *out;
+    char *str, *tok, *strp;
+    int major, minor, subminor;
+
+    if (argc != 2) {
+       fprintf(stderr, "Usage: %s <outfile>\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;
+}