[Forensics-changes] [yara] 03/04: Instead of regenerating grammar files, remove them before build

Hilko Bengen bengen at moszumanska.debian.org
Sat Jul 1 10:23:12 UTC 2017


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch master
in repository yara.

commit bdde1425648b3e51e7b490aa17c87d73a614a179
Author: Hilko Bengen <bengen at debian.org>
Date:   Sat Jul 1 00:40:11 2017 +0200

    Instead of regenerating grammar files, remove them  before build
---
 debian/control                                     |    1 +
 ...01-Regenerate-re_lexer.c-using-flex-2.6.1.patch | 2700 --------------------
 debian/patches/series                              |    1 -
 debian/rules                                       |    7 +
 4 files changed, 8 insertions(+), 2701 deletions(-)

diff --git a/debian/control b/debian/control
index 295a708..77ce95d 100644
--- a/debian/control
+++ b/debian/control
@@ -5,6 +5,7 @@ Maintainer: Debian Forensics <forensics-devel at lists.alioth.debian.org>
 Uploaders: Hilko Bengen <bengen at debian.org>
 Build-Depends: debhelper (>= 9), dh-autoreconf,
                python-sphinx | python3-sphinx,
+               flex, bison,
                libjansson-dev,
                libmagic-dev,
                libssl-dev,
