Attached are two patches, one for util/macros and the second for xorg/xserver, which are aimed at getting --enable/--disable-glx-tls to be identified automatically, instead of defaulting to disabled. Lack of TLS leads to non-PIC code, which is particularly annoying in an SELinux environment.
See: http://www.mail-archive.com/mesa-dev@lists.freedesktop.org/msg04310.html http://lists.x.org/archives/xorg-devel/2009-November/003411.html http://www.mail-archive.com/mesa-dev@lists.freedesktop.org/msg04289.html for a little more background. I'm not really sure about any policy of adding a macro and requiring it in another package; I had to bump the version number so that the X server could be sure the macro exists. Not sure if that's the correct thing to do. Please educate me. PLEASE NOTE: that the XORG_TLS macro is derived from a macro I got from the autoconf macro archive, which is GPLd. The output (configure) has no restrictions, and I hear this is okay at least for Mesa [1], but it's definitely worth noting. -tom [1] http://www.mail-archive.com/mesa3d-dev@lists.sourceforge.net/msg12457.html
From c3db2935b6e3883a8dec61eacf482b514f011fa1 Mon Sep 17 00:00:00 2001 From: Tom Fogal <tfo...@alumni.unh.edu> Date: Wed, 22 Dec 2010 14:34:55 -0700 Subject: [PATCH] Add macro for detecting thread local storage support. This adds an XORG_TLS macro which attempts to identify if the underlying compiler/platform supports thread local storage (TLS). It also increases the package version number, so that a dependent package can be sure the macro exists. Signed-off-by: Tom Fogal <tfo...@alumni.unh.edu> --- configure.ac | 2 +- xorg-macros.m4.in | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index a64a5bb..c83b8b2 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl Process this file with autoconf to create configure. AC_PREREQ([2.60]) AC_INIT([util-macros], - [1.11.0], + [1.12.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [util-macros]) AC_CONFIG_SRCDIR([Makefile.am]) diff --git a/xorg-macros.m4.in b/xorg-macros.m4.in index c7df523..b5f52d8 100644 --- a/xorg-macros.m4.in +++ b/xorg-macros.m4.in @@ -1128,3 +1128,78 @@ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" AC_SUBST([INSTALL_CMD]) ]) # XORG_INSTALL + +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_tls.html +# =========================================================================== +# +# SYNOPSIS +# +# XORG_TLS (renamed from AX_TLS) +# +# DESCRIPTION +# +# Provides a test for the compiler support of thread local storage (TLS) +# extensions. Defines TLS if it is found. Currently only knows about GCC +# and MSVC. I think SunPro uses the same as GCC, and Borland apparently +# supports either. +# +# LICENSE +# +# Copyright (c) 2008 Alan Woodland <aj...@aber.ac.uk> +# +# 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. + +AC_DEFUN([XORG_TLS], [ + AC_MSG_CHECKING(for thread local storage (TLS) class) + AC_CACHE_VAL(ac_cv_tls, [ + ax_tls_keywords="__thread __declspec(thread) none" + for ax_tls_keyword in $ax_tls_keywords; do + case $ax_tls_keyword in + none) ac_cv_tls=none ; break ;; + *) + AC_TRY_COMPILE( + [#include <stdlib.h> + static void + foo(void) { + static ] $ax_tls_keyword [ int bar; + exit(1); + }], + [], + [ac_cv_tls=$ax_tls_keyword ; break], + ac_cv_tls=none + ) + esac + done +]) + + if test "$ac_cv_tls" != "none"; then + dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here]) + AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here]) + fi + AC_MSG_RESULT($ac_cv_tls) +]) -- 1.7.0.2
From 1f5d0c4a4c93c0379ccf4ba962a461423b2e756c Mon Sep 17 00:00:00 2001 From: Tom Fogal <tfo...@alumni.unh.edu> Date: Wed, 22 Dec 2010 14:39:48 -0700 Subject: [PATCH] Autodetect TLS support instead of defaulting to disabled. Uses the XORG_TLS macro to figure out if the current platform supports TLS. If it does, enable TLS automagically. Still respects --enable option, regardless. Require 1.12 of the macros package, because that is when the XORG_TLS macro was introduced. Signed-off-by: Tom Fogal <tfo...@alumni.unh.edu> --- configure.ac | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 1ceffe7..f667ff2 100644 --- a/configure.ac +++ b/configure.ac @@ -35,7 +35,7 @@ AM_MAINTAINER_MODE # Require xorg-macros minimum of 1.10 for XORG_CHECK_SGML_DOCTOOLS m4_ifndef([XORG_MACROS_VERSION], [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])]) -XORG_MACROS_VERSION(1.10) +XORG_MACROS_VERSION(1.12) XORG_DEFAULT_OPTIONS XORG_WITH_DOXYGEN(1.6.1) XORG_CHECK_SGML_DOCTOOLS(1.5) @@ -597,9 +597,14 @@ dnl GLX build options AC_ARG_ENABLE(aiglx, AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]), [AIGLX=$enableval], [AIGLX=yes]) -AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]), +XORG_TLS +AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: auto)]), [GLX_USE_TLS=$enableval], - [GLX_USE_TLS=no]) + [GLX_USE_TLS=no + if test "${ac_cv_tls}" != "none" ; then + GLX_USE_TLS=yes + fi]) +AC_SUBST(GLX_TLS, ${GLX_USE_TLS}) dnl Extensions. AC_ARG_ENABLE(registry, AS_HELP_STRING([--disable-registry], [Build string registry module (default: enabled)]), [XREGISTRY=$enableval], [XREGISTRY=yes]) -- 1.7.0.2
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev