manpagez: man pages & more
info autoconf
Home | html | info | man

File: autoconf.info,  Node: Language Choice,  Next: Writing Test Programs,  Up: Writing Tests

6.1 Language Choice
===================

Autoconf-generated ‘configure’ scripts check for the C compiler and its
features by default.  Packages that use other programming languages
(maybe more than one, e.g., C and C++) need to test features of the
compilers for the respective languages.  The following macros determine
which programming language is used in the subsequent tests in
‘configure.ac’.

 -- Macro: AC_LANG (LANGUAGE)
     Do compilation tests using the compiler, preprocessor, and file
     extensions for the specified LANGUAGE.

     Supported languages are:

     ‘C’
          Do compilation tests using ‘CC’ and ‘CPP’ and use extension
          ‘.c’ for test programs.  Use compilation flags: ‘CPPFLAGS’
          with ‘CPP’, and both ‘CPPFLAGS’ and ‘CFLAGS’ with ‘CC’.

     ‘C++’
          Do compilation tests using ‘CXX’ and ‘CXXCPP’ and use
          extension ‘.C’ for test programs.  Use compilation flags:
          ‘CPPFLAGS’ with ‘CXXCPP’, and both ‘CPPFLAGS’ and ‘CXXFLAGS’
          with ‘CXX’.

     ‘Fortran 77’
          Do compilation tests using ‘F77’ and use extension ‘.f’ for
          test programs.  Use compilation flags: ‘FFLAGS’.

     ‘Fortran’
          Do compilation tests using ‘FC’ and use extension ‘.f’ (or
          whatever has been set by ‘AC_FC_SRCEXT’) for test programs.
          Use compilation flags: ‘FCFLAGS’.

     ‘Erlang’
          Compile and execute tests using ‘ERLC’ and ‘ERL’ and use
          extension ‘.erl’ for test Erlang modules.  Use compilation
          flags: ‘ERLCFLAGS’.

     ‘Objective C’
          Do compilation tests using ‘OBJC’ and ‘OBJCPP’ and use
          extension ‘.m’ for test programs.  Use compilation flags:
          ‘CPPFLAGS’ with ‘OBJCPP’, and both ‘CPPFLAGS’ and ‘OBJCFLAGS’
          with ‘OBJC’.

     ‘Objective C++’
          Do compilation tests using ‘OBJCXX’ and ‘OBJCXXCPP’ and use
          extension ‘.mm’ for test programs.  Use compilation flags:
          ‘CPPFLAGS’ with ‘OBJCXXCPP’, and both ‘CPPFLAGS’ and
          ‘OBJCXXFLAGS’ with ‘OBJCXX’.

     ‘Go’
          Do compilation tests using ‘GOC’ and use extension ‘.go’ for
          test programs.  Use compilation flags ‘GOFLAGS’.

 -- Macro: AC_LANG_PUSH (LANGUAGE)
     Remember the current language (as set by ‘AC_LANG’) on a stack, and
     then select the LANGUAGE.  Use this macro and ‘AC_LANG_POP’ in
     macros that need to temporarily switch to a particular language.

 -- Macro: AC_LANG_POP ([LANGUAGE])
     Select the language that is saved on the top of the stack, as set
     by ‘AC_LANG_PUSH’, and remove it from the stack.

     If given, LANGUAGE specifies the language we just _quit_.  It is a
     good idea to specify it when it's known (which should be the
     case...), since Autoconf detects inconsistencies.

          AC_LANG_PUSH([Fortran 77])
          # Perform some tests on Fortran 77.
          # ...
          AC_LANG_POP([Fortran 77])

 -- Macro: AC_LANG_ASSERT (LANGUAGE)
     Check statically that the current language is LANGUAGE.  You should
     use this in your language specific macros to avoid that they be
     called with an inappropriate language.

     This macro runs only at ‘autoconf’ time, and incurs no cost at
     ‘configure’ time.  Sadly enough and because Autoconf is a two layer
     language (1), the macros ‘AC_LANG_PUSH’ and ‘AC_LANG_POP’ cannot be
     "optimizing", therefore as much as possible you ought to avoid
     using them to wrap your code, rather, require from the user to run
     the macro with a correct current language, and check it with
     ‘AC_LANG_ASSERT’.  And anyway, that may help the user understand
     she is running a Fortran macro while expecting a result about her
     Fortran 77 compiler...

 -- Macro: AC_REQUIRE_CPP
     Ensure that whichever preprocessor would currently be used for
     tests has been found.  Calls ‘AC_REQUIRE’ (*note Prerequisite
     Macros::) with an argument of either ‘AC_PROG_CPP’ or
     ‘AC_PROG_CXXCPP’, depending on which language is current.

   ---------- Footnotes ----------

   (1) Because M4 is not aware of Sh code, especially conditionals, some
optimizations that look nice statically may produce incorrect results at
runtime.

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.