Info Node: (gsl-ref.info)Autoconf Macros

CFHT HOME gsl-ref.info: Autoconf Macros


up: Top next: GSL CBLAS Library prev: Contributors to GSL Back to Software Index

50 Autoconf Macros
******************

For applications using ‘autoconf’ the standard macro ‘AC_CHECK_LIB’ can
be used to link with GSL automatically from a ‘configure’ script.  The
library itself depends on the presence of a CBLAS and math library as
well, so these must also be located before linking with the main
‘libgsl’ file.  The following commands should be placed in the
‘configure.ac’ file to perform these tests:

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

It is important to check for ‘libm’ and ‘libgslcblas’ before ‘libgsl’,
otherwise the tests will fail.  Assuming the libraries are found the
output during the configure stage looks like this:

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

If the library is found then the tests will define the macros
‘HAVE_LIBGSL’, ‘HAVE_LIBGSLCBLAS’, ‘HAVE_LIBM’ and add the options
‘-lgsl -lgslcblas -lm’ to the variable ‘LIBS’.

The tests above will find any version of the library.  They are suitable
for general use, where the versions of the functions are not important.
An alternative macro is available in the file ‘gsl.m4’ to test for a
specific version of the library.  To use this macro simply add the
following line to your ‘configure.in’ file instead of the tests above:

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

The argument ‘GSL_VERSION’ should be the two or three digit
‘major.minor’ or ‘major.minor.micro’ version number of the release you
require.  A suitable choice for ‘action-if-not-found’ is:

     AC_MSG_ERROR(could not find required version of GSL)

Then you can add the variables ‘GSL_LIBS’ and ‘GSL_CFLAGS’ to your
Makefile.am files to obtain the correct compiler flags.  ‘GSL_LIBS’ is
equal to the output of the ‘gsl-config --libs’ command and ‘GSL_CFLAGS’
is equal to ‘gsl-config --cflags’ command.  For example:

     libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas

Note that the macro ‘AX_PATH_GSL’ needs to use the C compiler so it
should appear in the ‘configure.in’ file before the macro
‘AC_LANG_CPLUSPLUS’ for programs that use C++.

To test for ‘inline’ the following test should be placed in your
‘configure.in’ file:

     AC_C_INLINE

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

and the macro will then be defined in the compilation flags or by
including the file ‘config.h’ before any library headers.

The following autoconf test will check for ‘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

The substitution of portability functions can be made automatically if
you use ‘autoconf’.  For example, to test whether the BSD function
‘hypot()’ is available you can include the following line in the
configure file ‘configure.in’ for your application:

     AC_CHECK_FUNCS(hypot)

and place the following macro definitions in the file ‘config.h.in’:

     /* Substitute gsl_hypot for missing system hypot */

     #ifndef HAVE_HYPOT
     #define hypot gsl_hypot
     #endif

The application source files can then use the include command ‘#include
<config.h>’ to substitute Note: gsl_hypot(). for each occurrence of
‘hypot()’ when ‘hypot()’ is not available.


automatically generated by info2www version 1.2