2012-11-24 52 views
4

顯然gnuflex在MacOS & Linux需要的-R選項或%option reentrant產生一個折返掃描儀,但在FreeBSD默認情況下它產生一個折返掃描儀和是否提供了-R%option reentrant拋出一個錯誤。我想讓autoconf自動檢查gnuflex是否允許使用-R選項,如果有,請提供它。我不清楚我可以如何爲此做autoconf測試。我的猜測是我應該在-R文件的空文件上運行gnuflex,並檢查結果代碼並設置某種變量,然後將它添加到FLEX選項中,但我並不確定。有任何想法嗎?如何讓autoconf檢查看-R是否可以傳遞給flex?

回答

2

我假設你已經設置了$FLEX,可能是AC_ARG_VARAC_PATH_PROG的組合。

AC_CACHE_CHECK([whether $FLEX supports -R], 
       [my_cv_prog_flex_dash_r], 
       [mv_cv_prog_flex_dash_r=no 
       echo '%%' | "$FLEX" -R && my_cv_prog_flex_dash_r=yes 
       rm -f lex.yy.c]) 
AS_IF([test $my_cv_prog_flex_dash_r = yes], [FLEX="$FLEX -R"]) 
1

這是我最終做的。它比@Jack凱利的可讀性更強,而且它不會創建一個側可變...

## Determine if we can use flex -R                      
if eval "echo %% | $FLEX -R -t > /dev/null 2>&1" 
then 
    AC_MSG_NOTICE([$FLEX supports -R]) 
else 
    AC_MSG_ERROR([$FLEX does not support -R. Please get a modern version of gnu flex]) 
fi 
+0

1.這不一定是致命的,如果彎曲不支持-R。 2.在進行配置檢查時,你應該使用'AC_MSG_CHECKING' /'AC_MSG_RESULT'。 3.「變量」用於緩存,這加快了'configure'的將來運行(如果它是用'-C'調用的話)。 –

+0

對我的程序來說是致命的。你認爲我應該讓腳本運行,但然後拋出一個編譯錯誤? – vy32

+0

這不是我讀你的問題。它向我這樣讀,就像你可以運行沒有-R的FreeBSD flex或-R的gnuflex來獲得一個可重入的掃描器,生成你的詞法分析器並正常構建它。 (我知道你只使用autoconf,但是你知道automake的flex支持將生成的詞法分析器分發到tarball嗎?這可能也是一種選擇。) –

相關問題