summaryrefslogtreecommitdiff
path: root/m4/ax_cxx_var_prettyfunc.m4
diff options
context:
space:
mode:
authorOlaf Lenz <olenz@icp.uni-stuttgart.de>2014-08-28 15:22:34 +0100
committerPeter Simons <simons@cryp.to>2014-09-13 23:41:45 +0200
commitf5594485ce75edaceaae412f9c243e355ed1db4a (patch)
tree6b7106cd78c49b26fd796d8af4c94652bf6187ef /m4/ax_cxx_var_prettyfunc.m4
parentdc824114e248a6bed97f33aba1bd61f866059360 (diff)
downloadautoconf-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.m491
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