From 2e25940669aef357f1aa3017775268f53a984093 Mon Sep 17 00:00:00 2001 From: Cedric Bastoul Date: Tue, 31 May 2011 12:54:58 +0200 Subject: [PATCH] Generate extension.c with a script --- configure.in | 5 + source/{extension.c => extension.c.in} | 87 ++--------------- source/extension.sh | 174 +++++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+), 80 deletions(-) rename source/{extension.c => extension.c.in} (87%) create mode 100755 source/extension.sh diff --git a/configure.in b/configure.in index 1073144..48af8fc 100644 --- a/configure.in +++ b/configure.in @@ -93,6 +93,8 @@ AC_PROG_CC AC_PROG_LN_S AC_PROG_MAKE_SET AC_CHECK_PROG(CD, cd) +AC_CHECK_PROG(TR, tr) +AC_CHECK_PROG(SED, sed, sed) AC_PROG_LIBTOOL AC_CHECK_PROGS(DOXYGEN,doxygen,doxygen) @@ -252,6 +254,9 @@ AC_CONFIG_FILES([ AC_OUTPUT +echo -n "Generating the source/extension.c... " +./source/extension.sh +echo "OK" echo " /*-----------------------------------------------*" echo " * OpenScop Library configuration is OK *" diff --git a/source/extension.c b/source/extension.c.in similarity index 87% rename from source/extension.c rename to source/extension.c.in index 92a8360..aae83e3 100644 --- a/source/extension.c +++ b/source/extension.c.in @@ -132,17 +132,7 @@ openscop_extension_print_structure(FILE * file, for (j = 0; j < level; j++) fprintf(file, "|\t"); switch (extension->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - fprintf(file, "|\ttype = OPENSCOP_EXTENSION_COMMENT\n"); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - fprintf(file, "|\ttype = OPENSCOP_EXTENSION_ARRAYS\n"); - break; - } + { @PRINT_STRUCTURE1@ default: { fprintf(file, "|\ttype = unsupported (%d)\n", extension->type); @@ -155,23 +145,7 @@ openscop_extension_print_structure(FILE * file, fprintf(file, "\n"); switch (extension->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - openscop_comment_print_structure( - file, - (openscop_comment_p)extension->extension, - level + 1); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - openscop_arrays_print_structure( - file, - (openscop_arrays_p)extension->extension, - level + 1); - break; - } + { @PRINT_STRUCTURE2@ default: { // A blank line. @@ -228,19 +202,7 @@ openscop_extension_print_openscop(FILE * file, openscop_extension_p extension) { ignored = 0; switch (extension->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - string = openscop_comment_print_openscop( - (openscop_comment_p)extension->extension); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - string = openscop_arrays_print_openscop( - (openscop_arrays_p)extension->extension); - break; - } + { @PRINT_OPENSCOP@ default: { ignored = 1; @@ -281,12 +243,7 @@ openscop_extension_read(FILE * file) void * x; extension_string = openscop_util_read_tail(file); - - x = (void *)openscop_comment_read(extension_string); - openscop_extension_add(&extension, OPENSCOP_EXTENSION_COMMENT, x); - - x = (void *)openscop_arrays_read(extension_string); - openscop_extension_add(&extension, OPENSCOP_EXTENSION_ARRAYS, x); + @READ@ free(extension_string); return extension; @@ -366,17 +323,7 @@ openscop_extension_free(openscop_extension_p extension) { next = extension->next; switch (extension->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - openscop_comment_free(extension->extension); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - openscop_arrays_free(extension->extension); - break; - } + { @FREE@ default: { fprintf(stderr, @@ -412,17 +359,7 @@ openscop_extension_copy(openscop_extension_p extension) while (extension != NULL) { switch (extension->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - x = (void *)openscop_comment_copy(extension->extension); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - x = (void *)openscop_arrays_copy(extension->extension); - break; - } + { @COPY@ default: { fprintf(stderr, @@ -495,17 +432,7 @@ openscop_extension_equal(openscop_extension_p x1, openscop_extension_p x2) if (x1->type == x2->type) { switch (x1->type) - { - case OPENSCOP_EXTENSION_COMMENT: - { - equal = openscop_comment_equal(x1->extension, x2->extension); - break; - } - case OPENSCOP_EXTENSION_ARRAYS: - { - equal = openscop_arrays_equal(x1->extension, x2->extension); - break; - } + { @EQUAL@ default: { fprintf(stderr, diff --git a/source/extension.sh b/source/extension.sh new file mode 100755 index 0000000..16f56ad --- /dev/null +++ b/source/extension.sh @@ -0,0 +1,174 @@ +# +# /*+------------------------------------------------------------------** +# ** OpenScop Library ** +# **------------------------------------------------------------------** +# ** extension.sh ** +# **------------------------------------------------------------------** +# ** First version: 28/05/2011 ** +# **------------------------------------------------------------------** +# +# +# *************************************************************************** +# * OpenScop: Structures and formats for polyhedral tools to talk together * +# *************************************************************************** +# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * +# * / / / // // // // / / / // // / / // / /|,_, * +# * / / / // // // // / / / // // / / // / / / /\ * +# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * +# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * +# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * +# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * +# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * +# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * +# * | I | | | | e | | | | | | | | | | | | | \ \ \ * +# * | T | | | | | | | | | | | | | | | | | \ \ \ * +# * | E | | | | | | | | | | | | | | | | | \ \ \ * +# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * +# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * +# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * +# * * +# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * +# * * +# * (3-clause BSD license) * +# * 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. * +# * 3. The name of the author may not be used to endorse or promote * +# * products derived from this software without specific prior written * +# * permission. * +# * * +# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. * +# * * +# * OpenScop Library, a library to manipulate OpenScop formats and data * +# * structures. Written by: * +# * Cedric Bastoul and * +# * Louis-Noel Pouchet * +# * * +# ***************************************************************************/ + +EXTENSIONS_DIR='./source/extensions' +EXTENSIONS_IN='./source/extension.c.in' +EXTENSIONS_TMP='./extension.tmp' +EXTENSIONS_OUT='./source/extension.c' + +# *************************************************************************** + +TEMPLATE_STRING[0]= +TEMPLATE_SUBSTITUTION[0]='@PRINT_STRUCTURE1@' +TEMPLATE[0]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + fprintf(file, "|\\\\ttype = OPENSCOP_EXTENSION_TEMPLATE\\\\n");\ + break;\ + }' + +# *************************************************************************** + +TEMPLATE_STRING[1]= +TEMPLATE_SUBSTITUTION[1]='@PRINT_STRUCTURE2@' +TEMPLATE[1]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + openscop_template_print_structure(\ + file,\ + (openscop_template_p)extension->extension,\ + level + 1);\ + break;\ + }' + +# *************************************************************************** + +TEMPLATE_STRING[2]= +TEMPLATE_SUBSTITUTION[2]='@PRINT_OPENSCOP@' +TEMPLATE[2]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + string = openscop_template_print_openscop(\ + (openscop_template_p)extension->extension);\ + break;\ + }' + +# *************************************************************************** + +TEMPLATE_STRING[3]= +TEMPLATE_SUBSTITUTION[3]='@READ@' +TEMPLATE[3]='\ + x = (void *)openscop_template_read(extension_string);\ + openscop_extension_add(\&extension, OPENSCOP_EXTENSION_TEMPLATE, x);' + +# *************************************************************************** + +TEMPLATE_STRING[4]= +TEMPLATE_SUBSTITUTION[4]='@FREE@' +TEMPLATE[4]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + openscop_template_free(extension->extension);\ + break;\ + }' + +# *************************************************************************** + +TEMPLATE_STRING[5]= +TEMPLATE_SUBSTITUTION[5]='@COPY@' +TEMPLATE[5]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + x = (void *)openscop_template_copy(extension->extension);\ + break;\ + }' + +# *************************************************************************** + +TEMPLATE_STRING[6]= +TEMPLATE_SUBSTITUTION[6]='@EQUAL@' +TEMPLATE[6]='\ + case OPENSCOP_EXTENSION_TEMPLATE:\ + {\ + equal = openscop_template_equal(x1->extension, x2->extension);\ + break;\ + }' + +# *************************************************************************** + +# For each file in the extension directory. +for i in ${EXTENSIONS_DIR}/*.c; +do + # Get the extension name, lower case and upper case. + EXTENSION_LO=`basename ${i%.c}` + EXTENSION_UP=`echo ${EXTENSION_LO} | tr '[a-z]' '[A-Z]'` + + # Replace the extension name in the templates. + for (( i = 0 ; i < ${#TEMPLATE[@]} ; i++ )) + do + TEMP1=`echo "${TEMPLATE[$i]}" | sed "s/TEMPLATE/${EXTENSION_UP}/g"` + TEMP2=`echo "${TEMP1}" | sed "s/template/${EXTENSION_LO}/g"` + TEMPLATE_STRING[$i]="${TEMPLATE_STRING[$i]}""${TEMP2}" + done +done + +# Substitute the generated code parts in the source. +cp ${EXTENSIONS_IN} ${EXTENSIONS_TMP} +for (( i = 0 ; i < ${#TEMPLATE[@]} ; i++ )) +do + sed "s/${TEMPLATE_SUBSTITUTION[$i]}/${TEMPLATE_STRING[$i]}/g" \ + <${EXTENSIONS_TMP} >${EXTENSIONS_OUT} + mv ${EXTENSIONS_OUT} ${EXTENSIONS_TMP} +done +mv ${EXTENSIONS_TMP} ${EXTENSIONS_OUT} -- 2.11.4.GIT