1 # flex.m4 serial 2 2 # Copyright (C) 2012 Free Software Foundation, Inc. 3 # This file is free software; the Free Software Foundation 4 # gives unlimited permission to copy and/or distribute it, 5 # with or without modifications, as long as this notice is preserved. 6 7 # AC_PROG_LEX 8 # ----------- 9 # Look for flex or lex. Set its associated library to LEXLIB. 10 # Check if lex declares yytext as a char * by default, not a char[]. 11 AN_MAKEVAR([LEX], [AC_PROG_LEX]) 12 AN_PROGRAM([lex], [AC_PROG_LEX]) 13 AN_PROGRAM([flex], [AC_PROG_LEX]) 14 AC_DEFUN_ONCE([AC_PROG_LEX], 15 [AC_CHECK_PROGS([LEX], [flex lex], [:]) 16 if test "x$LEX" != "x:"; then 17 _AC_PROG_LEX_YYTEXT_DECL 18 fi]) 19 20 21 # _AC_PROG_LEX_YYTEXT_DECL 22 # ------------------------ 23 # Check whether this is Flex, for the Lex output root, the Lex library, 24 # and whether Lex declares yytext as a char * by default. 25 m4_define([_AC_PROG_LEX_YYTEXT_DECL], 26 [AC_CACHE_CHECK([whether lex is flex], 27 [ac_cv_prog_lex_is_flex], 28 [cat >conftest.l <<_ACEOF[ 29 %option debug nodefault noinput nounput noyywrap never-interactive 30 %x SC_CONF_TEST 31 %% 32 a { BEGIN SC_CONF_TEST; } 33 ]_ACEOF 34 if _AC_DO_VAR([LEX conftest.l]); then 35 ac_cv_prog_lex_is_flex=yes 36 else 37 ac_cv_prog_lex_is_flex=no 38 fi 39 ]) 40 AC_SUBST([LEX_IS_FLEX], 41 [`test "$ac_cv_prog_lex_is_flex" = yes && echo true || echo false`])dnl 42 43 cat >conftest.l <<_ACEOF[ 44 %% 45 a { ECHO; } 46 b { REJECT; } 47 c { yymore (); } 48 d { yyless (1); } 49 e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ 50 yyless ((input () != 0)); } 51 f { unput (yytext[0]); } 52 . { BEGIN INITIAL; } 53 %% 54 #ifdef YYTEXT_POINTER 55 extern char *yytext; 56 #endif 57 int 58 main (void) 59 { 60 return ! yylex () + ! yywrap (); 61 } 62 ]_ACEOF 63 _AC_DO_VAR([LEX conftest.l]) 64 AC_CACHE_CHECK([lex output file root], [ac_cv_prog_lex_root], [ 65 if test -f lex.yy.c; then 66 ac_cv_prog_lex_root=lex.yy 67 elif test -f lexyy.c; then 68 ac_cv_prog_lex_root=lexyy 69 else 70 AC_MSG_ERROR([cannot find output from $LEX; giving up]) 71 fi]) 72 AC_SUBST([LEX_OUTPUT_ROOT], [$ac_cv_prog_lex_root])dnl 73 74 if test -z "${LEXLIB+set}"; then 75 AC_CACHE_CHECK([lex library], [ac_cv_lib_lex], [ 76 ac_save_LIBS=$LIBS 77 ac_cv_lib_lex='none needed' 78 for ac_lib in '' -lfl -ll; do 79 LIBS="$ac_lib $ac_save_LIBS" 80 AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED[`cat $LEX_OUTPUT_ROOT.c`]], 81 [ac_cv_lib_lex=$ac_lib]) 82 test "$ac_cv_lib_lex" != 'none needed' && break 83 done 84 LIBS=$ac_save_LIBS 85 ]) 86 test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex 87 fi 88 AC_SUBST([LEXLIB]) 89 90 AC_CACHE_CHECK([whether yytext is a pointer], 91 [ac_cv_prog_lex_yytext_pointer], 92 [# POSIX says lex can declare yytext either as a pointer or an array; the 93 # default is implementation-dependent. Figure out which it is, since 94 # not all implementations provide the %pointer and %array declarations. 95 ac_cv_prog_lex_yytext_pointer=no 96 ac_save_LIBS=$LIBS 97 LIBS="$LEXLIB $ac_save_LIBS" 98 AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED 99 [#define YYTEXT_POINTER 1 100 `cat $LEX_OUTPUT_ROOT.c`]], 101 [ac_cv_prog_lex_yytext_pointer=yes]) 102 LIBS=$ac_save_LIBS 103 ]) 104 dnl 105 if test $ac_cv_prog_lex_yytext_pointer = yes; then 106 AC_DEFINE([YYTEXT_POINTER], [1], 107 [Define to 1 if `lex' declares `yytext' as a `char *' by default, 108 not a `char[]'.]) 109 fi 110 rm -f conftest.l $LEX_OUTPUT_ROOT.c 111 ])# _AC_PROG_LEX_YYTEXT_DECL 112