[Mesa-dev] [PATCH 4/4] autoconf, scons: Move fallback HAVE_* definitions to headers.

Jose Fonseca jfonseca at vmware.com
Thu Apr 2 07:32:56 PDT 2015


These were being defined in SCons, but it's not practical -- we actually
need to include Gallium headers from external source trees, with
completely disjoint build infrastructure, and it's unsustainable to
replicate the HAVE_xxx checks or even hard-coded defines across
everywhere.

No actual change in behavior for autoconf.
---
 configure.ac         |  2 +-
 include/c99_compat.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
 scons/gallium.py     | 27 ---------------------------
 src/util/macros.h    |  2 ++
 4 files changed, 48 insertions(+), 28 deletions(-)

diff --git a/configure.ac b/configure.ac
index 520cc22..1485bba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -230,7 +230,7 @@ _SAVE_LDFLAGS="$LDFLAGS"
 _SAVE_CPPFLAGS="$CPPFLAGS"
 
 dnl Compiler macros
-DEFINES=""
+DEFINES="-DHAVE_AUTOCONF"
 AC_SUBST([DEFINES])
 case "$host_os" in
 linux*|*-gnu*|gnu*)
diff --git a/include/c99_compat.h b/include/c99_compat.h
index 4fc91bc..62ccd46 100644
--- a/include/c99_compat.h
+++ b/include/c99_compat.h
@@ -141,4 +141,49 @@ test_c99_compat_h(const void * restrict a,
 #endif
 
 
+
+/* Fallback definitions, for when these headers are used by build systems which
+ * don't auto-detect these things.*/
+#ifndef HAVE_AUTOCONF
+
+#ifndef _WIN32
+#  define HAVE_PTHREAD
+#  define HAVE_POSIX_MEMALIGN
+#endif
+
+#ifdef __GNUC__
+#  if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
+#    error "GCC version 4.2 or higher required"
+#  endif
+
+/* https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Other-Builtins.html */
+#  define HAVE___BUILTIN_CLZ 1
+#  define HAVE___BUILTIN_CLZLL 1
+#  define HAVE___BUILTIN_CTZ 1
+#  define HAVE___BUILTIN_EXPECT 1
+#  define HAVE___BUILTIN_FFS 1
+#  define HAVE___BUILTIN_FFSLL 1
+#  define HAVE___BUILTIN_POPCOUNT 1
+#  define HAVE___BUILTIN_POPCOUNTLL 1
+/* https://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Function-Attributes.html */
+#  define HAVE_FUNC_ATTRIBUTE_FLATTEN 1
+#  define HAVE_FUNC_ATTRIBUTE_UNUSED 1
+#  define HAVE_FUNC_ATTRIBUTE_FORMAT 1
+#  define HAVE_FUNC_ATTRIBUTE_PACKED 1
+
+#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+/*   https://gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Other-Builtins.html */
+#    define HAVE___BUILTIN_BSWAP32 1
+#    define HAVE___BUILTIN_BSWAP64 1
+#  endif
+
+#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+#    define HAVE___BUILTIN_UNREACHABLE 1
+#  endif
+
+#endif /* __GNUC__ */
+
+#endif /* !HAVE_AUTOCONF */
+
+
 #endif /* _C99_COMPAT_H_ */
diff --git a/scons/gallium.py b/scons/gallium.py
index 51b84d7..b44b7c9 100755
--- a/scons/gallium.py
+++ b/scons/gallium.py
@@ -314,8 +314,6 @@ def generate(env):
             '_BSD_SOURCE',
             '_GNU_SOURCE',
             '_DEFAULT_SOURCE',
-            'HAVE_PTHREAD',
-            'HAVE_POSIX_MEMALIGN',
         ]
         if env['platform'] == 'darwin':
             cppdefines += [
@@ -336,11 +334,6 @@ def generate(env):
         if env['platform'] in ('linux', 'darwin'):
             cppdefines += ['HAVE_XLOCALE_H']
 
-    if env['platform'] == 'haiku':
-        cppdefines += [
-            'HAVE_PTHREAD',
-            'HAVE_POSIX_MEMALIGN'
-        ]
     if platform == 'windows':
         cppdefines += [
             'WIN32',
@@ -374,26 +367,6 @@ def generate(env):
         print 'warning: Floating-point textures enabled.'
         print 'warning: Please consult docs/patents.txt with your lawyer before building Mesa.'
         cppdefines += ['TEXTURE_FLOAT_ENABLED']
-    if gcc_compat:
-        ccversion = env['CCVERSION']
-        cppdefines += [
-            'HAVE___BUILTIN_EXPECT',
-            'HAVE___BUILTIN_FFS',
-            'HAVE___BUILTIN_FFSLL',
-            'HAVE_FUNC_ATTRIBUTE_FLATTEN',
-            'HAVE_FUNC_ATTRIBUTE_UNUSED',
-            # GCC 3.0
-            'HAVE_FUNC_ATTRIBUTE_FORMAT',
-            'HAVE_FUNC_ATTRIBUTE_PACKED',
-            # GCC 3.4
-            'HAVE___BUILTIN_CTZ',
-            'HAVE___BUILTIN_POPCOUNT',
-            'HAVE___BUILTIN_POPCOUNTLL',
-            'HAVE___BUILTIN_CLZ',
-            'HAVE___BUILTIN_CLZLL',
-        ]
-        if distutils.version.LooseVersion(ccversion) >= distutils.version.LooseVersion('4.5'):
-            cppdefines += ['HAVE___BUILTIN_UNREACHABLE']
     env.Append(CPPDEFINES = cppdefines)
 
     # C compiler options
diff --git a/src/util/macros.h b/src/util/macros.h
index 6c7bda7..a2ff57a 100644
--- a/src/util/macros.h
+++ b/src/util/macros.h
@@ -24,6 +24,8 @@
 #ifndef UTIL_MACROS_H
 #define UTIL_MACROS_H
 
+#include "c99_compat.h"
+
 /* Compute the size of an array */
 #ifndef ARRAY_SIZE
 #  define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
-- 
2.1.0



More information about the mesa-dev mailing list