diff --git a/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch b/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
deleted file mode 100644
index 9dad221..0000000
--- a/debian/patches/0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
+++ /dev/null
@@ -1,2700 +0,0 @@
-From: Hilko Bengen <bengen at debian.org>
-Date: Fri, 30 Jun 2017 23:58:15 +0200
-Subject: Regenerate re_lexer.c using flex 2.6.1
-
----
- libyara/re_lexer.c | 2685 ----------------------------------------------------
- 1 file changed, 2685 deletions(-)
- delete mode 100644 libyara/re_lexer.c
-
-diff --git a/libyara/re_lexer.c b/libyara/re_lexer.c
-deleted file mode 100644
-index b223c44..0000000
---- a/libyara/re_lexer.c
-+++ /dev/null
-@@ -1,2685 +0,0 @@
--#line 2 "re_lexer.c"
--
--#line 4 "re_lexer.c"
--
--#define  YY_INT_ALIGNED short int
--
--/* A lexical scanner generated by flex */
--
--#define FLEX_SCANNER
--#define YY_FLEX_MAJOR_VERSION 2
--#define YY_FLEX_MINOR_VERSION 6
--#define YY_FLEX_SUBMINOR_VERSION 0
--#if YY_FLEX_SUBMINOR_VERSION > 0
--#define FLEX_BETA
--#endif
--
--/* First, we deal with  platform-specific or compiler-specific issues. */
--
--/* begin standard C headers. */
--#include <stdio.h>
--#include <string.h>
--#include <errno.h>
--#include <stdlib.h>
--
--/* end standard C headers. */
--
--/* flex integer type definitions */
--
--#ifndef FLEXINT_H
--#define FLEXINT_H
--
--/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
--
--#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--
--/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
-- * if you want the limit (max/min) macros for int types. 
-- */
--#ifndef __STDC_LIMIT_MACROS
--#define __STDC_LIMIT_MACROS 1
--#endif
--
--#include <inttypes.h>
--typedef int8_t flex_int8_t;
--typedef uint8_t flex_uint8_t;
--typedef int16_t flex_int16_t;
--typedef uint16_t flex_uint16_t;
--typedef int32_t flex_int32_t;
--typedef uint32_t flex_uint32_t;
--#else
--typedef signed char flex_int8_t;
--typedef short int flex_int16_t;
--typedef int flex_int32_t;
--typedef unsigned char flex_uint8_t; 
--typedef unsigned short int flex_uint16_t;
--typedef unsigned int flex_uint32_t;
--
--/* Limits of integral types. */
--#ifndef INT8_MIN
--#define INT8_MIN               (-128)
--#endif
--#ifndef INT16_MIN
--#define INT16_MIN              (-32767-1)
--#endif
--#ifndef INT32_MIN
--#define INT32_MIN              (-2147483647-1)
--#endif
--#ifndef INT8_MAX
--#define INT8_MAX               (127)
--#endif
--#ifndef INT16_MAX
--#define INT16_MAX              (32767)
--#endif
--#ifndef INT32_MAX
--#define INT32_MAX              (2147483647)
--#endif
--#ifndef UINT8_MAX
--#define UINT8_MAX              (255U)
--#endif
--#ifndef UINT16_MAX
--#define UINT16_MAX             (65535U)
--#endif
--#ifndef UINT32_MAX
--#define UINT32_MAX             (4294967295U)
--#endif
--
--#endif /* ! C99 */
--
--#endif /* ! FLEXINT_H */
--
--#ifdef __cplusplus
--
--/* The "const" storage-class-modifier is valid. */
--#define YY_USE_CONST
--
--#else	/* ! __cplusplus */
--
--/* C99 requires __STDC__ to be defined as 1. */
--#if defined (__STDC__)
--
--#define YY_USE_CONST
--
--#endif	/* defined (__STDC__) */
--#endif	/* ! __cplusplus */
--
--#ifdef YY_USE_CONST
--#define yyconst const
--#else
--#define yyconst
--#endif
--
--/* Returned upon end-of-file. */
--#define YY_NULL 0
--
--/* Promotes a possibly negative, possibly signed char to an unsigned
-- * integer for use as an array index.  If the signed char is negative,
-- * we want to instead treat it as an 8-bit unsigned char, hence the
-- * double cast.
-- */
--#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
--
--/* An opaque pointer. */
--#ifndef YY_TYPEDEF_YY_SCANNER_T
--#define YY_TYPEDEF_YY_SCANNER_T
--typedef void* yyscan_t;
--#endif
--
--/* For convenience, these vars (plus the bison vars far below)
--   are macros in the reentrant scanner. */
--#define yyin yyg->yyin_r
--#define yyout yyg->yyout_r
--#define yyextra yyg->yyextra_r
--#define yyleng yyg->yyleng_r
--#define yytext yyg->yytext_r
--#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
--#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
--#define yy_flex_debug yyg->yy_flex_debug_r
--
--/* Enter a start condition.  This macro really ought to take a parameter,
-- * but we do it the disgusting crufty way forced on us by the ()-less
-- * definition of BEGIN.
-- */
--#define BEGIN yyg->yy_start = 1 + 2 *
--
--/* Translate the current start state into a value that can be later handed
-- * to BEGIN to return to the state.  The YYSTATE alias is for lex
-- * compatibility.
-- */
--#define YY_START ((yyg->yy_start - 1) / 2)
--#define YYSTATE YY_START
--
--/* Action number for EOF rule of a given start state. */
--#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
--
--/* Special action meaning "start processing a new file". */
--#define YY_NEW_FILE re_yyrestart(yyin ,yyscanner )
--
--#define YY_END_OF_BUFFER_CHAR 0
--
--/* Size of default input buffer. */
--#ifndef YY_BUF_SIZE
--#ifdef __ia64__
--/* On IA-64, the buffer size is 16k, not 8k.
-- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
-- * Ditto for the __ia64__ case accordingly.
-- */
--#define YY_BUF_SIZE 32768
--#else
--#define YY_BUF_SIZE 16384
--#endif /* __ia64__ */
--#endif
--
--/* The state buf must be large enough to hold one state per character in the main buffer.
-- */
--#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
--
--#ifndef YY_TYPEDEF_YY_BUFFER_STATE
--#define YY_TYPEDEF_YY_BUFFER_STATE
--typedef struct yy_buffer_state *YY_BUFFER_STATE;
--#endif
--
--#ifndef YY_TYPEDEF_YY_SIZE_T
--#define YY_TYPEDEF_YY_SIZE_T
--typedef size_t yy_size_t;
--#endif
--
--#define EOB_ACT_CONTINUE_SCAN 0
--#define EOB_ACT_END_OF_FILE 1
--#define EOB_ACT_LAST_MATCH 2
--
--    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
--     *       access to the local variable yy_act. Since yyless() is a macro, it would break
--     *       existing scanners that call yyless() from OUTSIDE re_yylex. 
--     *       One obvious solution it to make yy_act a global. I tried that, and saw
--     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
--     *       normally declared as a register variable-- so it is not worth it.
--     */
--    #define  YY_LESS_LINENO(n) \
--            do { \
--                int yyl;\
--                for ( yyl = n; yyl < yyleng; ++yyl )\
--                    if ( yytext[yyl] == '\n' )\
--                        --yylineno;\
--            }while(0)
--    #define YY_LINENO_REWIND_TO(dst) \
--            do {\
--                const char *p;\
--                for ( p = yy_cp-1; p >= (dst); --p)\
--                    if ( *p == '\n' )\
--                        --yylineno;\
--            }while(0)
--    
--/* Return all but the first "n" matched characters back to the input stream. */
--#define yyless(n) \
--	do \
--		{ \
--		/* Undo effects of setting up yytext. */ \
--        int yyless_macro_arg = (n); \
--        YY_LESS_LINENO(yyless_macro_arg);\
--		*yy_cp = yyg->yy_hold_char; \
--		YY_RESTORE_YY_MORE_OFFSET \
--		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
--		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
--		} \
--	while ( 0 )
--
--#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
--
--#ifndef YY_STRUCT_YY_BUFFER_STATE
--#define YY_STRUCT_YY_BUFFER_STATE
--struct yy_buffer_state
--	{
--	FILE *yy_input_file;
--
--	char *yy_ch_buf;		/* input buffer */
--	char *yy_buf_pos;		/* current position in input buffer */
--
--	/* Size of input buffer in bytes, not including room for EOB
--	 * characters.
--	 */
--	yy_size_t yy_buf_size;
--
--	/* Number of characters read into yy_ch_buf, not including EOB
--	 * characters.
--	 */
--	yy_size_t yy_n_chars;
--
--	/* Whether we "own" the buffer - i.e., we know we created it,
--	 * and can realloc() it to grow it, and should free() it to
--	 * delete it.
--	 */
--	int yy_is_our_buffer;
--
--	/* Whether this is an "interactive" input source; if so, and
--	 * if we're using stdio for input, then we want to use getc()
--	 * instead of fread(), to make sure we stop fetching input after
--	 * each newline.
--	 */
--	int yy_is_interactive;
--
--	/* Whether we're considered to be at the beginning of a line.
--	 * If so, '^' rules will be active on the next match, otherwise
--	 * not.
--	 */
--	int yy_at_bol;
--
--    int yy_bs_lineno; /**< The line count. */
--    int yy_bs_column; /**< The column count. */
--    
--	/* Whether to try to fill the input buffer when we reach the
--	 * end of it.
--	 */
--	int yy_fill_buffer;
--
--	int yy_buffer_status;
--
--#define YY_BUFFER_NEW 0
--#define YY_BUFFER_NORMAL 1
--	/* When an EOF's been seen but there's still some text to process
--	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
--	 * shouldn't try reading from the input source any more.  We might
--	 * still have a bunch of tokens to match, though, because of
--	 * possible backing-up.
--	 *
--	 * When we actually see the EOF, we change the status to "new"
--	 * (via re_yyrestart()), so that the user can continue scanning by
--	 * just pointing yyin at a new input file.
--	 */
--#define YY_BUFFER_EOF_PENDING 2
--
--	};
--#endif /* !YY_STRUCT_YY_BUFFER_STATE */
--
--/* We provide macros for accessing buffer states in case in the
-- * future we want to put the buffer states in a more general
-- * "scanner state".
-- *
-- * Returns the top of the stack, or NULL.
-- */
--#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
--                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
--                          : NULL)
--
--/* Same as previous macro, but useful when we know that the buffer stack is not
-- * NULL or when we need an lvalue. For internal use only.
-- */
--#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
--
--void re_yyrestart (FILE *input_file ,yyscan_t yyscanner );
--void re_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
--void re_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
--void re_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
--void re_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
--void re_yypop_buffer_state (yyscan_t yyscanner );
--
--static void re_yyensure_buffer_stack (yyscan_t yyscanner );
--static void re_yy_load_buffer_state (yyscan_t yyscanner );
--static void re_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
--
--#define YY_FLUSH_BUFFER re_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
--
--YY_BUFFER_STATE re_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
--YY_BUFFER_STATE re_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
--
--void *re_yyalloc (yy_size_t ,yyscan_t yyscanner );
--void *re_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
--void re_yyfree (void * ,yyscan_t yyscanner );
--
--#define yy_new_buffer re_yy_create_buffer
--
--#define yy_set_interactive(is_interactive) \
--	{ \
--	if ( ! YY_CURRENT_BUFFER ){ \
--        re_yyensure_buffer_stack (yyscanner); \
--		YY_CURRENT_BUFFER_LVALUE =    \
--            re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
--	} \
--	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
--	}
--
--#define yy_set_bol(at_bol) \
--	{ \
--	if ( ! YY_CURRENT_BUFFER ){\
--        re_yyensure_buffer_stack (yyscanner); \
--		YY_CURRENT_BUFFER_LVALUE =    \
--            re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
--	} \
--	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
--	}
--
--#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
--
--/* Begin user sect3 */
--
--#define re_yywrap(yyscanner) (/*CONSTCOND*/1)
--#define YY_SKIP_YYWRAP
--
--typedef unsigned char YY_CHAR;
--
--typedef int yy_state_type;
--
--#define yytext_ptr yytext_r
--
--static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
--static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
--static int yy_get_next_buffer (yyscan_t yyscanner );
--#if defined(__GNUC__) && __GNUC__ >= 3
--__attribute__((__noreturn__))
--#endif
--static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
--
--/* Done after the current pattern has been matched and before the
-- * corresponding action - sets up yytext.
-- */
--#define YY_DO_BEFORE_ACTION \
--	yyg->yytext_ptr = yy_bp; \
--	yyleng = (size_t) (yy_cp - yy_bp); \
--	yyg->yy_hold_char = *yy_cp; \
--	*yy_cp = '\0'; \
--	yyg->yy_c_buf_p = yy_cp;
--
--#define YY_NUM_RULES 29
--#define YY_END_OF_BUFFER 30
--/* This struct is not used in this scanner,
--   but its presence is necessary. */
--struct yy_trans_info
--	{
--	flex_int32_t yy_verify;
--	flex_int32_t yy_nxt;
--	};
--static yyconst flex_int16_t yy_accept[45] =
--    {   0,
--        0,    0,    0,    0,   30,    7,    7,   28,    6,   17,
--        7,   27,   29,   26,   18,    5,    3,   16,   15,   13,
--       11,    9,   14,   12,   10,    8,    0,    0,    0,    0,
--       25,   23,   21,   24,   22,   20,    0,    4,    0,    1,
--        2,   19,    0,    0
--    } ;
--
--static yyconst YY_CHAR yy_ec[256] =
--    {   0,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    3,    1,    1,    1,    3,
--        3,    3,    3,    4,    5,    3,    1,    6,    6,    6,
--        6,    6,    6,    6,    6,    6,    6,    1,    1,    1,
--        1,    1,    3,    1,    7,    8,    7,    9,    7,    7,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,   10,    1,    1,    1,   11,    1,    1,    1,
--       12,   13,   14,   15,    1,    1,    7,   16,    7,   17,
--
--        7,    7,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,   18,    1,    1,    1,   19,   20,
--        1,    1,   21,    3,   22,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
--        1,    1,    1,    1,    1
--    } ;
--
--static yyconst YY_CHAR yy_meta[23] =
--    {   0,
--        1,    2,    1,    1,    3,    4,    4,    4,    4,    1,
--        1,    1,    1,    5,    1,    4,    4,    1,    1,    1,
--        1,    1
--    } ;
--
--static yyconst flex_uint16_t yy_base[51] =
--    {   0,
--        0,   20,    3,    5,   50,   89,   89,   89,   10,   36,
--        0,   44,   43,   47,   38,   89,   26,   33,   89,   89,
--       89,   89,   89,   89,   89,   89,    4,    5,    0,   33,
--       32,   31,   29,   26,   24,   23,   15,   89,    8,   89,
--       89,   89,    0,   89,   67,   72,   77,   82,   84,    4
--    } ;
--
--static yyconst flex_int16_t yy_def[51] =
--    {   0,
--       45,   45,   46,   46,   44,   44,   44,   44,   44,   44,
--       44,   44,   44,   47,   44,   44,   44,   44,   44,   44,
--       44,   44,   44,   44,   44,   44,   44,   44,   48,   44,
--       44,   44,   44,   44,   44,   44,   49,   44,   44,   44,
--       44,   44,   50,    0,   44,   44,   44,   44,   44,   44
--    } ;
--
--static yyconst flex_uint16_t yy_nxt[112] =
--    {   0,
--       44,    7,    8,   27,   13,   28,   13,   30,   27,   39,
--       28,    9,   10,   39,    8,   14,   15,   14,   15,   29,
--       11,    7,    8,   16,   17,   40,   41,   29,   29,   40,
--       29,    9,   10,   29,    8,   29,   29,   29,   18,   38,
--       11,   18,   29,   19,   20,   21,   22,   29,   29,   44,
--       44,   23,   24,   25,   26,   31,   32,   33,   44,   44,
--       44,   44,   44,   34,   35,   36,   37,    6,    6,    6,
--        6,    6,   12,   12,   12,   12,   12,   30,   44,   30,
--       30,   30,   42,   42,   42,   42,   43,   43,    5,   44,
--       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
--
--       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
--       44
--    } ;
--
--static yyconst flex_int16_t yy_chk[112] =
--    {   0,
--        0,    1,    1,   11,    3,   11,    4,   50,   28,   27,
--       28,    1,    1,   39,    1,    3,    3,    4,    4,   37,
--        1,    2,    2,    9,    9,   27,   28,   36,   35,   39,
--       34,    2,    2,   33,    2,   32,   31,   30,   18,   17,
--        2,   10,   15,   10,   10,   10,   10,   13,   12,    5,
--        0,   10,   10,   10,   10,   14,   14,   14,    0,    0,
--        0,    0,    0,   14,   14,   14,   14,   45,   45,   45,
--       45,   45,   46,   46,   46,   46,   46,   47,    0,   47,
--       47,   47,   48,   48,   48,   48,   49,   49,   44,   44,
--       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
--
--       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
--       44
--    } ;
--
--/* Table of booleans, true if rule could match eol. */
--static yyconst flex_int32_t yy_rule_can_match_eol[30] =
--    {   0,
--0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
--    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,     };
--
--/* The intent behind this definition is that it'll catch
-- * any uses of REJECT which flex missed.
-- */
--#define REJECT reject_used_but_not_detected
--#define yymore() yymore_used_but_not_detected
--#define YY_MORE_ADJ 0
--#define YY_RESTORE_YY_MORE_OFFSET
--#line 1 "re_lexer.l"
--/*
--Copyright (c) 2013. The YARA Authors. All Rights Reserved.
--
--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. Neither the name of the copyright holder nor the names of its contributors
--may be used to endorse or promote products derived from this software without
--specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 COPYRIGHT HOLDER OR 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.
--*/
--/* Lexical analyzer for regular expressions */
--#line 33 "re_lexer.l"
--
--/* Disable warnings for unused functions in this file.
--
--As we redefine YY_FATAL_ERROR macro to use our own function re_yyfatal, the
--yy_fatal_error function generated by Flex is not actually used, causing a
--compiler warning. Flex doesn't offer any options to remove the yy_fatal_error
--function. When they include something like %option noyy_fatal_error as they do
--with noyywrap then we can remove this pragma.
--*/
--
--#ifdef __GNUC__
--#pragma GCC diagnostic ignored "-Wunused-function"
--#endif
--
--#include <assert.h>
--#include <setjmp.h>
--
--#include <yara/globals.h>
--#include <yara/utils.h>
--#include <yara/error.h>
--#include <yara/limits.h>
--#include <yara/mem.h>
--#include <yara/re.h>
--#include <yara/re_lexer.h>
--#include <yara/threading.h>
--#include <yara/strutils.h>
--
--
--#ifdef _WIN32
--#define snprintf _snprintf
--#endif
--
--static uint8_t word_chars[] = {
--    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
--    0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07,
--    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
--    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
--
--
--int escaped_char_value(
--    char* text,
--    uint8_t* value);
--
--int read_escaped_char(
--    yyscan_t yyscanner,
--    uint8_t* escaped_char);
--
--#define YY_NO_UNISTD_H 1
--
--#line 587 "re_lexer.c"
--
--#define INITIAL 0
--#define char_class 1
--
--#ifndef YY_NO_UNISTD_H
--/* Special case for "unistd.h", since it is non-ANSI. We include it way
-- * down here because we want the user's section 1 to have been scanned first.
-- * The user has a chance to override it with an option.
-- */
--#include <unistd.h>
--#endif
--
--#ifndef YY_EXTRA_TYPE
--#define YY_EXTRA_TYPE void *
--#endif
--
--/* Holds the entire state of the reentrant scanner. */
--struct yyguts_t
--    {
--
--    /* User-defined. Not touched by flex. */
--    YY_EXTRA_TYPE yyextra_r;
--
--    /* The rest are the same as the globals declared in the non-reentrant scanner. */
--    FILE *yyin_r, *yyout_r;
--    size_t yy_buffer_stack_top; /**< index of top of stack. */
--    size_t yy_buffer_stack_max; /**< capacity of stack. */
--    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
--    char yy_hold_char;
--    yy_size_t yy_n_chars;
--    yy_size_t yyleng_r;
--    char *yy_c_buf_p;
--    int yy_init;
--    int yy_start;
--    int yy_did_buffer_switch_on_eof;
--    int yy_start_stack_ptr;
--    int yy_start_stack_depth;
--    int *yy_start_stack;
--    yy_state_type yy_last_accepting_state;
--    char* yy_last_accepting_cpos;
--
--    int yylineno_r;
--    int yy_flex_debug_r;
--
--    char *yytext_r;
--    int yy_more_flag;
--    int yy_more_len;
--
--    YYSTYPE * yylval_r;
--
--    }; /* end struct yyguts_t */
--
--static int yy_init_globals (yyscan_t yyscanner );
--
--    /* This must go here because YYSTYPE and YYLTYPE are included
--     * from bison output in section 1.*/
--    #    define yylval yyg->yylval_r
--    
--int re_yylex_init (yyscan_t* scanner);
--
--int re_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
--
--/* Accessor methods to globals.
--   These are made visible to non-reentrant scanners for convenience. */
--
--int re_yylex_destroy (yyscan_t yyscanner );
--
--int re_yyget_debug (yyscan_t yyscanner );
--
--void re_yyset_debug (int debug_flag ,yyscan_t yyscanner );
--
--YY_EXTRA_TYPE re_yyget_extra (yyscan_t yyscanner );
--
--void re_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
--
--FILE *re_yyget_in (yyscan_t yyscanner );
--
--void re_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
--
--FILE *re_yyget_out (yyscan_t yyscanner );
--
--void re_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
--
--yy_size_t re_yyget_leng (yyscan_t yyscanner );
--
--char *re_yyget_text (yyscan_t yyscanner );
--
--int re_yyget_lineno (yyscan_t yyscanner );
--
--void re_yyset_lineno (int _line_number ,yyscan_t yyscanner );
--
--int re_yyget_column  (yyscan_t yyscanner );
--
--void re_yyset_column (int _column_no ,yyscan_t yyscanner );
--
--YYSTYPE * re_yyget_lval (yyscan_t yyscanner );
--
--void re_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
--
--/* Macros after this point can all be overridden by user definitions in
-- * section 1.
-- */
--
--#ifndef YY_SKIP_YYWRAP
--#ifdef __cplusplus
--extern "C" int re_yywrap (yyscan_t yyscanner );
--#else
--extern int re_yywrap (yyscan_t yyscanner );
--#endif
--#endif
--
--#ifndef YY_NO_UNPUT
--    
--#endif
--
--#ifndef yytext_ptr
--static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
--#endif
--
--#ifdef YY_NEED_STRLEN
--static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
--#endif
--
--#ifndef YY_NO_INPUT
--
--#ifdef __cplusplus
--static int yyinput (yyscan_t yyscanner );
--#else
--static int input (yyscan_t yyscanner );
--#endif
--
--#endif
--
--/* Amount of stuff to slurp up with each read. */
--#ifndef YY_READ_BUF_SIZE
--#ifdef __ia64__
--/* On IA-64, the buffer size is 16k, not 8k */
--#define YY_READ_BUF_SIZE 16384
--#else
--#define YY_READ_BUF_SIZE 8192
--#endif /* __ia64__ */
--#endif
--
--/* Copy whatever the last rule matched to the standard output. */
--#ifndef ECHO
--/* This used to be an fputs(), but since the string might contain NUL's,
-- * we now use fwrite().
-- */
--#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
--#endif
--
--/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
-- * is returned in "result".
-- */
--#ifndef YY_INPUT
--#define YY_INPUT(buf,result,max_size) \
--	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
--		{ \
--		int c = '*'; \
--		size_t n; \
--		for ( n = 0; n < max_size && \
--			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
--			buf[n] = (char) c; \
--		if ( c == '\n' ) \
--			buf[n++] = (char) c; \
--		if ( c == EOF && ferror( yyin ) ) \
--			YY_FATAL_ERROR( "input in flex scanner failed" ); \
--		result = n; \
--		} \
--	else \
--		{ \
--		errno=0; \
--		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
--			{ \
--			if( errno != EINTR) \
--				{ \
--				YY_FATAL_ERROR( "input in flex scanner failed" ); \
--				break; \
--				} \
--			errno=0; \
--			clearerr(yyin); \
--			} \
--		}\
--\
--
--#endif
--
--/* No semi-colon after return; correct usage is to write "yyterminate();" -
-- * we don't want an extra ';' after the "return" because that will cause
-- * some compilers to complain about unreachable statements.
-- */
--#ifndef yyterminate
--#define yyterminate() return YY_NULL
--#endif
--
--/* Number of entries by which start-condition stack grows. */
--#ifndef YY_START_STACK_INCR
--#define YY_START_STACK_INCR 25
--#endif
--
--/* Report a fatal error. */
--#ifndef YY_FATAL_ERROR
--#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
--#endif
--
--/* end tables serialization structures and prototypes */
--
--/* Default declaration of generated scanner - a define so the user can
-- * easily add parameters.
-- */
--#ifndef YY_DECL
--#define YY_DECL_IS_OURS 1
--
--extern int re_yylex \
--               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
--
--#define YY_DECL int re_yylex \
--               (YYSTYPE * yylval_param , yyscan_t yyscanner)
--#endif /* !YY_DECL */
--
--/* Code executed at the beginning of each rule, after yytext and yyleng
-- * have been set up.
-- */
--#ifndef YY_USER_ACTION
--#define YY_USER_ACTION
--#endif
--
--/* Code executed at the end of each rule. */
--#ifndef YY_BREAK
--#define YY_BREAK /*LINTED*/break;
--#endif
--
--#define YY_RULE_SETUP \
--	YY_USER_ACTION
--
--/** The main scanner function which does all the work.
-- */
--YY_DECL
--{
--	yy_state_type yy_current_state;
--	char *yy_cp, *yy_bp;
--	int yy_act;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--    yylval = yylval_param;
--
--	if ( !yyg->yy_init )
--		{
--		yyg->yy_init = 1;
--
--#ifdef YY_USER_INIT
--		YY_USER_INIT;
--#endif
--
--		if ( ! yyg->yy_start )
--			yyg->yy_start = 1;	/* first start state */
--
--		if ( ! yyin )
--			yyin = stdin;
--
--		if ( ! yyout )
--			yyout = stdout;
--
--		if ( ! YY_CURRENT_BUFFER ) {
--			re_yyensure_buffer_stack (yyscanner);
--			YY_CURRENT_BUFFER_LVALUE =
--				re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
--		}
--
--		re_yy_load_buffer_state(yyscanner );
--		}
--
--	{
--#line 100 "re_lexer.l"
--
--
--#line 864 "re_lexer.c"
--
--	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
--		{
--		yy_cp = yyg->yy_c_buf_p;
--
--		/* Support of yytext. */
--		*yy_cp = yyg->yy_hold_char;
--
--		/* yy_bp points to the position in yy_ch_buf of the start of
--		 * the current run.
--		 */
--		yy_bp = yy_cp;
--
--		yy_current_state = yyg->yy_start;
--yy_match:
--		do
--			{
--			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
--			if ( yy_accept[yy_current_state] )
--				{
--				yyg->yy_last_accepting_state = yy_current_state;
--				yyg->yy_last_accepting_cpos = yy_cp;
--				}
--			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
--				{
--				yy_current_state = (int) yy_def[yy_current_state];
--				if ( yy_current_state >= 45 )
--					yy_c = yy_meta[(unsigned int) yy_c];
--				}
--			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
--			++yy_cp;
--			}
--		while ( yy_current_state != 44 );
--		yy_cp = yyg->yy_last_accepting_cpos;
--		yy_current_state = yyg->yy_last_accepting_state;
--
--yy_find_action:
--		yy_act = yy_accept[yy_current_state];
--
--		YY_DO_BEFORE_ACTION;
--
--		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
--			{
--			yy_size_t yyl;
--			for ( yyl = 0; yyl < yyleng; ++yyl )
--				if ( yytext[yyl] == '\n' )
--					   
--    do{ yylineno++;
--        yycolumn=0;
--    }while(0)
--;
--			}
--
--do_action:	/* This label is used only to access EOF actions. */
--
--		switch ( yy_act )
--	{ /* beginning of action switch */
--			case 0: /* must back up */
--			/* undo the effects of YY_DO_BEFORE_ACTION */
--			*yy_cp = yyg->yy_hold_char;
--			yy_cp = yyg->yy_last_accepting_cpos;
--			yy_current_state = yyg->yy_last_accepting_state;
--			goto yy_find_action;
--
--case 1:
--YY_RULE_SETUP
--#line 102 "re_lexer.l"
--{
--
--  // Examples: {3,8} {0,5} {,5} {7,}
--
--  int hi_bound;
--  int lo_bound = atoi(yytext + 1);
--
--  char* comma = strchr(yytext, ',');
--
--  if (comma - yytext == strlen(yytext) - 2)
--    // if comma is followed by the closing curly bracket
--    // (example: {2,}) set high bound value to maximum.
--    hi_bound = INT16_MAX;
--  else
--    hi_bound = atoi(comma + 1);
--
--  if (hi_bound > INT16_MAX)
--  {
--    yyerror(yyscanner, lex_env, "repeat interval too large");
--    yyterminate();
--  }
--
--  if (hi_bound < lo_bound || hi_bound < 0 || lo_bound < 0)
--  {
--    yyerror(yyscanner, lex_env, "bad repeat interval");
--    yyterminate();
--  }
--
--  if (hi_bound == 0 && lo_bound == 0)
--  {
--    yyerror(yyscanner, lex_env, "bad repeat interval");
--    yyterminate();
--  }
--
--  yylval->range = (hi_bound << 16) | lo_bound;
--
--  return _RANGE_;
--}
--	YY_BREAK
--case 2:
--YY_RULE_SETUP
--#line 142 "re_lexer.l"
--{
--
--  // Example: {10}
--
--  int value = atoi(yytext + 1);
--
--  if (value > INT16_MAX)
--  {
--    yyerror(yyscanner, lex_env, "repeat interval too large");
--    yyterminate();
--  }
--
--  if (value == 0)
--  {
--    yyerror(yyscanner, lex_env, "bad repeat interval");
--    yyterminate();
--  }
--
--  yylval->range = (value << 16) | value;
--
--  return _RANGE_;
--}
--	YY_BREAK
--case 3:
--YY_RULE_SETUP
--#line 166 "re_lexer.l"
--{
--
--  // Start of a negated character class. Example: [^abcd]
--
--  BEGIN(char_class);
--  memset(LEX_ENV->class_vector, 0, 32);
--  LEX_ENV->negated_class = TRUE;
--}
--	YY_BREAK
--case 4:
--YY_RULE_SETUP
--#line 175 "re_lexer.l"
--{
--
--  // Start of character negated class containing a ].
--  // Example: [^]abc] this must be interpreted as a class
--  // not matching ], a, b, nor c
--
--  BEGIN(char_class);
--  memset(LEX_ENV->class_vector, 0, 32);
--  LEX_ENV->negated_class = TRUE;
--  LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
--}
--	YY_BREAK
--case 5:
--YY_RULE_SETUP
--#line 188 "re_lexer.l"
--{
--
--  // Start of character class containing a ].
--  // Example: []abc] this must be interpreted as a class
--  // matching ], a, b, or c.
--
--  BEGIN(char_class);
--  memset(LEX_ENV->class_vector, 0, 32);
--  LEX_ENV->negated_class = FALSE;
--  LEX_ENV->class_vector[']' / 8] |= 1 << ']' % 8;
--}
--	YY_BREAK
--case 6:
--YY_RULE_SETUP
--#line 201 "re_lexer.l"
--{
--
--  // Start of character class. Example: [abcd]
--
--  BEGIN(char_class);
--  memset(LEX_ENV->class_vector, 0, 32);
--  LEX_ENV->negated_class = FALSE;
--}
--	YY_BREAK
--case 7:
--/* rule 7 can match eol */
--YY_RULE_SETUP
--#line 211 "re_lexer.l"
--{
--
--  // Any non-special character is passed as a CHAR token to the scanner.
--
--  yylval->integer = yytext[0];
--  return _CHAR_;
--}
--	YY_BREAK
--case 8:
--YY_RULE_SETUP
--#line 220 "re_lexer.l"
--{
--  return _WORD_CHAR_;
--}
--	YY_BREAK
--case 9:
--YY_RULE_SETUP
--#line 225 "re_lexer.l"
--{
--  return _NON_WORD_CHAR_;
--}
--	YY_BREAK
--case 10:
--YY_RULE_SETUP
--#line 230 "re_lexer.l"
--{
--  return _SPACE_;
--}
--	YY_BREAK
--case 11:
--YY_RULE_SETUP
--#line 235 "re_lexer.l"
--{
--  return _NON_SPACE_;
--}
--	YY_BREAK
--case 12:
--YY_RULE_SETUP
--#line 240 "re_lexer.l"
--{
--  return _DIGIT_;
--}
--	YY_BREAK
--case 13:
--YY_RULE_SETUP
--#line 245 "re_lexer.l"
--{
--  return _NON_DIGIT_;
--}
--	YY_BREAK
--case 14:
--YY_RULE_SETUP
--#line 250 "re_lexer.l"
--{
--  return _WORD_BOUNDARY_;
--}
--	YY_BREAK
--case 15:
--YY_RULE_SETUP
--#line 254 "re_lexer.l"
--{
--  return _NON_WORD_BOUNDARY_;
--}
--	YY_BREAK
--case 16:
--YY_RULE_SETUP
--#line 259 "re_lexer.l"
--{
--
--  yyerror(yyscanner, lex_env, "backreferences are not allowed");
--  yyterminate();
--}
--	YY_BREAK
--case 17:
--YY_RULE_SETUP
--#line 266 "re_lexer.l"
--{
--
--  uint8_t c;
--
--  if (read_escaped_char(yyscanner, &c))
--  {
--    yylval->integer = c;
--    return _CHAR_;
--  }
--  else
--  {
--    yyerror(yyscanner, lex_env, "illegal escape sequence");
--    yyterminate();
--  }
--}
--	YY_BREAK
--case 18:
--YY_RULE_SETUP
--#line 283 "re_lexer.l"
--{
--
--  // End of character class.
--
--  int i;
--
--  yylval->class_vector = (uint8_t*) yr_malloc(32);
--  memcpy(yylval->class_vector, LEX_ENV->class_vector, 32);
--
--  if (LEX_ENV->negated_class)
--  {
--    for(i = 0; i < 32; i++)
--      yylval->class_vector[i] = ~yylval->class_vector[i];
--  }
--
--  BEGIN(INITIAL);
--  return _CLASS_;
--}
--	YY_BREAK
--case 19:
--/* rule 19 can match eol */
--YY_RULE_SETUP
--#line 304 "re_lexer.l"
--{
--
--  // A range inside a character class.
--  //  [abc0-9]
--  //      ^- matching here
--
--  uint16_t c;
--  uint8_t start = yytext[0];
--  uint8_t end = yytext[2];
--
--  if (start == '\\')
--  {
--    if (!escaped_char_value(yytext, &start))
--    {
--      yyerror(yyscanner, lex_env, "illegal escape sequence");
--      yyterminate();
--    }
--
--    if (yytext[1] == 'x')
--      end = yytext[5];
--    else
--      end = yytext[3];
--  }
--
--  if (end == '\\')
--  {
--    if (!read_escaped_char(yyscanner, &end))
--    {
--      yyerror(yyscanner, lex_env, "illegal escape sequence");
--      yyterminate();
--    }
--  }
--
--  if (end < start)
--  {
--    yyerror(yyscanner, lex_env, "bad character range");
--    yyterminate();
--  }
--
--  for (c = start; c <= end; c++)
--  {
--    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
--  }
--}
--	YY_BREAK
--case 20:
--YY_RULE_SETUP
--#line 350 "re_lexer.l"
--{
--
--  int i;
--
--  for (i = 0; i < 32; i++)
--    LEX_ENV->class_vector[i] |= word_chars[i];
--}
--	YY_BREAK
--case 21:
--YY_RULE_SETUP
--#line 359 "re_lexer.l"
--{
--
--  int i;
--
--  for (i = 0; i < 32; i++)
--    LEX_ENV->class_vector[i] |= ~word_chars[i];
--}
--	YY_BREAK
--case 22:
--YY_RULE_SETUP
--#line 368 "re_lexer.l"
--{
--
--  LEX_ENV->class_vector[' ' / 8] |= 1 << ' ' % 8;
--  LEX_ENV->class_vector['\t' / 8] |= 1 << '\t' % 8;
--}
--	YY_BREAK
--case 23:
--YY_RULE_SETUP
--#line 375 "re_lexer.l"
--{
--
--  int i;
--
--  for (i = 0; i < 32; i++)
--  {
--    if (i == ' ' / 8)
--      LEX_ENV->class_vector[i] |= ~(1 << ' ' % 8);
--    else if (i == '\t' / 8)
--      LEX_ENV->class_vector[i] |= ~(1 << '\t' % 8);
--    else
--      LEX_ENV->class_vector[i] = 0xFF;
--  }
--}
--	YY_BREAK
--case 24:
--YY_RULE_SETUP
--#line 391 "re_lexer.l"
--{
--
--  char c;
--
--  for (c = '0'; c <= '9'; c++)
--    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
--}
--	YY_BREAK
--case 25:
--YY_RULE_SETUP
--#line 400 "re_lexer.l"
--{
--
--  int i;
--
--  for (i = 0; i < 32; i++)
--  {
--    // digits 0-7 are in the sixth byte of the vector, let that byte alone
--    if (i == 6)
--      continue;
--
--    // digits 8 and 9 are the lowest two bits in the seventh byte of the
--    // vector, let those bits alone.
--    if (i == 7)
--      LEX_ENV->class_vector[i] |= 0xFC;
--    else
--      LEX_ENV->class_vector[i] = 0xFF;
--  }
--}
--	YY_BREAK
--case 26:
--YY_RULE_SETUP
--#line 420 "re_lexer.l"
--{
--
--  uint8_t c;
--
--  if (read_escaped_char(yyscanner, &c))
--  {
--    LEX_ENV->class_vector[c / 8] |= 1 << c % 8;
--  }
--  else
--  {
--    yyerror(yyscanner, lex_env, "illegal escape sequence");
--    yyterminate();
--  }
--}
--	YY_BREAK
--case 27:
--YY_RULE_SETUP
--#line 436 "re_lexer.l"
--{
--
--  if (yytext[0] >= 32 && yytext[0] < 127)
--  {
--    // A character class (i.e: [0-9a-f]) is represented by a 256-bits vector,
--    // here we set to 1 the vector's bit corresponding to the input character.
--
--    LEX_ENV->class_vector[yytext[0] / 8] |= 1 << yytext[0] % 8;
--  }
--  else
--  {
--    yyerror(yyscanner, lex_env, "non-ascii character");
--    yyterminate();
--  }
--}
--	YY_BREAK
--case YY_STATE_EOF(char_class):
--#line 453 "re_lexer.l"
--{
--
--  // End of regexp reached while scanning a character class.
--
--  yyerror(yyscanner, lex_env, "missing terminating ] for character class");
--  yyterminate();
--}
--	YY_BREAK
--case 28:
--YY_RULE_SETUP
--#line 462 "re_lexer.l"
--{
--
--  if (yytext[0] >= 32 && yytext[0] < 127)
--  {
--    return yytext[0];
--  }
--  else
--  {
--    yyerror(yyscanner, lex_env, "non-ascii character");
--    yyterminate();
--  }
--}
--	YY_BREAK
--case YY_STATE_EOF(INITIAL):
--#line 476 "re_lexer.l"
--{
--
--  yyterminate();
--}
--	YY_BREAK
--case 29:
--YY_RULE_SETUP
--#line 481 "re_lexer.l"
--ECHO;
--	YY_BREAK
--#line 1375 "re_lexer.c"
--
--	case YY_END_OF_BUFFER:
--		{
--		/* Amount of text matched not including the EOB char. */
--		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
--
--		/* Undo the effects of YY_DO_BEFORE_ACTION. */
--		*yy_cp = yyg->yy_hold_char;
--		YY_RESTORE_YY_MORE_OFFSET
--
--		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
--			{
--			/* We're scanning a new file or input source.  It's
--			 * possible that this happened because the user
--			 * just pointed yyin at a new source and called
--			 * re_yylex().  If so, then we have to assure
--			 * consistency between YY_CURRENT_BUFFER and our
--			 * globals.  Here is the right place to do so, because
--			 * this is the first action (other than possibly a
--			 * back-up) that will match for the new input source.
--			 */
--			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
--			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
--			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
--			}
--
--		/* Note that here we test for yy_c_buf_p "<=" to the position
--		 * of the first EOB in the buffer, since yy_c_buf_p will
--		 * already have been incremented past the NUL character
--		 * (since all states make transitions on EOB to the
--		 * end-of-buffer state).  Contrast this with the test
--		 * in input().
--		 */
--		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
--			{ /* This was really a NUL. */
--			yy_state_type yy_next_state;
--
--			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
--
--			yy_current_state = yy_get_previous_state( yyscanner );
--
--			/* Okay, we're now positioned to make the NUL
--			 * transition.  We couldn't have
--			 * yy_get_previous_state() go ahead and do it
--			 * for us because it doesn't know how to deal
--			 * with the possibility of jamming (and we don't
--			 * want to build jamming into it because then it
--			 * will run more slowly).
--			 */
--
--			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
--
--			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
--
--			if ( yy_next_state )
--				{
--				/* Consume the NUL. */
--				yy_cp = ++yyg->yy_c_buf_p;
--				yy_current_state = yy_next_state;
--				goto yy_match;
--				}
--
--			else
--				{
--				yy_cp = yyg->yy_last_accepting_cpos;
--				yy_current_state = yyg->yy_last_accepting_state;
--				goto yy_find_action;
--				}
--			}
--
--		else switch ( yy_get_next_buffer( yyscanner ) )
--			{
--			case EOB_ACT_END_OF_FILE:
--				{
--				yyg->yy_did_buffer_switch_on_eof = 0;
--
--				if ( re_yywrap(yyscanner ) )
--					{
--					/* Note: because we've taken care in
--					 * yy_get_next_buffer() to have set up
--					 * yytext, we can now set up
--					 * yy_c_buf_p so that if some total
--					 * hoser (like flex itself) wants to
--					 * call the scanner after we return the
--					 * YY_NULL, it'll still work - another
--					 * YY_NULL will get returned.
--					 */
--					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
--
--					yy_act = YY_STATE_EOF(YY_START);
--					goto do_action;
--					}
--
--				else
--					{
--					if ( ! yyg->yy_did_buffer_switch_on_eof )
--						YY_NEW_FILE;
--					}
--				break;
--				}
--
--			case EOB_ACT_CONTINUE_SCAN:
--				yyg->yy_c_buf_p =
--					yyg->yytext_ptr + yy_amount_of_matched_text;
--
--				yy_current_state = yy_get_previous_state( yyscanner );
--
--				yy_cp = yyg->yy_c_buf_p;
--				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
--				goto yy_match;
--
--			case EOB_ACT_LAST_MATCH:
--				yyg->yy_c_buf_p =
--				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
--
--				yy_current_state = yy_get_previous_state( yyscanner );
--
--				yy_cp = yyg->yy_c_buf_p;
--				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
--				goto yy_find_action;
--			}
--		break;
--		}
--
--	default:
--		YY_FATAL_ERROR(
--			"fatal flex scanner internal error--no action found" );
--	} /* end of action switch */
--		} /* end of scanning one token */
--	} /* end of user's declarations */
--} /* end of re_yylex */
--
--/* yy_get_next_buffer - try to read in a new buffer
-- *
-- * Returns a code representing an action:
-- *	EOB_ACT_LAST_MATCH -
-- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
-- *	EOB_ACT_END_OF_FILE - end of file
-- */
--static int yy_get_next_buffer (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
--	char *source = yyg->yytext_ptr;
--	yy_size_t number_to_move, i;
--	int ret_val;
--
--	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
--		YY_FATAL_ERROR(
--		"fatal flex scanner internal error--end of buffer missed" );
--
--	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
--		{ /* Don't try to fill the buffer, so this is an EOF. */
--		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
--			{
--			/* We matched a single character, the EOB, so
--			 * treat this as a final EOF.
--			 */
--			return EOB_ACT_END_OF_FILE;
--			}
--
--		else
--			{
--			/* We matched some text prior to the EOB, first
--			 * process it.
--			 */
--			return EOB_ACT_LAST_MATCH;
--			}
--		}
--
--	/* Try to read more data. */
--
--	/* First move last chars to start of buffer. */
--	number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
--
--	for ( i = 0; i < number_to_move; ++i )
--		*(dest++) = *(source++);
--
--	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
--		/* don't do the read, it's not guaranteed to return an EOF,
--		 * just force an EOF
--		 */
--		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
--
--	else
--		{
--			yy_size_t num_to_read =
--			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
--
--		while ( num_to_read <= 0 )
--			{ /* Not enough room in the buffer - grow it. */
--
--			/* just a shorter name for the current buffer */
--			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
--
--			int yy_c_buf_p_offset =
--				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);
--
--			if ( b->yy_is_our_buffer )
--				{
--				yy_size_t new_size = b->yy_buf_size * 2;
--
--				if ( new_size <= 0 )
--					b->yy_buf_size += b->yy_buf_size / 8;
--				else
--					b->yy_buf_size *= 2;
--
--				b->yy_ch_buf = (char *)
--					/* Include room in for 2 EOB chars. */
--					re_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
--				}
--			else
--				/* Can't grow it, we don't own it. */
--				b->yy_ch_buf = 0;
--
--			if ( ! b->yy_ch_buf )
--				YY_FATAL_ERROR(
--				"fatal error - scanner input buffer overflow" );
--
--			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
--
--			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
--						number_to_move - 1;
--
--			}
--
--		if ( num_to_read > YY_READ_BUF_SIZE )
--			num_to_read = YY_READ_BUF_SIZE;
--
--		/* Read in more data. */
--		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
--			yyg->yy_n_chars, num_to_read );
--
--		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
--		}
--
--	if ( yyg->yy_n_chars == 0 )
--		{
--		if ( number_to_move == YY_MORE_ADJ )
--			{
--			ret_val = EOB_ACT_END_OF_FILE;
--			re_yyrestart(yyin  ,yyscanner);
--			}
--
--		else
--			{
--			ret_val = EOB_ACT_LAST_MATCH;
--			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
--				YY_BUFFER_EOF_PENDING;
--			}
--		}
--
--	else
--		ret_val = EOB_ACT_CONTINUE_SCAN;
--
--	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
--		/* Extend the array by 50%, plus the number we really need. */
--		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
--		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) re_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
--		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
--			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
--	}
--
--	yyg->yy_n_chars += number_to_move;
--	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
--	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
--
--	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
--
--	return ret_val;
--}
--
--/* yy_get_previous_state - get the state just before the EOB char was reached */
--
--    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
--{
--	yy_state_type yy_current_state;
--	char *yy_cp;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	yy_current_state = yyg->yy_start;
--
--	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
--		{
--		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
--		if ( yy_accept[yy_current_state] )
--			{
--			yyg->yy_last_accepting_state = yy_current_state;
--			yyg->yy_last_accepting_cpos = yy_cp;
--			}
--		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
--			{
--			yy_current_state = (int) yy_def[yy_current_state];
--			if ( yy_current_state >= 45 )
--				yy_c = yy_meta[(unsigned int) yy_c];
--			}
--		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
--		}
--
--	return yy_current_state;
--}
--
--/* yy_try_NUL_trans - try to make a transition on the NUL character
-- *
-- * synopsis
-- *	next_state = yy_try_NUL_trans( current_state );
-- */
--    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
--{
--	int yy_is_jam;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
--	char *yy_cp = yyg->yy_c_buf_p;
--
--	YY_CHAR yy_c = 1;
--	if ( yy_accept[yy_current_state] )
--		{
--		yyg->yy_last_accepting_state = yy_current_state;
--		yyg->yy_last_accepting_cpos = yy_cp;
--		}
--	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
--		{
--		yy_current_state = (int) yy_def[yy_current_state];
--		if ( yy_current_state >= 45 )
--			yy_c = yy_meta[(unsigned int) yy_c];
--		}
--	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
--	yy_is_jam = (yy_current_state == 44);
--
--	(void)yyg;
--	return yy_is_jam ? 0 : yy_current_state;
--}
--
--#ifndef YY_NO_UNPUT
--
--#endif
--
--#ifndef YY_NO_INPUT
--#ifdef __cplusplus
--    static int yyinput (yyscan_t yyscanner)
--#else
--    static int input  (yyscan_t yyscanner)
--#endif
--
--{
--	int c;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	*yyg->yy_c_buf_p = yyg->yy_hold_char;
--
--	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
--		{
--		/* yy_c_buf_p now points to the character we want to return.
--		 * If this occurs *before* the EOB characters, then it's a
--		 * valid NUL; if not, then we've hit the end of the buffer.
--		 */
--		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
--			/* This was really a NUL. */
--			*yyg->yy_c_buf_p = '\0';
--
--		else
--			{ /* need more input */
--			yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
--			++yyg->yy_c_buf_p;
--
--			switch ( yy_get_next_buffer( yyscanner ) )
--				{
--				case EOB_ACT_LAST_MATCH:
--					/* This happens because yy_g_n_b()
--					 * sees that we've accumulated a
--					 * token and flags that we need to
--					 * try matching the token before
--					 * proceeding.  But for input(),
--					 * there's no matching to consider.
--					 * So convert the EOB_ACT_LAST_MATCH
--					 * to EOB_ACT_END_OF_FILE.
--					 */
--
--					/* Reset buffer status. */
--					re_yyrestart(yyin ,yyscanner);
--
--					/*FALLTHROUGH*/
--
--				case EOB_ACT_END_OF_FILE:
--					{
--					if ( re_yywrap(yyscanner ) )
--						return EOF;
--
--					if ( ! yyg->yy_did_buffer_switch_on_eof )
--						YY_NEW_FILE;
--#ifdef __cplusplus
--					return yyinput(yyscanner);
--#else
--					return input(yyscanner);
--#endif
--					}
--
--				case EOB_ACT_CONTINUE_SCAN:
--					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
--					break;
--				}
--			}
--		}
--
--	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
--	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
--	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
--
--	if ( c == '\n' )
--		   
--    do{ yylineno++;
--        yycolumn=0;
--    }while(0)
--;
--
--	return c;
--}
--#endif	/* ifndef YY_NO_INPUT */
--
--/** Immediately switch to a different input stream.
-- * @param input_file A readable stream.
-- * @param yyscanner The scanner object.
-- * @note This function does not reset the start condition to @c INITIAL .
-- */
--    void re_yyrestart  (FILE * input_file , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	if ( ! YY_CURRENT_BUFFER ){
--        re_yyensure_buffer_stack (yyscanner);
--		YY_CURRENT_BUFFER_LVALUE =
--            re_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
--	}
--
--	re_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
--	re_yy_load_buffer_state(yyscanner );
--}
--
--/** Switch to a different input buffer.
-- * @param new_buffer The new input buffer.
-- * @param yyscanner The scanner object.
-- */
--    void re_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	/* TODO. We should be able to replace this entire function body
--	 * with
--	 *		re_yypop_buffer_state();
--	 *		re_yypush_buffer_state(new_buffer);
--     */
--	re_yyensure_buffer_stack (yyscanner);
--	if ( YY_CURRENT_BUFFER == new_buffer )
--		return;
--
--	if ( YY_CURRENT_BUFFER )
--		{
--		/* Flush out information for old buffer. */
--		*yyg->yy_c_buf_p = yyg->yy_hold_char;
--		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
--		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
--		}
--
--	YY_CURRENT_BUFFER_LVALUE = new_buffer;
--	re_yy_load_buffer_state(yyscanner );
--
--	/* We don't actually know whether we did this switch during
--	 * EOF (re_yywrap()) processing, but the only time this flag
--	 * is looked at is after re_yywrap() is called, so it's safe
--	 * to go ahead and always set it.
--	 */
--	yyg->yy_did_buffer_switch_on_eof = 1;
--}
--
--static void re_yy_load_buffer_state  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
--	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
--	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
--	yyg->yy_hold_char = *yyg->yy_c_buf_p;
--}
--
--/** Allocate and initialize an input buffer state.
-- * @param file A readable stream.
-- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
-- * @param yyscanner The scanner object.
-- * @return the allocated buffer state.
-- */
--    YY_BUFFER_STATE re_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
--{
--	YY_BUFFER_STATE b;
--    
--	b = (YY_BUFFER_STATE) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
--	if ( ! b )
--		YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
--
--	b->yy_buf_size = (yy_size_t)size;
--
--	/* yy_ch_buf has to be 2 characters longer than the size given because
--	 * we need to put in 2 end-of-buffer characters.
--	 */
--	b->yy_ch_buf = (char *) re_yyalloc(b->yy_buf_size + 2 ,yyscanner );
--	if ( ! b->yy_ch_buf )
--		YY_FATAL_ERROR( "out of dynamic memory in re_yy_create_buffer()" );
--
--	b->yy_is_our_buffer = 1;
--
--	re_yy_init_buffer(b,file ,yyscanner);
--
--	return b;
--}
--
--/** Destroy the buffer.
-- * @param b a buffer created with re_yy_create_buffer()
-- * @param yyscanner The scanner object.
-- */
--    void re_yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	if ( ! b )
--		return;
--
--	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
--		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
--
--	if ( b->yy_is_our_buffer )
--		re_yyfree((void *) b->yy_ch_buf ,yyscanner );
--
--	re_yyfree((void *) b ,yyscanner );
--}
--
--/* Initializes or reinitializes a buffer.
-- * This function is sometimes called more than once on the same buffer,
-- * such as during a re_yyrestart() or at EOF.
-- */
--    static void re_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
--
--{
--	int oerrno = errno;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	re_yy_flush_buffer(b ,yyscanner);
--
--	b->yy_input_file = file;
--	b->yy_fill_buffer = 1;
--
--    /* If b is the current buffer, then re_yy_init_buffer was _probably_
--     * called from re_yyrestart() or through yy_get_next_buffer.
--     * In that case, we don't want to reset the lineno or column.
--     */
--    if (b != YY_CURRENT_BUFFER){
--        b->yy_bs_lineno = 1;
--        b->yy_bs_column = 0;
--    }
--
--        b->yy_is_interactive = 0;
--    
--	errno = oerrno;
--}
--
--/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
-- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
-- * @param yyscanner The scanner object.
-- */
--    void re_yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	if ( ! b )
--		return;
--
--	b->yy_n_chars = 0;
--
--	/* We always need two end-of-buffer characters.  The first causes
--	 * a transition to the end-of-buffer state.  The second causes
--	 * a jam in that state.
--	 */
--	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
--	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
--
--	b->yy_buf_pos = &b->yy_ch_buf[0];
--
--	b->yy_at_bol = 1;
--	b->yy_buffer_status = YY_BUFFER_NEW;
--
--	if ( b == YY_CURRENT_BUFFER )
--		re_yy_load_buffer_state(yyscanner );
--}
--
--/** Pushes the new state onto the stack. The new state becomes
-- *  the current state. This function will allocate the stack
-- *  if necessary.
-- *  @param new_buffer The new state.
-- *  @param yyscanner The scanner object.
-- */
--void re_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	if (new_buffer == NULL)
--		return;
--
--	re_yyensure_buffer_stack(yyscanner);
--
--	/* This block is copied from re_yy_switch_to_buffer. */
--	if ( YY_CURRENT_BUFFER )
--		{
--		/* Flush out information for old buffer. */
--		*yyg->yy_c_buf_p = yyg->yy_hold_char;
--		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
--		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
--		}
--
--	/* Only push if top exists. Otherwise, replace top. */
--	if (YY_CURRENT_BUFFER)
--		yyg->yy_buffer_stack_top++;
--	YY_CURRENT_BUFFER_LVALUE = new_buffer;
--
--	/* copied from re_yy_switch_to_buffer. */
--	re_yy_load_buffer_state(yyscanner );
--	yyg->yy_did_buffer_switch_on_eof = 1;
--}
--
--/** Removes and deletes the top of the stack, if present.
-- *  The next element becomes the new top.
-- *  @param yyscanner The scanner object.
-- */
--void re_yypop_buffer_state (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	if (!YY_CURRENT_BUFFER)
--		return;
--
--	re_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
--	YY_CURRENT_BUFFER_LVALUE = NULL;
--	if (yyg->yy_buffer_stack_top > 0)
--		--yyg->yy_buffer_stack_top;
--
--	if (YY_CURRENT_BUFFER) {
--		re_yy_load_buffer_state(yyscanner );
--		yyg->yy_did_buffer_switch_on_eof = 1;
--	}
--}
--
--/* Allocates the stack if it does not exist.
-- *  Guarantees space for at least one push.
-- */
--static void re_yyensure_buffer_stack (yyscan_t yyscanner)
--{
--	yy_size_t num_to_alloc;
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--	if (!yyg->yy_buffer_stack) {
--
--		/* First allocation is just for 2 elements, since we don't know if this
--		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
--		 * immediate realloc on the next call.
--         */
--		num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
--		yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyalloc
--								(num_to_alloc * sizeof(struct yy_buffer_state*)
--								, yyscanner);
--		if ( ! yyg->yy_buffer_stack )
--			YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
--								  
--		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
--				
--		yyg->yy_buffer_stack_max = num_to_alloc;
--		yyg->yy_buffer_stack_top = 0;
--		return;
--	}
--
--	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
--
--		/* Increase the buffer to prepare for a possible push. */
--		yy_size_t grow_size = 8 /* arbitrary grow size */;
--
--		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
--		yyg->yy_buffer_stack = (struct yy_buffer_state**)re_yyrealloc
--								(yyg->yy_buffer_stack,
--								num_to_alloc * sizeof(struct yy_buffer_state*)
--								, yyscanner);
--		if ( ! yyg->yy_buffer_stack )
--			YY_FATAL_ERROR( "out of dynamic memory in re_yyensure_buffer_stack()" );
--
--		/* zero only the new slots.*/
--		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
--		yyg->yy_buffer_stack_max = num_to_alloc;
--	}
--}
--
--/** Setup the input buffer state to scan directly from a user-specified character buffer.
-- * @param base the character buffer
-- * @param size the size in bytes of the character buffer
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object. 
-- */
--YY_BUFFER_STATE re_yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
--{
--	YY_BUFFER_STATE b;
--    
--	if ( size < 2 ||
--	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
--	     base[size-1] != YY_END_OF_BUFFER_CHAR )
--		/* They forgot to leave room for the EOB's. */
--		return 0;
--
--	b = (YY_BUFFER_STATE) re_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
--	if ( ! b )
--		YY_FATAL_ERROR( "out of dynamic memory in re_yy_scan_buffer()" );
--
--	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
--	b->yy_buf_pos = b->yy_ch_buf = base;
--	b->yy_is_our_buffer = 0;
--	b->yy_input_file = 0;
--	b->yy_n_chars = b->yy_buf_size;
--	b->yy_is_interactive = 0;
--	b->yy_at_bol = 1;
--	b->yy_fill_buffer = 0;
--	b->yy_buffer_status = YY_BUFFER_NEW;
--
--	re_yy_switch_to_buffer(b ,yyscanner );
--
--	return b;
--}
--
--/** Setup the input buffer state to scan a string. The next call to re_yylex() will
-- * scan from a @e copy of @a str.
-- * @param yystr a NUL-terminated string to scan
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object.
-- * @note If you want to scan bytes that may contain NUL values, then use
-- *       re_yy_scan_bytes() instead.
-- */
--YY_BUFFER_STATE re_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
--{
--    
--	return re_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
--}
--
--/** Setup the input buffer state to scan the given bytes. The next call to re_yylex() will
-- * scan from a @e copy of @a bytes.
-- * @param yybytes the byte buffer to scan
-- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
-- * @param yyscanner The scanner object.
-- * @return the newly allocated buffer state object.
-- */
--YY_BUFFER_STATE re_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
--{
--	YY_BUFFER_STATE b;
--	char *buf;
--	yy_size_t n;
--	yy_size_t i;
--    
--	/* Get memory for full buffer, including space for trailing EOB's. */
--	n = _yybytes_len + 2;
--	buf = (char *) re_yyalloc(n ,yyscanner );
--	if ( ! buf )
--		YY_FATAL_ERROR( "out of dynamic memory in re_yy_scan_bytes()" );
--
--	for ( i = 0; i < _yybytes_len; ++i )
--		buf[i] = yybytes[i];
--
--	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
--
--	b = re_yy_scan_buffer(buf,n ,yyscanner);
--	if ( ! b )
--		YY_FATAL_ERROR( "bad buffer in re_yy_scan_bytes()" );
--
--	/* It's okay to grow etc. this buffer, and we should throw it
--	 * away when we're done.
--	 */
--	b->yy_is_our_buffer = 1;
--
--	return b;
--}
--
--#ifndef YY_EXIT_FAILURE
--#define YY_EXIT_FAILURE 2
--#endif
--
--static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
--{
--	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	(void)yyg;
--	(void) fprintf( stderr, "%s\n", msg );
--	exit( YY_EXIT_FAILURE );
--}
--
--/* Redefine yyless() so it works in section 3 code. */
--
--#undef yyless
--#define yyless(n) \
--	do \
--		{ \
--		/* Undo effects of setting up yytext. */ \
--        int yyless_macro_arg = (n); \
--        YY_LESS_LINENO(yyless_macro_arg);\
--		yytext[yyleng] = yyg->yy_hold_char; \
--		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
--		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
--		*yyg->yy_c_buf_p = '\0'; \
--		yyleng = yyless_macro_arg; \
--		} \
--	while ( 0 )
--
--/* Accessor  methods (get/set functions) to struct members. */
--
--/** Get the user-defined data for this scanner.
-- * @param yyscanner The scanner object.
-- */
--YY_EXTRA_TYPE re_yyget_extra  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yyextra;
--}
--
--/** Get the current line number.
-- * @param yyscanner The scanner object.
-- */
--int re_yyget_lineno  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    
--        if (! YY_CURRENT_BUFFER)
--            return 0;
--    
--    return yylineno;
--}
--
--/** Get the current column number.
-- * @param yyscanner The scanner object.
-- */
--int re_yyget_column  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    
--        if (! YY_CURRENT_BUFFER)
--            return 0;
--    
--    return yycolumn;
--}
--
--/** Get the input stream.
-- * @param yyscanner The scanner object.
-- */
--FILE *re_yyget_in  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yyin;
--}
--
--/** Get the output stream.
-- * @param yyscanner The scanner object.
-- */
--FILE *re_yyget_out  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yyout;
--}
--
--/** Get the length of the current token.
-- * @param yyscanner The scanner object.
-- */
--yy_size_t re_yyget_leng  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yyleng;
--}
--
--/** Get the current token.
-- * @param yyscanner The scanner object.
-- */
--
--char *re_yyget_text  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yytext;
--}
--
--/** Set the user-defined data. This data is never touched by the scanner.
-- * @param user_defined The data to be associated with this scanner.
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    yyextra = user_defined ;
--}
--
--/** Set the current line number.
-- * @param _line_number line number
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_lineno (int  _line_number , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--        /* lineno is only valid if an input buffer exists. */
--        if (! YY_CURRENT_BUFFER )
--           YY_FATAL_ERROR( "re_yyset_lineno called with no buffer" );
--    
--    yylineno = _line_number;
--}
--
--/** Set the current column.
-- * @param _column_no column number
-- * @param yyscanner The scanner object.
-- */
--void re_yyset_column (int  _column_no , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--        /* column is only valid if an input buffer exists. */
--        if (! YY_CURRENT_BUFFER )
--           YY_FATAL_ERROR( "re_yyset_column called with no buffer" );
--    
--    yycolumn = _column_no;
--}
--
--/** Set the input stream. This does not discard the current
-- * input buffer.
-- * @param _in_str A readable stream.
-- * @param yyscanner The scanner object.
-- * @see re_yy_switch_to_buffer
-- */
--void re_yyset_in (FILE *  _in_str , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    yyin = _in_str ;
--}
--
--void re_yyset_out (FILE *  _out_str , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    yyout = _out_str ;
--}
--
--int re_yyget_debug  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yy_flex_debug;
--}
--
--void re_yyset_debug (int  _bdebug , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    yy_flex_debug = _bdebug ;
--}
--
--/* Accessor methods for yylval and yylloc */
--
--YYSTYPE * re_yyget_lval  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    return yylval;
--}
--
--void re_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    yylval = yylval_param;
--}
--
--/* User-visible API */
--
--/* re_yylex_init is special because it creates the scanner itself, so it is
-- * the ONLY reentrant function that doesn't take the scanner as the last argument.
-- * That's why we explicitly handle the declaration, instead of using our macros.
-- */
--
--int re_yylex_init(yyscan_t* ptr_yy_globals)
--
--{
--    if (ptr_yy_globals == NULL){
--        errno = EINVAL;
--        return 1;
--    }
--
--    *ptr_yy_globals = (yyscan_t) re_yyalloc ( sizeof( struct yyguts_t ), NULL );
--
--    if (*ptr_yy_globals == NULL){
--        errno = ENOMEM;
--        return 1;
--    }
--
--    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
--    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
--
--    return yy_init_globals ( *ptr_yy_globals );
--}
--
--/* re_yylex_init_extra has the same functionality as re_yylex_init, but follows the
-- * convention of taking the scanner as the last argument. Note however, that
-- * this is a *pointer* to a scanner, as it will be allocated by this call (and
-- * is the reason, too, why this function also must handle its own declaration).
-- * The user defined value in the first argument will be available to re_yyalloc in
-- * the yyextra field.
-- */
--
--int re_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
--
--{
--    struct yyguts_t dummy_yyguts;
--
--    re_yyset_extra (yy_user_defined, &dummy_yyguts);
--
--    if (ptr_yy_globals == NULL){
--        errno = EINVAL;
--        return 1;
--    }
--	
--    *ptr_yy_globals = (yyscan_t) re_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
--	
--    if (*ptr_yy_globals == NULL){
--        errno = ENOMEM;
--        return 1;
--    }
--    
--    /* By setting to 0xAA, we expose bugs in
--    yy_init_globals. Leave at 0x00 for releases. */
--    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
--    
--    re_yyset_extra (yy_user_defined, *ptr_yy_globals);
--    
--    return yy_init_globals ( *ptr_yy_globals );
--}
--
--static int yy_init_globals (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--    /* Initialization is the same as for the non-reentrant scanner.
--     * This function is called from re_yylex_destroy(), so don't allocate here.
--     */
--
--    yyg->yy_buffer_stack = 0;
--    yyg->yy_buffer_stack_top = 0;
--    yyg->yy_buffer_stack_max = 0;
--    yyg->yy_c_buf_p = (char *) 0;
--    yyg->yy_init = 0;
--    yyg->yy_start = 0;
--
--    yyg->yy_start_stack_ptr = 0;
--    yyg->yy_start_stack_depth = 0;
--    yyg->yy_start_stack =  NULL;
--
--/* Defined in main.c */
--#ifdef YY_STDINIT
--    yyin = stdin;
--    yyout = stdout;
--#else
--    yyin = (FILE *) 0;
--    yyout = (FILE *) 0;
--#endif
--
--    /* For future reference: Set errno on error, since we are called by
--     * re_yylex_init()
--     */
--    return 0;
--}
--
--/* re_yylex_destroy is for both reentrant and non-reentrant scanners. */
--int re_yylex_destroy  (yyscan_t yyscanner)
--{
--    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--
--    /* Pop the buffer stack, destroying each element. */
--	while(YY_CURRENT_BUFFER){
--		re_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
--		YY_CURRENT_BUFFER_LVALUE = NULL;
--		re_yypop_buffer_state(yyscanner);
--	}
--
--	/* Destroy the stack itself. */
--	re_yyfree(yyg->yy_buffer_stack ,yyscanner);
--	yyg->yy_buffer_stack = NULL;
--
--    /* Destroy the start condition stack. */
--        re_yyfree(yyg->yy_start_stack ,yyscanner );
--        yyg->yy_start_stack = NULL;
--
--    /* Reset the globals. This is important in a non-reentrant scanner so the next time
--     * re_yylex() is called, initialization will occur. */
--    yy_init_globals( yyscanner);
--
--    /* Destroy the main struct (reentrant only). */
--    re_yyfree ( yyscanner , yyscanner );
--    yyscanner = NULL;
--    return 0;
--}
--
--/*
-- * Internal utility routines.
-- */
--
--#ifndef yytext_ptr
--static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
--{
--	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	(void)yyg;
--
--	int i;
--	for ( i = 0; i < n; ++i )
--		s1[i] = s2[i];
--}
--#endif
--
--#ifdef YY_NEED_STRLEN
--static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
--{
--	int n;
--	for ( n = 0; s[n]; ++n )
--		;
--
--	return n;
--}
--#endif
--
--void *re_yyalloc (yy_size_t  size , yyscan_t yyscanner)
--{
--	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	(void)yyg;
--	return (void *) malloc( size );
--}
--
--void *re_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
--{
--	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	(void)yyg;
--
--	/* The cast to (char *) in the following accommodates both
--	 * implementations that use char* generic pointers, and those
--	 * that use void* generic pointers.  It works with the latter
--	 * because both ANSI C and C++ allow castless assignment from
--	 * any pointer type to void*, and deal with argument conversions
--	 * as though doing an assignment.
--	 */
--	return (void *) realloc( (char *) ptr, size );
--}
--
--void re_yyfree (void * ptr , yyscan_t yyscanner)
--{
--	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
--	(void)yyg;
--	free( (char *) ptr );	/* see re_yyrealloc() for (char *) cast */
--}
--
--#define YYTABLES_NAME "yytables"
--
--#line 481 "re_lexer.l"
--
--
--
--int escaped_char_value(
--    char* text,
--    uint8_t* value)
--{
--  unsigned int hex_value;
--  char hex[3];
--
--  assert(text[0] == '\\');
--
--  switch(text[1])
--  {
--  case 'x':
--    if (!isxdigit(text[2]) || !isxdigit(text[3]))
--      return 0;
--    hex[0] = text[2];
--    hex[1] = text[3];
--    hex[2] = '\0';
--    sscanf(hex, "%x", &hex_value);
--    *value = (uint8_t) hex_value;
--    break;
--
--  case 'n':
--    *value = '\n';
--    break;
--
--  case 't':
--    *value = '\t';
--    break;
--
--  case 'r':
--    *value = '\r';
--    break;
--
--  case 'f':
--    *value = '\f';
--    break;
--
--  case 'a':
--    *value = '\a';
--    break;
--
--  default:
--    *value = text[1];
--  }
--
--  return 1;
--}
--
--
--#ifdef __cplusplus
--#define RE_YY_INPUT yyinput
--#else
--#define RE_YY_INPUT input
--#endif
--
--
--int read_escaped_char(
--    yyscan_t yyscanner,
--    uint8_t* escaped_char)
--{
--  char text[4] = {0, 0, 0, 0};
--
--  text[0] = '\\';
--  text[1] = RE_YY_INPUT(yyscanner);
--
--  if (text[1] == EOF || text[1] == 0)
--    return 0;
--
--  if (text[1] == 'x')
--  {
--    text[2] = RE_YY_INPUT(yyscanner);
--
--    if (text[2] == EOF || text[2] == 0)
--      return 0;
--
--    text[3] = RE_YY_INPUT(yyscanner);
--
--    if (text[3] == EOF || text[3] == 0)
--      return 0;
--  }
--
--  return escaped_char_value(text, escaped_char);
--}
--
--
--void yyfatal(
--    yyscan_t yyscanner,
--    const char *error_message)
--{
--  jmp_buf* recovery_state = (jmp_buf*) yr_thread_storage_get_value(
--      &yr_recovery_state_key);
--
--  longjmp(*recovery_state, 1);
--}
--
--
--void yyerror(
--    yyscan_t yyscanner,
--    RE_LEX_ENVIRONMENT* lex_env,
--    const char *error_message)
--{
--  // if lex_env->last_error_code was set to some error code before
--  // don't overwrite it, we are interested in the first error, not in
--  // subsequent errors like "syntax error, unexpected $end" caused by
--  // early parser termination.
--
--  if (lex_env->last_error_code == ERROR_SUCCESS)
--  {
--    lex_env->last_error_code = ERROR_INVALID_REGULAR_EXPRESSION;
--
--    strlcpy(
--        lex_env->last_error_message,
--        error_message,
--        sizeof(lex_env->last_error_message));
--  }
--}
--
--
--int yr_parse_re_string(
--  const char* re_string,
--  RE_AST** re_ast,
--  RE_ERROR* error)
--{
--  yyscan_t yyscanner;
--  jmp_buf recovery_state;
--  RE_LEX_ENVIRONMENT lex_env;
--
--  lex_env.last_error_code = ERROR_SUCCESS;
--  lex_env.last_error_message[0] = '\0';
--
--  yr_thread_storage_set_value(&yr_recovery_state_key, &recovery_state);
--
--  if (setjmp(recovery_state) != 0)
--    return ERROR_INTERNAL_FATAL_ERROR;
--
--  FAIL_ON_ERROR(yr_re_ast_create(re_ast));
--
--  re_yylex_init(&yyscanner);
--  re_yyset_extra(*re_ast,yyscanner);
--  re_yy_scan_string(re_string,yyscanner);
--  yyparse(yyscanner, &lex_env);
--  re_yylex_destroy(yyscanner);
--
--  if (lex_env.last_error_code != ERROR_SUCCESS)
--  {
--    yr_re_ast_destroy(*re_ast);
--    *re_ast = NULL;
--
--    strlcpy(
--        error->message,
--        lex_env.last_error_message,
--        sizeof(error->message));
--
--    return lex_env.last_error_code;
--  }
--
--  return ERROR_SUCCESS;
--}
--
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index cbd88ca..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-0001-Regenerate-re_lexer.c-using-flex-2.6.1.patch
diff --git a/debian/rules b/debian/rules
index cceedcd..aa16aa8 100755
--- a/debian/rules
+++ b/debian/rules
@@ -8,6 +8,13 @@ override_dh_auto_configure:
 	dh_auto_configure -- --enable-cuckoo --enable-magic
 
 override_dh_auto_build:
+	rm -f \
+		libyara/hex_grammar.c \
+		libyara/hex_grammar.h \
+		libyara/re_grammar.c \
+		libyara/re_grammar.h \
+		libyara/grammar.c \
+		libyara/grammar.h
 	dh_auto_build
 	$(MAKE) -C docs html
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list