multiarch.m4 2.14 KB
Newer Older
Paul Eggert's avatar
Paul Eggert committed
1
# multiarch.m4 serial 9
Paul Eggert's avatar
Paul Eggert committed
2
dnl Copyright (C) 2008-2020 Free Software Foundation, Inc.
Paul Eggert's avatar
Paul Eggert committed
3 4 5 6 7 8
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

# Determine whether the compiler is or may be producing universal binaries.
#
Paul Eggert's avatar
Paul Eggert committed
9
# On Mac OS X 10.5 and later systems, the user can create libraries and
Paul Eggert's avatar
Paul Eggert committed
10 11 12 13 14 15 16 17 18
# executables that work on multiple system types--known as "fat" or
# "universal" binaries--by specifying multiple '-arch' options to the
# compiler but only a single '-arch' option to the preprocessor.  Like
# this:
#
#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
#                 CPP="gcc -E" CXXCPP="g++ -E"
#
Paul Eggert's avatar
Paul Eggert committed
19
# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
Paul Eggert's avatar
Paul Eggert committed
20 21 22 23

AC_DEFUN_ONCE([gl_MULTIARCH],
[
  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
Paul Eggert's avatar
Paul Eggert committed
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  AC_CACHE_CHECK([whether the compiler produces multi-arch binaries],
    [gl_cv_c_multiarch],
    [gl_cv_c_multiarch=no
     AC_COMPILE_IFELSE(
       [AC_LANG_SOURCE(
         [[#ifndef __APPLE_CC__
            not a universal capable compiler
           #endif
           typedef int dummy;
         ]])],
       [
        dnl Check for potential -arch flags.  It is not universal unless
        dnl there are at least two -arch flags with different values.
        arch=
        prev=
        for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
          if test -n "$prev"; then
            case $word in
              i?86 | x86_64 | ppc | ppc64 | arm | arm64)
                if test -z "$arch" || test "$arch" = "$word"; then
                  arch="$word"
                else
                  gl_cv_c_multiarch=yes
                fi
                ;;
            esac
            prev=
          else
            if test "x$word" = "x-arch"; then
              prev=arch
            fi
          fi
        done
       ])
Paul Eggert's avatar
Paul Eggert committed
58 59 60 61 62 63 64 65
    ])
  if test $gl_cv_c_multiarch = yes; then
    APPLE_UNIVERSAL_BUILD=1
  else
    APPLE_UNIVERSAL_BUILD=0
  fi
  AC_SUBST([APPLE_UNIVERSAL_BUILD])
])