#!/usr/bin/env bash
if [ $# != 2 ]
then if [ $# != 3 ]
     then echo "USAGE: $(basename "$0") -[aAmM] <input_file> <output_file>";
          echo "  -a: apertium standard mode";
          echo "  -A: apertium optimized mode (default mode)";
          echo "  -m: matxin standard mode";
          echo "  -M: matxin optimized mode";
          exit 1;
     elif [ "$1" != "-a" ] && [ "$1" != "-A" ] && [ "$1" != "-m" ] && [ "$1" != "-M" ]
     then echo "USAGE: $(basename "$0") -[AaMm] <input file> <output_file>";
          echo "  -a: apertium standard mode";
          echo "  -A: apertium optimized mode (default mode)";
          echo "  -m: matxin standard mode";
          echo "  -M: matxin optimized mode";
          exit 1;
     fi
fi

FLEXOPTS=""
FILE1=$1;
FILE2=$2;

if [ $# = 2 ]
then if [ ! -e "$1" ]
     then echo "ERROR: '$1' file not found";
          exit 1;
     fi
fi

MODE="apertium" # default mode

if [ $# = 3 ]
then if [ ! -e "$2" ]
     then echo "ERROR: '$2' file not found";
          exit 1;
     fi

     if [ "$1" = "-a" ]
     then FLEXOPTS="";
          MODE="apertium";
     elif [ "$1" = "-m" ]
     then FLEXOPTS="";
          MODE="matxin";
     elif [ "$1" = "-M" ]
     then FLEXOPTS="-Cfer";
          MODE="matxin";
     fi

     FILE1=$2;
     FILE2=$3;
fi
xmllint --dtdvalid "/usr/share/apertium"/format.dtd --noout "$FILE1" && \
xsltproc --stringparam mode $MODE "/usr/share/apertium"/deformat.xsl "$FILE1" >/tmp/$$.deformat.l && \
/usr/bin/flex $FLEXOPTS -o/tmp/$$.lex.cc /tmp/$$.deformat.l && \
g++ -DGENFORMAT -Wall -Wextra -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/build/apertium/src=/usr/src/debug/apertium -flto=auto -I/usr/include/utf8cpp -std=c++23 -w  -I /usr/include -o "$FILE2" /tmp/$$.lex.cc 2>/dev/null && \
rm /tmp/$$.deformat.l /tmp/$$.lex.cc
