Обнаружение макроса препроцессора в другой библиотеке с помощью Autoconf

У меня есть установленная библиотека, которую мы назовем custom_lib, с которой я связываюсь.

Я хочу проверить, была ли эта библиотека установлена ​​с определенной опцией.

Заголовочный файл options.h в этой библиотеке содержит список макросов препроцессора, например:

#undef THIS
#define THIS

#undef THAT
#define THAT

#undef WE_WANT_THIS_ONE
#define WE_WANT_THIS_ONE

В другом проекте у меня в файле configure.ac есть этот тест:

 OPTION_FOUND="no"
 AC_CHECK_HEADERS(custom_lib/options.h)                                             
 AC_MSG_CHECKING([is libary configured with --enable-we_want_this_one])

 #AC_EGREP_HEADER([ string to match ],                                            
 #                [ header file ],                                               
 #                [ action if found ],                                           
 #                [ action if not found ])

 AC_EGREP_HEADER([[WE_WANT_THIS_ONE]],                                                      
                 [custom_lib/options.h],                                          
                 [OPTION_FOUND="yes"],                                    
                 [OPTION_FOUND="no"])                                     

 if test "$OPTION_FOUND" = "yes"                                            
 then                                                                            
     # If we have WE_WANT_THIS_ONE check to see which compiler is being used                
     if test "$GCC" = "yes"                                                      
     then                                                                        
         if test "$CC" != "icc"                                                  
         then                                                                    
             #if compiler is not icc then add these flags                        
             CFLAGS="$CFLAGS -maes -msse4"                                       
         fi                                                                      
     fi                                                                          
     AC_MSG_RESULT([yes])                                                        
else                                                                            
     AC_MSG_RESULT([no])                                                         
fi

Затем я выполняю autreconf и запускаю ./configure, который всегда возвращает это сообщение:

checking custom_lib/options.h usability... yes                                     
checking custom_lib/options.h presence... yes                                      
checking for custom_lib/options.h... yes
checking is library configured with --enable-we_want_this_one... no

Я делаю что-то неправильно. Что нужно изменить в тесте, который у меня есть в configure.ac, чтобы autoconf мог обнаруживать макрос препроцессора в options.h?


person Kaleb    schedule 22.09.2015    source источник


Ответы (1)


Макрос AC_EGREP_HEADER выполняет команду grep не для текста тестируемого заголовка, а для вывода препроцессора, работающего с этим файлом.

Из руководства по autoconf:

- Макрос: AC_EGREP_HEADER (шаблон, файл-заголовок, действие-если-найдено, [действие-если-не-найдено])

Если вывод выполнения препроцессора в файле заголовка файла системы соответствует шаблону расширенного регулярного выражения, выполните команды оболочки действие-если-найдено, в противном случае выполните действие-если-не-найдено.

Вместо этого вы можете использовать макрос AC_COMPILE_IFELSE. Например (не проверено):

AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include "custom_lib/options.h"
#ifndef WE_WANT_THIS_ONE
# error macro not defined
#endif
]])], [OPTION_FOUND="yes"], [OPTION_FOUND="no"])
person baf    schedule 24.09.2015
comment
Работает! Большое спасибо. Мне пришлось изменить вашу строку include, поскольку это установленная библиотека: #include ‹custom_lib / options.h› - person Kaleb; 24.09.2015