xref: /Universal-ctags/m4/multiarch.m4 (revision 820c1a8d46849a90376d8eb15b319ac05439f656)
1*820c1a8dSHiroo HAYASHI# multiarch.m4 serial 9
2*820c1a8dSHiroo HAYASHIdnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
3*820c1a8dSHiroo HAYASHIdnl This file is free software; the Free Software Foundation
4*820c1a8dSHiroo HAYASHIdnl gives unlimited permission to copy and/or distribute it,
5*820c1a8dSHiroo HAYASHIdnl with or without modifications, as long as this notice is preserved.
6*820c1a8dSHiroo HAYASHI
7*820c1a8dSHiroo HAYASHI# Determine whether the compiler is or may be producing universal binaries.
8*820c1a8dSHiroo HAYASHI#
9*820c1a8dSHiroo HAYASHI# On Mac OS X 10.5 and later systems, the user can create libraries and
10*820c1a8dSHiroo HAYASHI# executables that work on multiple system types--known as "fat" or
11*820c1a8dSHiroo HAYASHI# "universal" binaries--by specifying multiple '-arch' options to the
12*820c1a8dSHiroo HAYASHI# compiler but only a single '-arch' option to the preprocessor.  Like
13*820c1a8dSHiroo HAYASHI# this:
14*820c1a8dSHiroo HAYASHI#
15*820c1a8dSHiroo HAYASHI#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
16*820c1a8dSHiroo HAYASHI#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
17*820c1a8dSHiroo HAYASHI#                 CPP="gcc -E" CXXCPP="g++ -E"
18*820c1a8dSHiroo HAYASHI#
19*820c1a8dSHiroo HAYASHI# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
20*820c1a8dSHiroo HAYASHI
21*820c1a8dSHiroo HAYASHIAC_DEFUN_ONCE([gl_MULTIARCH],
22*820c1a8dSHiroo HAYASHI[
23*820c1a8dSHiroo HAYASHI  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
24*820c1a8dSHiroo HAYASHI  AC_CACHE_CHECK([whether the compiler produces multi-arch binaries],
25*820c1a8dSHiroo HAYASHI    [gl_cv_c_multiarch],
26*820c1a8dSHiroo HAYASHI    [gl_cv_c_multiarch=no
27*820c1a8dSHiroo HAYASHI     AC_COMPILE_IFELSE(
28*820c1a8dSHiroo HAYASHI       [AC_LANG_SOURCE(
29*820c1a8dSHiroo HAYASHI         [[#ifndef __APPLE_CC__
30*820c1a8dSHiroo HAYASHI            not a universal capable compiler
31*820c1a8dSHiroo HAYASHI           #endif
32*820c1a8dSHiroo HAYASHI           typedef int dummy;
33*820c1a8dSHiroo HAYASHI         ]])],
34*820c1a8dSHiroo HAYASHI       [
35*820c1a8dSHiroo HAYASHI        dnl Check for potential -arch flags.  It is not universal unless
36*820c1a8dSHiroo HAYASHI        dnl there are at least two -arch flags with different values.
37*820c1a8dSHiroo HAYASHI        arch=
38*820c1a8dSHiroo HAYASHI        prev=
39*820c1a8dSHiroo HAYASHI        for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
40*820c1a8dSHiroo HAYASHI          if test -n "$prev"; then
41*820c1a8dSHiroo HAYASHI            case $word in
42*820c1a8dSHiroo HAYASHI              i?86 | x86_64 | ppc | ppc64 | arm | arm64)
43*820c1a8dSHiroo HAYASHI                if test -z "$arch" || test "$arch" = "$word"; then
44*820c1a8dSHiroo HAYASHI                  arch="$word"
45*820c1a8dSHiroo HAYASHI                else
46*820c1a8dSHiroo HAYASHI                  gl_cv_c_multiarch=yes
47*820c1a8dSHiroo HAYASHI                fi
48*820c1a8dSHiroo HAYASHI                ;;
49*820c1a8dSHiroo HAYASHI            esac
50*820c1a8dSHiroo HAYASHI            prev=
51*820c1a8dSHiroo HAYASHI          else
52*820c1a8dSHiroo HAYASHI            if test "x$word" = "x-arch"; then
53*820c1a8dSHiroo HAYASHI              prev=arch
54*820c1a8dSHiroo HAYASHI            fi
55*820c1a8dSHiroo HAYASHI          fi
56*820c1a8dSHiroo HAYASHI        done
57*820c1a8dSHiroo HAYASHI       ])
58*820c1a8dSHiroo HAYASHI    ])
59*820c1a8dSHiroo HAYASHI  if test $gl_cv_c_multiarch = yes; then
60*820c1a8dSHiroo HAYASHI    APPLE_UNIVERSAL_BUILD=1
61*820c1a8dSHiroo HAYASHI  else
62*820c1a8dSHiroo HAYASHI    APPLE_UNIVERSAL_BUILD=0
63*820c1a8dSHiroo HAYASHI  fi
64*820c1a8dSHiroo HAYASHI  AC_SUBST([APPLE_UNIVERSAL_BUILD])
65*820c1a8dSHiroo HAYASHI])
66