diff options
author | Olaf Lenz <olenz@icp.uni-stuttgart.de> | 2014-08-28 15:22:34 +0100 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2014-09-13 23:41:45 +0200 |
commit | f5594485ce75edaceaae412f9c243e355ed1db4a (patch) | |
tree | 6b7106cd78c49b26fd796d8af4c94652bf6187ef /m4/ax_cxx_var_prettyfunc.m4 | |
parent | dc824114e248a6bed97f33aba1bd61f866059360 (diff) | |
download | autoconf-archive-f5594485ce75edaceaae412f9c243e355ed1db4a.tar.gz |
AX_CXX_VAR_PRETTYFUNC: new macro to determine the function name
This new macro determines the best way to get the name of the current function
for different C++-compilers and -dialects (in the spirit of _FILE_ and _LINE_).
The patch also fixes some problems in AX_C_VAR_FUNC.
Submitted in <https://savannah.gnu.org/patch/index.php?8524>.
Diffstat (limited to 'm4/ax_cxx_var_prettyfunc.m4')
-rw-r--r-- | m4/ax_cxx_var_prettyfunc.m4 | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/m4/ax_cxx_var_prettyfunc.m4 b/m4/ax_cxx_var_prettyfunc.m4 new file mode 100644 index 0000000..6c5913b --- /dev/null +++ b/m4/ax_cxx_var_prettyfunc.m4 @@ -0,0 +1,91 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_cxx_var_prettyfunc.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_VAR_PRETTYFUNC +# +# DESCRIPTION +# +# This function tries to determine the best C++ macro/identifier that +# contains the current function name. Depending on the compiler, this may +# be __PRETTY_FUNCTION__ (GCC), __FUNCSIG__ (MSVC), __func__ (C++ +# standard), __FUNCTION__ (fallback). +# +# The function will define HAVE_PRETTYFUNC if a macro exists, and define +# __PRETTYFUNC__ to the best possible macro. When HAVE_PRETTYFUNC is not +# defined, __PRETTYFUNC__ will contain the constant string "<<unknown>>". +# +# LICENSE +# +# Copyright (c) 2014 Olaf Lenz <olenz@icp.uni-stuttgart.de> +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 1 + +AC_DEFUN([AX_CXX_VAR_PRETTYFUNC], +[ +# try to find best __FUNCTION__ variant + +AC_CACHE_CHECK([whether $CXX can get a pretty function name], ac_cv_cxx_var_prettyfunc, + ac_cv_cxx_var_prettyfunc=no + + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM(,[const char *s = __PRETTY_FUNCTION__])], + [ ac_cv_cxx_var_prettyfunc=__PRETTY_FUNCTION__ ]) + + AS_IF([test "x$ac_cv_cxx_var_prettyfunc" = "xno"], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM(,[const char *s = __FUNCSIG__])], + [ ac_cv_cxx_var_prettyfunc=__FUNCSIG__ ]) + ]) + + AS_IF([test "x$ac_cv_cxx_var_prettyfunc" = "xno"], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM(,[const char *s = __func__])], + [ ac_cv_cxx_var_prettyfunc=__func__ ]) + ]) + + AS_IF([test "x$ac_cv_cxx_var_prettyfunc" = "xno"], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM(,[const char *s = __FUNCTION__])], + [ ac_cv_cxx_var_prettyfunc=__FUNCTION__ ]) + ]) +) + + +AS_IF([test "x$ac_cv_cxx_var_prettyfunc" != "xno"], [ + AC_DEFINE(HAVE_PRETTYFUNC,, [Whether __PRETTY_FUNCTION__ has a useful value.]) + AC_DEFINE_UNQUOTED(__PRETTYFUNC__,$ac_cv_cxx_var_prettyfunc, + [contains the function wherein the macro is called]) +],[ + AC_DEFINE(__PRETTYFUNC__,"<<unknown>>") +]) + +])dnl |