[PATCH util-macros 3/3] XORG_LD_WRAP: check if linker supports -wrap

Dan Nicholson dbn.lists at gmail.com
Thu Mar 10 08:55:44 PST 2011


On Thu, Mar 10, 2011 at 5:55 AM, Gaetan Nadon <memsize at videotron.ca> wrote:
> Used mainly by test cases using a wrapper function.
>
> Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
> ---
>  Makefile.am              |    1 +
>  ax_check_linker_flags.m4 |   77 ++++++++++++++++++++++++++++++++++++++++++++++
>  xorg-macros.m4.in        |   22 +++++++++++++
>  3 files changed, 100 insertions(+), 0 deletions(-)
>  create mode 100644 ax_check_linker_flags.m4
>
> diff --git a/Makefile.am b/Makefile.am
> index 134a5cc..14e89af 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -21,6 +21,7 @@
>
>  aclocaldir = $(datadir)/aclocal
>  aclocal_DATA = xorg-macros.m4
> +dist_aclocal_DATA = ax_check_linker_flags.m4

I don't think we want to distribute this file unless we put it under
the xorg namespace. It could conflict with another package doing the
same thing.

>  dist_pkgdata_DATA = INSTALL
>
>  # Previous versions used to install xorgversion.m4, now integrated
> diff --git a/ax_check_linker_flags.m4 b/ax_check_linker_flags.m4
> new file mode 100644
> index 0000000..894713c
> --- /dev/null
> +++ b/ax_check_linker_flags.m4
> @@ -0,0 +1,77 @@
> +# ===========================================================================
> +#   http://www.gnu.org/software/autoconf-archive/ax_check_linker_flags.html
> +# ===========================================================================
> +#
> +# SYNOPSIS
> +#
> +#   AX_CHECK_LINKER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE])
> +#
> +# DESCRIPTION
> +#
> +#   Check whether the given linker FLAGS work with the current language's
> +#   linker, or whether they give an error.
> +#
> +#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
> +#   success/failure.
> +#
> +#   NOTE: Based on AX_CHECK_COMPILER_FLAGS.
> +#
> +# LICENSE
> +#
> +#   Copyright (c) 2009 Mike Frysinger <vapier at gentoo.org>
> +#   Copyright (c) 2009 Steven G. Johnson <stevenj at alum.mit.edu>
> +#   Copyright (c) 2009 Matteo Frigo
> +#
> +#   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 6
> +
> +AC_DEFUN([AX_CHECK_LINKER_FLAGS],

Again, I don't think we want to distribute things unless they're under
the XORG namespace. I would personally rename this to
XORG_CHECK_LINKER_FLAGS and stuff it in xorg-macros.m4. The macros
from autoconf-archive are intended to be used locally in a package. If
we need to distribute them, I think it needs to be done as an XORG_
thing.

> +[AC_MSG_CHECKING([whether the linker accepts $1])
> +dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
> +AS_LITERAL_IF([$1],
> +  [AC_CACHE_VAL(AS_TR_SH(ax_cv_linker_flags_[$1]), [
> +      ax_save_FLAGS=$LDFLAGS
> +      LDFLAGS="$1"
> +      AC_LINK_IFELSE([AC_LANG_PROGRAM()],
> +        AS_TR_SH(ax_cv_linker_flags_[$1])=yes,
> +        AS_TR_SH(ax_cv_linker_flags_[$1])=no)
> +      LDFLAGS=$ax_save_FLAGS])],
> +  [ax_save_FLAGS=$LDFLAGS
> +   LDFLAGS="$1"
> +   AC_LINK_IFELSE([AC_LANG_PROGRAM()],
> +     eval AS_TR_SH(ax_cv_linker_flags_[$1])=yes,
> +     eval AS_TR_SH(ax_cv_linker_flags_[$1])=no)
> +   LDFLAGS=$ax_save_FLAGS])
> +eval ax_check_linker_flags=$AS_TR_SH(ax_cv_linker_flags_[$1])
> +AC_MSG_RESULT($ax_check_linker_flags)
> +if test "x$ax_check_linker_flags" = xyes; then
> +       m4_default([$2], :)
> +else
> +       m4_default([$3], :)
> +fi
> +])dnl AX_CHECK_LINKER_FLAGS

Furthermore, I'd suggest changing all the variables (especially the
cache variables) to xorg_ so there are no conflicts with someone using
the actual AX_CHECK_LINKER_FLAGS macro in their package. Pretty
pedantic, but it ensures that we don't get weird conflicts down the
road.

> diff --git a/xorg-macros.m4.in b/xorg-macros.m4.in
> index c9ca311..6191680 100644
> --- a/xorg-macros.m4.in
> +++ b/xorg-macros.m4.in
> @@ -973,6 +973,7 @@ AC_MSG_RESULT([$build_specs])
>  #
>  AC_DEFUN([XORG_ENABLE_UNIT_TESTS],[
>  AC_BEFORE([$0], [XORG_WITH_GLIB])
> +AC_BEFORE([$0], [XORG_LD_WRAP])
>  m4_define([_defopt], m4_default([$1], [auto]))
>  AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests],
>        [Enable building unit test cases (default: ]_defopt[)]),
> @@ -1036,6 +1037,27 @@ fi
>  AM_CONDITIONAL([HAVE_GLIB], [test "$have_glib" = yes])
>  ]) # XORG_WITH_GLIB
>
> +# XORG_LD_WRAP
> +# ------------
> +# Minimum version: 1.13.0
> +#
> +# Check if linker supports -wrap, passed via compiler flags
> +#
> +# When used with ENABLE_UNIT_TESTS, it is assumed -wrap is used for unit testing.
> +# Otherwise the value of $enable_unit_tests is blank.
> +#
> +AC_DEFUN([XORG_LD_WRAP],[
> +AX_CHECK_LINKER_FLAGS([-Wl,-wrap,exit],[have_ld_wrap=yes],[have_ld_wrap=no])
> +# Not having ld wrap when unit testing has been explicitly requested is an error
> +if test "x$enable_unit_tests" = x"yes"; then
> +  if test "x$have_ld_wrap" = x"no"; then
> +    AC_MSG_ERROR([--enable-unit-tests=yes specified but ld -wrap support is not available])
> +  fi
> +fi
> +AM_CONDITIONAL([HAVE_LD_WRAP], [test "$have_ld_wrap" = yes])
> +#
> +]) # XORG_LD_WRAP

The rest looks good to me.

--
Dan


More information about the xorg-devel mailing list