mirror of
git://git.sv.gnu.org/autoconf
synced 2024-12-09 02:10:22 +08:00
Implement and document Objective C++ support.
* lib/autoconf/c.m4 (AC_LANG(Objective C++), AC_LANG_OBJCXX) (AC_LANG_PREPROC(Objective C++), AC_PROG_OBJCXXCPP) (AC_LANG_COMPILER(Objective C++), AC_PROG_OBJCXX) (_AC_PROG_OBJCXX_G): New macros. (_AC_ARG_VAR_CPPFLAGS, _AC_ARG_VAR_LDFLAGS) (_AC_ARG_VAR_LIBS): Adjusted. * doc/autoconf.texi (Objective C++ Compiler): New node. (Preset Output Variables): Document OBJCXXFLAGS. (Language Choice): Document `Objective C++' language. * NEWS: Updated. * tests/local.at (AT_CHECK_ENV): Ignore AC_SUBSTed Objective C++ related variables. Signed-off-by: Peter Breitenlohner <peb@mppmu.mpg.de> Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
parent
c8c7589040
commit
e5ddeae43a
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
2009-09-15 Peter Breitenlohner <peb@mppmu.mpg.de>
|
||||
|
||||
Implement and document Objective C++ support.
|
||||
* lib/autoconf/c.m4 (AC_LANG(Objective C++), AC_LANG_OBJCXX)
|
||||
(AC_LANG_PREPROC(Objective C++), AC_PROG_OBJCXXCPP)
|
||||
(AC_LANG_COMPILER(Objective C++), AC_PROG_OBJCXX)
|
||||
(_AC_PROG_OBJCXX_G): New macros.
|
||||
(_AC_ARG_VAR_CPPFLAGS, _AC_ARG_VAR_LDFLAGS)
|
||||
(_AC_ARG_VAR_LIBS): Adjusted.
|
||||
* doc/autoconf.texi (Objective C++ Compiler): New node.
|
||||
(Preset Output Variables): Document OBJCXXFLAGS.
|
||||
(Language Choice): Document `Objective C++' language.
|
||||
* NEWS: Updated.
|
||||
* tests/local.at (AT_CHECK_ENV): Ignore AC_SUBSTed Objective C++
|
||||
related variables.
|
||||
|
||||
2009-09-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||
|
||||
Work around DJGPP shell function return bug with command substitutions.
|
||||
|
3
NEWS
3
NEWS
@ -8,6 +8,9 @@ GNU Autoconf NEWS - User visible changes.
|
||||
an exception clause so that you may release a configure script
|
||||
generated by autoconf under the license of your own program.
|
||||
|
||||
** New macros to support Objective C++.
|
||||
AC_PROG_OBJCXX AC_PROG_OBJCXXCPP
|
||||
|
||||
** The following undocumented autoconf macros, removed in Autoconf 2.64,
|
||||
have been reinstated:
|
||||
AH_CHECK_HEADERS
|
||||
|
@ -391,6 +391,7 @@ Compilers and Preprocessors
|
||||
* C Compiler:: Checking its characteristics
|
||||
* C++ Compiler:: Likewise
|
||||
* Objective C Compiler:: Likewise
|
||||
* Objective C++ Compiler:: Likewise
|
||||
* Erlang Compiler and Interpreter:: Likewise
|
||||
* Fortran Compiler:: Likewise
|
||||
|
||||
@ -2432,11 +2433,12 @@ needs to be processed by @command{configure} in order to be used.
|
||||
@defvar CPPFLAGS
|
||||
@evindex CPPFLAGS
|
||||
@ovindex CPPFLAGS
|
||||
Preprocessor options for the C, C++, and Objective C preprocessors and
|
||||
compilers. If
|
||||
Preprocessor options for the C, C++, Objective C, and Objective C++
|
||||
preprocessors and compilers. If
|
||||
it is not set in the environment when @command{configure} runs, the default
|
||||
value is empty. @command{configure} uses this variable when preprocessing
|
||||
or compiling programs to test for C, C++, and Objective C features.
|
||||
or compiling programs to test for C, C++, Objective C, and Objective C++
|
||||
features.
|
||||
|
||||
This variable's contents should contain options like @option{-I},
|
||||
@option{-D}, and @option{-U} that affect only the behavior of the
|
||||
@ -2527,7 +2529,7 @@ programs to test for Fortran 77 features.
|
||||
Options for the linker. If it is not set
|
||||
in the environment when @command{configure} runs, the default value is empty.
|
||||
@command{configure} uses this variable when linking programs to test for
|
||||
C, C++, Objective C, and Fortran features.
|
||||
C, C++, Objective C, Objective C++, and Fortran features.
|
||||
|
||||
This variable's contents should contain options like @option{-s} and
|
||||
@option{-L} that affect only the behavior of the linker. Please see the
|
||||
@ -2545,7 +2547,8 @@ Don't use this variable to pass library names
|
||||
but some Autoconf macros may prepend extra libraries to this variable if
|
||||
those libraries are found and provide necessary functions, see
|
||||
@ref{Libraries}. @command{configure} uses this variable when linking
|
||||
programs to test for C, C++, and Fortran features.
|
||||
programs to test for C, C++, Objective C, Objective C++, and Fortran
|
||||
features.
|
||||
@end defvar
|
||||
|
||||
@defvar OBJCFLAGS
|
||||
@ -2555,6 +2558,13 @@ Debugging and optimization options for the Objective C compiler. It
|
||||
acts like @code{CFLAGS}, but for Objective C instead of C.
|
||||
@end defvar
|
||||
|
||||
@defvar OBJCXXFLAGS
|
||||
@evindex OBJCXXFLAGS
|
||||
@ovindex OBJCXXFLAGS
|
||||
Debugging and optimization options for the Objective C++ compiler. It
|
||||
acts like @code{CXXFLAGS}, but for Objective C++ instead of C++.
|
||||
@end defvar
|
||||
|
||||
@defvar builddir
|
||||
@ovindex builddir
|
||||
Rigorously equal to @samp{.}. Added for symmetry only.
|
||||
@ -6549,6 +6559,7 @@ compiling.
|
||||
* C Compiler:: Checking its characteristics
|
||||
* C++ Compiler:: Likewise
|
||||
* Objective C Compiler:: Likewise
|
||||
* Objective C++ Compiler:: Likewise
|
||||
* Erlang Compiler and Interpreter:: Likewise
|
||||
* Fortran Compiler:: Likewise
|
||||
@end menu
|
||||
@ -7252,6 +7263,47 @@ preprocessor. If @samp{$OBJC -E} doesn't work, @file{/lib/cpp} is used.
|
||||
@end defmac
|
||||
|
||||
|
||||
@node Objective C++ Compiler
|
||||
@subsection Objective C++ Compiler Characteristics
|
||||
|
||||
|
||||
@defmac AC_PROG_OBJCXX (@ovar{compiler-search-list})
|
||||
@acindex{PROG_OBJCXX}
|
||||
@evindex OBJCXX
|
||||
@evindex OBJCXXFLAGS
|
||||
@ovindex OBJCXX
|
||||
@ovindex OBJCXXFLAGS
|
||||
Determine an Objective C++ compiler to use. If @code{OBJCXX} is not already
|
||||
set in the environment, check for Objective C++ compilers. Set output
|
||||
variable @code{OBJCXX} to the name of the compiler found.
|
||||
|
||||
This macro may, however, be invoked with an optional first argument
|
||||
which, if specified, must be a blank-separated list of Objective C++ compilers
|
||||
to search for. This just gives the user an opportunity to specify an
|
||||
alternative search list for the Objective C++ compiler. For example, if you
|
||||
didn't like the default order, then you could invoke @code{AC_PROG_OBJCXX}
|
||||
like this:
|
||||
|
||||
@example
|
||||
AC_PROG_OBJCXX([gcc g++ objcc++ objcxx])
|
||||
@end example
|
||||
|
||||
If using the @acronym{GNU} Objective C++ compiler, set shell variable
|
||||
@code{GOBJCXX} to @samp{yes}. If output variable @code{OBJCXXFLAGS} was not
|
||||
already set, set it to @option{-g -O2} for the @acronym{GNU} Objective C++
|
||||
compiler (@option{-O2} on systems where @command{gcc} does not accept
|
||||
@option{-g}), or @option{-g} for other compilers.
|
||||
@end defmac
|
||||
|
||||
@defmac AC_PROG_OBJCXXCPP
|
||||
@acindex{PROG_OBJCXXCPP}
|
||||
@evindex OBJCXXCPP
|
||||
@ovindex OBJCXXCPP
|
||||
Set output variable @code{OBJCXXCPP} to a command that runs the Objective C++
|
||||
preprocessor. If @samp{$OBJCXX -E} doesn't work, @file{/lib/cpp} is used.
|
||||
@end defmac
|
||||
|
||||
|
||||
@node Erlang Compiler and Interpreter
|
||||
@subsection Erlang Compiler and Interpreter Characteristics
|
||||
@cindex Erlang
|
||||
@ -8059,6 +8111,12 @@ Do compilation tests using @code{OBJC} and @code{OBJCPP} and use
|
||||
extension @file{.m} for test programs. Use compilation flags:
|
||||
@code{CPPFLAGS} with @code{OBJCPP}, and both @code{CPPFLAGS} and
|
||||
@code{OBJCFLAGS} with @code{OBJC}.
|
||||
|
||||
@item Objective C++
|
||||
Do compilation tests using @code{OBJCXX} and @code{OBJCXXCPP} and use
|
||||
extension @file{.mm} for test programs. Use compilation flags:
|
||||
@code{CPPFLAGS} with @code{OBJCXXCPP}, and both @code{CPPFLAGS} and
|
||||
@code{OBJCXXFLAGS} with @code{OBJCXX}.
|
||||
@end table
|
||||
@end defmac
|
||||
|
||||
|
@ -36,10 +36,11 @@
|
||||
# 1a. C 2a. C
|
||||
# 1b. C++
|
||||
# 1c. Objective C
|
||||
# 1d. Objective C++
|
||||
#
|
||||
# 3. Looking for a compiler
|
||||
# And possibly the associated preprocessor.
|
||||
# 3a. C 3b. C++ 3c. Objective C
|
||||
# 3a. C 3b. C++ 3c. Objective C 3d. Objective C++
|
||||
#
|
||||
# 4. Compilers' characteristics.
|
||||
# 4a. C
|
||||
@ -274,6 +275,23 @@ AU_DEFUN([AC_LANG_OBJC], [AC_LANG(Objective C)])
|
||||
|
||||
|
||||
|
||||
## -------------------------------- ##
|
||||
## 1d. The Objective C++ language. ##
|
||||
## -------------------------------- ##
|
||||
|
||||
|
||||
# AC_LANG(Objective C++)
|
||||
# ----------------------
|
||||
AC_LANG_DEFINE([Objective C++], [objcxx], [OBJCXX], [C++],
|
||||
[ac_ext=mm
|
||||
ac_cpp='$OBJCXXCPP $CPPFLAGS'
|
||||
ac_compile='$OBJCXX -c $OBJCXXFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
|
||||
ac_link='$OBJCXX -o conftest$ac_exeext $OBJCXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
|
||||
ac_compiler_gnu=$ac_cv_objcxx_compiler_gnu
|
||||
])
|
||||
|
||||
|
||||
|
||||
## -------------------------------------------- ##
|
||||
## 3. Looking for Compilers and Preprocessors. ##
|
||||
## -------------------------------------------- ##
|
||||
@ -286,17 +304,17 @@ AU_DEFUN([AC_LANG_OBJC], [AC_LANG(Objective C)])
|
||||
# _AC_ARG_VAR_CPPFLAGS
|
||||
# --------------------
|
||||
# Document and register CPPFLAGS, which is used by
|
||||
# AC_PROG_{CC, CPP, CXX, CXXCPP, OBJC, OBJCPP}.
|
||||
# AC_PROG_{CC, CPP, CXX, CXXCPP, OBJC, OBJCPP, OBJCXX, OBJCXXCPP}.
|
||||
AC_DEFUN([_AC_ARG_VAR_CPPFLAGS],
|
||||
[AC_ARG_VAR([CPPFLAGS],
|
||||
[C/C++/Objective C preprocessor flags, e.g. -I<include dir>
|
||||
[(Objective) C/C++ preprocessor flags, e.g. -I<include dir>
|
||||
if you have headers in a nonstandard directory <include dir>])])
|
||||
|
||||
|
||||
# _AC_ARG_VAR_LDFLAGS
|
||||
# -------------------
|
||||
# Document and register LDFLAGS, which is used by
|
||||
# AC_PROG_{CC, CXX, F77, FC, OBJC}.
|
||||
# AC_PROG_{CC, CXX, F77, FC, OBJC, OBJCXX}.
|
||||
AC_DEFUN([_AC_ARG_VAR_LDFLAGS],
|
||||
[AC_ARG_VAR([LDFLAGS],
|
||||
[linker flags, e.g. -L<lib dir> if you have libraries in a
|
||||
@ -306,7 +324,7 @@ AC_DEFUN([_AC_ARG_VAR_LDFLAGS],
|
||||
# _AC_ARG_VAR_LIBS
|
||||
# ----------------
|
||||
# Document and register LIBS, which is used by
|
||||
# AC_PROG_{CC, CXX, F77, FC, OBJS}.
|
||||
# AC_PROG_{CC, CXX, F77, FC, OBJC, OBJCXX}.
|
||||
AC_DEFUN([_AC_ARG_VAR_LIBS],
|
||||
[AC_ARG_VAR([LIBS],
|
||||
[libraries to pass to the linker, e.g. -l<library>])])
|
||||
@ -925,6 +943,145 @@ fi[]dnl
|
||||
|
||||
|
||||
|
||||
# -------------------------------- #
|
||||
# 3d. The Objective C++ compiler. #
|
||||
# -------------------------------- #
|
||||
|
||||
|
||||
# AC_LANG_PREPROC(Objective C++)
|
||||
# ------------------------------
|
||||
# Find the Objective C++ preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
|
||||
AC_DEFUN([AC_LANG_PREPROC(Objective C++)],
|
||||
[AC_REQUIRE([AC_PROG_OBJCXXCPP])])
|
||||
|
||||
|
||||
# AC_PROG_OBJCXXCPP
|
||||
# -----------------
|
||||
# Find a working Objective C++ preprocessor.
|
||||
AC_DEFUN([AC_PROG_OBJCXXCPP],
|
||||
[AC_REQUIRE([AC_PROG_OBJCXX])dnl
|
||||
AC_ARG_VAR([OBJCXXCPP], [Objective C++ preprocessor])dnl
|
||||
_AC_ARG_VAR_CPPFLAGS()dnl
|
||||
AC_LANG_PUSH(Objective C++)dnl
|
||||
AC_MSG_CHECKING([how to run the Objective C++ preprocessor])
|
||||
if test -z "$OBJCXXCPP"; then
|
||||
AC_CACHE_VAL(ac_cv_prog_OBJCXXCPP,
|
||||
[dnl
|
||||
# Double quotes because OBJCXXCPP needs to be expanded
|
||||
for OBJCXXCPP in "$OBJCXX -E" "/lib/cpp"
|
||||
do
|
||||
_AC_PROG_PREPROC_WORKS_IFELSE([break])
|
||||
done
|
||||
ac_cv_prog_OBJCXXCPP=$OBJCXXCPP
|
||||
])dnl
|
||||
OBJCXXCPP=$ac_cv_prog_OBJCXXCPP
|
||||
else
|
||||
ac_cv_prog_OBJCXXCPP=$OBJCXXCPP
|
||||
fi
|
||||
AC_MSG_RESULT([$OBJCXXCPP])
|
||||
_AC_PROG_PREPROC_WORKS_IFELSE([],
|
||||
[AC_MSG_FAILURE([Objective C++ preprocessor "$OBJCXXCPP" fails sanity check])])
|
||||
AC_SUBST(OBJCXXCPP)dnl
|
||||
AC_LANG_POP(Objective C++)dnl
|
||||
])# AC_PROG_OBJCXXCPP
|
||||
|
||||
|
||||
# AC_LANG_COMPILER(Objective C++)
|
||||
# -------------------------------
|
||||
# Find the Objective C++ compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
|
||||
AC_DEFUN([AC_LANG_COMPILER(Objective C++)],
|
||||
[AC_REQUIRE([AC_PROG_OBJCXX])])
|
||||
|
||||
|
||||
|
||||
# AC_PROG_OBJCXX([LIST-OF-COMPILERS])
|
||||
# ---------------------------------
|
||||
# LIST-OF-COMPILERS is a space separated list of Objective C++ compilers to
|
||||
# search for (if not specified, a default list is used). This just gives
|
||||
# the user an opportunity to specify an alternative search list for the
|
||||
# Objective C++ compiler.
|
||||
# FIXME: this list is pure guesswork
|
||||
# objc++ StepStone Objective-C++ compiler (also "standard" name for OBJCXX)
|
||||
# objcxx David Stes' POC. If you installed this, you likely want it.
|
||||
# c++ Native C++ compiler (for instance, Apple).
|
||||
# CXX You never know.
|
||||
AN_MAKEVAR([OBJCXX], [AC_PROG_OBJCXX])
|
||||
AN_PROGRAM([objcxx], [AC_PROG_OBJCXX])
|
||||
AC_DEFUN([AC_PROG_OBJCXX],
|
||||
[AC_LANG_PUSH(Objective C++)dnl
|
||||
AC_ARG_VAR([OBJCXX], [Objective C++ compiler command])dnl
|
||||
AC_ARG_VAR([OBJCXXFLAGS], [Objective C++ compiler flags])dnl
|
||||
_AC_ARG_VAR_LDFLAGS()dnl
|
||||
_AC_ARG_VAR_LIBS()dnl
|
||||
_AC_ARG_VAR_CPPFLAGS()dnl
|
||||
_AC_ARG_VAR_PRECIOUS([OBJCXX])dnl
|
||||
AC_CHECK_TOOLS(OBJCXX,
|
||||
[m4_default([$1], [g++ objc++ objcxx c++ CXX])],
|
||||
g++)
|
||||
# Provide some information about the compiler.
|
||||
_AS_ECHO_LOG([checking for _AC_LANG compiler version])
|
||||
set X $ac_compile
|
||||
ac_compiler=$[2]
|
||||
for ac_option in --version -v -V -qversion; do
|
||||
_AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
|
||||
done
|
||||
|
||||
m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
|
||||
m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
|
||||
_AC_LANG_COMPILER_GNU
|
||||
if test $ac_compiler_gnu = yes; then
|
||||
GOBJCXX=yes
|
||||
else
|
||||
GOBJCXX=
|
||||
fi
|
||||
_AC_PROG_OBJCXX_G
|
||||
AC_LANG_POP(Objective C++)dnl
|
||||
])# AC_PROG_OBJCXX
|
||||
|
||||
|
||||
# _AC_PROG_OBJCXX_G
|
||||
# -----------------
|
||||
# Check whether -g works, even if OBJCFLAGS is set, in case the package
|
||||
# plays around with OBJCFLAGS (such as to build both debugging and
|
||||
# normal versions of a library), tasteless as that idea is.
|
||||
# Don't consider -g to work if it generates warnings when plain compiles don't.
|
||||
m4_define([_AC_PROG_OBJCXX_G],
|
||||
[ac_test_OBJCXXFLAGS=${OBJCXXFLAGS+set}
|
||||
ac_save_OBJCXXFLAGS=$OBJCXXFLAGS
|
||||
AC_CACHE_CHECK(whether $OBJCXX accepts -g, ac_cv_prog_objcxx_g,
|
||||
[ac_save_objcxx_werror_flag=$ac_objcxx_werror_flag
|
||||
ac_objcxx_werror_flag=yes
|
||||
ac_cv_prog_objcxx_g=no
|
||||
OBJCXXFLAGS="-g"
|
||||
_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
|
||||
[ac_cv_prog_objcxx_g=yes],
|
||||
[OBJCXXFLAGS=""
|
||||
_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
|
||||
[],
|
||||
[ac_objcxx_werror_flag=$ac_save_objcxx_werror_flag
|
||||
OBJCXXFLAGS="-g"
|
||||
_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
|
||||
[ac_cv_prog_objcxx_g=yes])])])
|
||||
ac_objcxx_werror_flag=$ac_save_objcx_werror_flag])
|
||||
if test "$ac_test_OBJCXXFLAGS" = set; then
|
||||
OBJCXXFLAGS=$ac_save_OBJCXXFLAGS
|
||||
elif test $ac_cv_prog_objcxx_g = yes; then
|
||||
if test "$GOBJCXX" = yes; then
|
||||
OBJCXXFLAGS="-g -O2"
|
||||
else
|
||||
OBJCXXFLAGS="-g"
|
||||
fi
|
||||
else
|
||||
if test "$GOBJCXX" = yes; then
|
||||
OBJCXXFLAGS="-O2"
|
||||
else
|
||||
OBJCXXFLAGS=
|
||||
fi
|
||||
fi[]dnl
|
||||
])# _AC_PROG_OBJCXX_G
|
||||
|
||||
|
||||
|
||||
## ------------------------------- ##
|
||||
## 4. Compilers' characteristics. ##
|
||||
## ------------------------------- ##
|
||||
|
@ -296,6 +296,7 @@ if test -f state-env.before && test -f state-env.after; then
|
||||
[ERL|ERLC|ERLCFLAGS|ERLANG_PATH_ERL|ERLANG_ROOT_DIR|ERLANG_LIB_DIR],
|
||||
[ERLANG_LIB_DIR_.*|ERLANG_LIB_VER_.*|ERLANG_INSTALL_LIB_DIR],
|
||||
[ERLANG_INSTALL_LIB_DIR_.*|ERLANG_ERTS_VER|OBJC|OBJCPP|OBJCFLAGS],
|
||||
[OBJCXX|OBJCXXCPP|OBJCXXFLAGS],
|
||||
[OPENMP_CFLAGS],
|
||||
[LIBS|LIB@&t@OBJS|LTLIBOBJS|LDFLAGS],
|
||||
[INSTALL(_(DATA|PROGRAM|SCRIPT))?],
|
||||
|
Loading…
Reference in New Issue
Block a user