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
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
--- /dev/null
+/* $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;
+}