summaryrefslogtreecommitdiff
path: root/boilerplate
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-08-06 09:41:15 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-08-06 10:11:32 +0100
commit51bd27afa147f78c8f4f3778cee725b6444e7eb0 (patch)
tree8adad0c6c053ce285ab29ec191f329535438e23c /boilerplate
parent5dd29d7e2da8684ea46c8f1baba42e6dc64f1351 (diff)
[boilerplate/test] Convert make-*-constructors to shell
Remove the intermediate C program that was a nuisance whilst cross-compiling and replace it with a simple shell script that is just a combination of cat + sed.
Diffstat (limited to 'boilerplate')
-rw-r--r--boilerplate/Makefile.am17
-rw-r--r--boilerplate/make-cairo-boilerplate-constructors.c163
-rw-r--r--boilerplate/make-cairo-boilerplate-constructors.sh24
3 files changed, 28 insertions, 176 deletions
diff --git a/boilerplate/Makefile.am b/boilerplate/Makefile.am
index c8b5d41b..cb92c2bc 100644
--- a/boilerplate/Makefile.am
+++ b/boilerplate/Makefile.am
@@ -48,21 +48,12 @@ endif
libcairoboilerplate_la_LIBADD += $(CAIROBOILERPLATE_LIBS)
-# we need to workaround the introduction of CC_FOR_BUILD with older builds
-make-cairo-boilerplate-constructors$(EXEEXT): make-cairo-boilerplate-constructors.c
- if test -n "$(CC_FOR_BUILD)"; then \
- $(CC_FOR_BUILD) $^ -o $@; \
- else \
- $(CC) $^ -o $@; \
- fi
-
-cairo-boilerplate-constructors.c: Makefile $(enabled_cairo_boilerplate_sources) make-cairo-boilerplate-constructors$(EXEEXT)
- echo '(cd $(srcdir) && $(top_builddir)/boilerplate/make-cairo-boilerplate-constructors$(EXEEXT) $(enabled_cairo_boilerplate_sources)) > $@'
- ./make-cairo-boilerplate-constructors$(EXEEXT) $(srcdir) $(enabled_cairo_boilerplate_sources) > $@
+cairo-boilerplate-constructors.c: Makefile $(enabled_cairo_boilerplate_sources) make-cairo-boilerplate-constructors.sh
+ (cd $(srcdir) && sh ./make-cairo-boilerplate-constructors.sh $(enabled_cairo_boilerplate_sources)) > $@
BUILT_SOURCES += cairo-boilerplate-constructors.c
-EXTRA_DIST += $(BUILT_SOURCES) make-cairo-boilerplate-constructors.c
-CLEANFILES += $(BUILT_SOURCES) make-cairo-boilerplate-constructors
+EXTRA_DIST += $(BUILT_SOURCES) make-cairo-boilerplate-constructors.sh
+CLEANFILES += $(BUILT_SOURCES)
test: check
diff --git a/boilerplate/make-cairo-boilerplate-constructors.c b/boilerplate/make-cairo-boilerplate-constructors.c
deleted file mode 100644
index b954492c..00000000
--- a/boilerplate/make-cairo-boilerplate-constructors.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright © 2009 Joonas Pihlaja
- * Copyright © 2009 Chris Wilson
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-/* Usage:
- * ./make-cairo-boilerplate-constructors [sources.c...] >cairo-boilerplate-constructors.c
- *
- * Parses invocations of the CAIRO_BOILERPLATE macro from the source files
- * given on the command line, gathers names of targets, and outputs a C
- * file with one function _cairo_boilerplate_register_targets() which
- * calls the functions _register_<target>() in reverse order.
- */
-
-/* Keep this file ANSI compliant without any special needs. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-#define NAME "make-cairo-boilerplate-constructors.c"
-
-static struct name {
- struct name *next;
- char name[1];
-} *head;
-
-static void *
-xmalloc (size_t n)
-{
- void *bytes = malloc(n);
- if (!bytes) {
- fprintf (stderr, "Out of memory\n");
- exit(2);
- }
- return bytes;
-}
-
-static void
-add_name (const char *name)
-{
- struct name *node;
- int len;
-
- len = strlen (name);
- node = xmalloc (sizeof (struct name) + len);
- memcpy (node->name, name, len + 1);
-
- node->next = head;
- head = node;
-}
-
-static int
-scan_file (const char *filename,
- FILE *fp)
-{
- int line_num = 0;
- char linebuf[1024];
- int fail = 0;
-
- while (fgets (linebuf, sizeof (linebuf)-1, fp)) {
- char *macro;
- char *name;
- size_t length;
-
- line_num++;
- linebuf[sizeof (linebuf)-1] = 0;
-
- macro = strstr (linebuf, "CAIRO_BOILERPLATE");
- if (!macro)
- continue;
- macro += strlen ("CAIRO_BOILERPLATE");
-
- length = strspn (macro, " (");
- if (length == 0)
- continue;
- name = macro + length;
-
- length = strspn (name,
- "_"
- "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789");
- name[length] = 0;
-
- if (length == 0) {
- fprintf (stderr, "%s:%d: CAIRO_BOILERPLATE invocation "
- "can't be parsed by " NAME"\n",
- filename, line_num);
- fail = 1;
- continue;
- }
-
- add_name (name);
- }
-
- return fail;
-}
-
-int
-main (int argc, char **argv)
-{
- char buf[PATH_MAX];
- int i;
- int fail = 0;
- struct name *node;
-
- for (i = 2; i < argc; i++) {
- FILE *fp;
-
- snprintf (buf, sizeof (buf), "%s/%s", argv[1], argv[i]);
-
- fp = fopen (buf, "r");
- if (fp != NULL) {
- fail |= scan_file (argv[i], fp);
- fclose (fp);
- } else
- fail = 1;
- }
- if (fail)
- exit(1);
-
- puts ("/* WARNING: Autogenerated file - see " NAME "! */");
- puts ("");
- puts ("#include \"cairo-boilerplate-private.h\"");
- puts ("");
-
- for (node = head; node; node = node->next) {
- printf ("extern void _register_%s (void);\n",
- node->name);
- }
- puts("");
-
- puts ("void _cairo_boilerplate_register_all (void);");
- puts("");
-
- puts ("void");
- puts ("_cairo_boilerplate_register_all (void)");
- puts ("{");
- for (node = head; node; node = node->next) {
- printf (" _register_%s ();\n", node->name);
- }
- puts ("}");
-
- return 0;
-}
diff --git a/boilerplate/make-cairo-boilerplate-constructors.sh b/boilerplate/make-cairo-boilerplate-constructors.sh
new file mode 100644
index 00000000..2c7fc85e
--- /dev/null
+++ b/boilerplate/make-cairo-boilerplate-constructors.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+cat <<HERE
+/* WARNING: Autogenerated file - see $0! */
+
+#include "cairo-boilerplate-private.h"
+
+void _cairo_boilerplate_register_all (void);
+
+HERE
+
+cat "$@" | sed '/^CAIRO_BOILERPLATE/!d; s/CAIRO_BOILERPLATE.*(\(.*\),.*/extern void _register_\1 (void);/'
+
+cat <<HERE
+
+void
+_cairo_boilerplate_register_all (void)
+{
+HERE
+
+cat "$@" | sed '/^CAIRO_BOILERPLATE/!d; s/CAIRO_BOILERPLATE.*(\(.*\),.*/ _register_\1 ();/'
+
+echo "}"
+