[ << ] [ < ] [ Acima ] [ > ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

Apêndice C Macros Autoconf

Para aplicações usando autoconf a macro padrão AC_CHECK_LIB pode ser usada para linkar com a GSL automaticamente a partir de um script configure. A biblioteca propriamente dita depende da presença de uma CBLAS e da math library também, de forma que essas devem também ser localizadas antes linkando com o arquivo principal libgsl. Os seguintes comandos devem ser colocados no arquivo ‘configure.ac’ para executar esses testes,

AC_CHECK_LIB([m],[cos])
AC_CHECK_LIB([gslcblas],[cblas_dgemm])
AC_CHECK_LIB([gsl],[gsl_blas_dgemm])

É importante verificar a presença da libm e da libgslcblas antes da libgsl, de outras formas os testes irão falhar. Assumindo que as bibliotecas foram encontradas a saída durante o estágio de configuração se parecerá com o seguinte,

checking for cos in -lm... yes
checking for cblas_dgemm in -lgslcblas... yes
checking for gsl_blas_dgemm in -lgsl... yes

Se a biblioteca for encontrada então os testes irão definir as macros HAVE_LIBGSL, HAVE_LIBGSLCBLAS, HAVE_LIBM e adiciona as opções -lgsl -lgslcblas -lm à variável LIBS.

Os testes acima irão encontrar qualquer versão da biblioteca. Eles são adequados para uso geral, onde a versão das funções não são importantes. Uma macro alternativa está disponível no arquivo ‘gsl.m4’ para testar a presença de uma versão específica da biblioteca. Para usar essa macro simplesmente adicione a seguinte linha a seu arquivo ‘configure.in’ ao invés dos testes acima:

AX_PATH_GSL(GSL_VERSION,
           [action-if-found],
           [action-if-not-found])

O argumento GSL_VERSION deve ser os dois ou três dígitos do número da versão MAJOR.MINOR ou MAJOR.MINOR.MICRO do release que você deseja. Uma escolha adequada para action-if-not-found é,

AC_MSG_ERROR(could not find required version of GSL)

Então você pode adicionar a variável GSL_LIBS e GSL_CFLAGS a seu arquivo Makefile.am para obter os sinalizadores de compilação corretos. GSL_LIBS é igual à saída do comando gsl-config --libs e a variável GSL_CFLAGS é igual ao comando gsl-config --cflags. Por exemplo,

libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas

Note que a macro AX_PATH_GSL precisa usar o compilador C de forma a que isso possa aparecer no arquivo ‘configure.in’ antes da macro AC_LANG_CPLUSPLUS para programas que usam C++.

Para testar a presença de inline o seguinte teste deve ser colocada em seu arquivo ‘configure.in’,

AC_C_INLINE

if test "$ac_cv_c_inline" != no ; then
  AC_DEFINE(HAVE_INLINE,1)
  AC_SUBST(HAVE_INLINE)
fi

e a macro irá então ser definida nos sinalizadores de compilação ou incluída no arquivo ‘config.h’ antes de qualquer cabeçalhos de biblioteca.

O seguinte teste autoconf irá verificar extern inline,

dnl Check for "extern inline", using a modified version
dnl of the test for AC_C_INLINE from acspecific.mt
dnl
AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline,
[ac_cv_c_extern_inline=no
AC_TRY_COMPILE([extern $ac_cv_c_inline double foo(double x);
extern $ac_cv_c_inline double foo(double x) { return x+1.0; };
double foo (double x) { return x + 1.0; };], 
[  foo(1.0)  ],
[ac_cv_c_extern_inline="yes"])
])

if test "$ac_cv_c_extern_inline" != no ; then
  AC_DEFINE(HAVE_INLINE,1)
  AC_SUBST(HAVE_INLINE)
fi

A substituição de funções de portabilidade pode ser feita automaticamente se você usa autoconf. Por exemplo, para testar se a função BSD hypot está disponível você pode incluir a seguinte linha no arquivo configure ‘configure.in’ para sua aplicação,

AC_CHECK_FUNCS(hypot)

e coloque a seguinte macro no arquivo ‘config.h.in’,

/* Substitute gsl_hypot for missing system hypot */

#ifndef HAVE_HYPOT
#define hypot gsl_hypot
#endif

Os códigos fonte da sua aplicação podem então usar o comando include #include <config.h> para substituir gsl_hypot a cada ocorrência de hypot quando hypot não estiver disponível.


[ << ] [ >> ]           [Topo] [Conteúdo] [Índice] [ ? ]

Esse documento foi gerado em 23 de Julho de 2013 usando texi2html 5.0.