#!/bin/bash #Synchronize EnumToStringx.cpp and StringToEnumx.cpp and matlab Enums #Get all lines of EnumDefinitions2.h which hold Enum | remove all commas > put everything in file temp cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," -e "MaximumNumberOfDefinitionsEnum" | grep -v include | sed -e "s/,/ /g" | awk '{print $1}' > temp #Removed existing files rm $ISSM_DIR/src/c/shared/Enum/EnumToStringx.cpp rm $ISSM_DIR/src/c/shared/Enum/StringToEnumx.cpp #Get number of enums NUMENUMS=$(wc -l temp | awk '{printf("%s",$1);}'); #Deal with Analyses #Build EnumToAnalysis.cpp {{{ #Header cat < $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp /* * \file EnumToAnalysis.cpp * \brief: output class depending on enum * * WARNING: DO NOT MODIFY THIS FILE * this file has been automatically generated by Synchronize.sh * Please read README for more information */ #include "./analyses.h" #include "../shared/shared.h" Analysis* EnumToAnalysis(int analysis_enum){ switch(analysis_enum){ END #core cat temp | grep [a-zA-Z0-9]Analysis | \ grep -v DefaultAnalysis | grep -v FlaimAnalysis | grep -v SurfaceSlopeAnalysis | grep -v BedSlopeAnalysis | \ awk '{print "\t\t#ifdef _HAVE_"toupper(substr($1,1,length($1)-12))"_\n\t\t" "case " $1" : return new " substr($1,1,length($1)-4) "();\n\t\t#endif"}' \ >> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp #Footer cat <> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp default : _error_("enum provided not supported ("< $ISSM_DIR/m4/analyses.m4 dnl WARNING: DO NOT MODIFY THIS FILE dnl this file has been automatically generated by Synchronize.sh dnl Please read README for more information # AX_ANALYSES_SELECTION # ----------------- # Check for analyses compilation AC_DEFUN([AX_ANALYSES_SELECTION], [ END #core cat temp | grep [a-zA-Z0-9]Analysis | \ grep -v DefaultAnalysis | grep -v FlaimAnalysis | grep -v SurfaceSlopeAnalysis | grep -v BedSlopeAnalysis | \ sed -e "s/AnalysisEnum//g" | \ awk '{print "dnl with-" $1"{{{\n\ AC_ARG_WITH([" $1"],\n\ \tAS_HELP_STRING([--with-" $1" = YES], [compile with " $1" capabilities (default is yes)]),\n\ \t[" toupper($1)"=$withval],[" toupper($1)"=yes])\n\ AC_MSG_CHECKING(for " $1" capability compilation)\n\n\ HAVE_" toupper($1)"=no \n\ if test \"x$" toupper($1)"\" = \"xyes\"; then\n\ HAVE_" toupper($1)"=yes\n\ AC_DEFINE([_HAVE_" toupper($1)"_],[1],[with " $1" capability])\n\ fi\n\ AM_CONDITIONAL([" toupper($1)"], [test x$HAVE_" toupper($1)" = xyes])\n\ AC_MSG_RESULT($HAVE_" toupper($1)")\n\ dnl }}}"}' \ >> $ISSM_DIR/m4/analyses.m4 #Footer cat <> $ISSM_DIR/m4/analyses.m4 ]) END #}}} #Enum to String conversions #Build EnumToStringx.cpp {{{ #Header cat < $ISSM_DIR/src/c/shared/Enum/EnumToStringx.cpp /* * \file EnumToStringx.cpp: * \brief: output string associated with enum * * WARNING: DO NOT MODIFY THIS FILE * this file has been automatically generated by Synchronize.sh * Please read README for more information */ #include #include "./Enum.h" #include "../Exceptions/exceptions.h" #include "../MemOps/MemOps.h" const char* EnumToStringx(int en){ switch(en){ END #core cat temp | awk '{print "\t\t" "case " $1" : return \"" substr($1,1,length($1)-4) "\";"}' >> $ISSM_DIR/src/c/shared/Enum/EnumToStringx.cpp #Footer cat <> $ISSM_DIR/src/c/shared/Enum/EnumToStringx.cpp default : return "unknown"; } } void EnumToStringx(char** pstring,int enum_in){ char *string = NULL; int len = 0; len=strlen(EnumToStringx(enum_in)); string=xNew(len+1); memcpy(string,EnumToStringx(enum_in),(len+1)*sizeof(char)); /*Assign output pointer*/ *pstring=string; } END #}}} #Build StringToEnumx.cpp {{{ #Header cat < $ISSM_DIR/src/c/shared/Enum/StringToEnumx.cpp /* * \file StringToEnumx.cpp: * \brief: output enum associated with string * * WARNING: DO NOT MODIFY THIS FILE * this file has been automatically generated by Synchronize.sh * Please read README for more information */ #include #include "./Enum.h" #include "../Exceptions/exceptions.h" int StringToEnumx(const char* name,bool notfounderror){ int stage=1; END #core i1=1; i2=120; for (( i=1 ; i<=100 ; i++ )); do echo " if(stage==$i){" >> $ISSM_DIR//src/c/shared/Enum/StringToEnumx.cpp awk -v i1=$i1 -v i2=$i2 '{if(NR>=i1 && NR<=i2) print $0 }' temp | awk '{print "\t" ((NR==1)?" if":" else if") " (strcmp(name,\"" substr($1,1,length($1)-4) "\")==0) return " $1 ";"}' >> $ISSM_DIR//src/c/shared/Enum/StringToEnumx.cpp echo " else stage=$(($i+1));" >> $ISSM_DIR//src/c/shared/Enum/StringToEnumx.cpp echo " }" >> $ISSM_DIR//src/c/shared/Enum/StringToEnumx.cpp if [ $i2 -ge $NUMENUMS ]; then break; fi let i1=$i1+120 let i2=$i2+120 done #footer cat <> $ISSM_DIR/src/c/shared/Enum/StringToEnumx.cpp /*If we reach this point, the string provided has not been found*/ if(notfounderror) _error_("Enum " << name << " not found"); else return -1; } END #}}} #clean up{{{ rm temp #}}} #print info {{{ printf "\r " printf "\rdone!\n" #}}}