1# A few convenience macros for Mesa, mostly to keep all the platform
2# specifics out of configure.ac.
3
4# MESA_PIC_FLAGS()
5#
6# Find out whether to build PIC code using the option --enable-pic and
7# the configure enable_static/enable_shared settings. If PIC is needed,
8# figure out the necessary flags for the platform and compiler.
9#
10# The platform checks have been shamelessly taken from libtool and
11# stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in
12# /usr/share/aclocal/libtool.m4 or
13# http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD
14#
15AC_DEFUN([MESA_PIC_FLAGS],
16[AC_REQUIRE([AC_PROG_CC])dnl
17AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code])
18AC_ARG_ENABLE([pic],
19    [AS_HELP_STRING([--disable-pic],
20        [compile PIC objects @<:@default=enabled for shared builds
21        on supported platforms@:>@])],
22    [enable_pic="$enableval"
23    test "x$enable_pic" = x && enable_pic=auto],
24    [enable_pic=auto])
25# disable PIC by default for static builds
26if test "$enable_pic" = auto && test "$enable_static" = yes; then
27    enable_pic=no
28fi
29# if PIC hasn't been explicitly disabled, try to figure out the flags
30if test "$enable_pic" != no; then
31    AC_MSG_CHECKING([for $CC option to produce PIC])
32    # allow the user's flags to override
33    if test "x$PIC_FLAGS" = x; then
34        # see if we're using GCC
35        if test "x$GCC" = xyes; then
36            case "$host_os" in
37            aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*)
38                # PIC is the default for these OSes.
39                ;;
40            mingw*|os2*|pw32*)
41                # This hack is so that the source file can tell whether
42                # it is being built for inclusion in a dll (and should
43                # export symbols for example).
44                PIC_FLAGS="-DDLL_EXPORT"
45                ;;
46            darwin*|rhapsody*)
47                # PIC is the default on this platform
48                # Common symbols not allowed in MH_DYLIB files
49                PIC_FLAGS="-fno-common"
50                ;;
51            hpux*)
52                # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
53                # but not for PA HP-UX.
54                case $host_cpu in
55                hppa*64*|ia64*)
56                    ;;
57                *)
58                    PIC_FLAGS="-fPIC"
59                    ;;
60                esac
61                ;;
62            *)
63                # Everyone else on GCC uses -fPIC
64                PIC_FLAGS="-fPIC"
65                ;;
66            esac
67        else # !GCC
68            case "$host_os" in
69            hpux9*|hpux10*|hpux11*)
70                # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
71                # but not for PA HP-UX.
72                case "$host_cpu" in
73                hppa*64*|ia64*)
74                    # +Z the default
75                    ;;
76                *)
77                    PIC_FLAGS="+Z"
78                    ;;
79                esac
80                ;;
81            linux*|k*bsd*-gnu)
82                case `basename "$CC"` in
83                icc*|ecc*|ifort*)
84                    PIC_FLAGS="-KPIC"
85                    ;;
86                pgcc*|pgf77*|pgf90*|pgf95*)
87                    # Portland Group compilers (*not* the Pentium gcc
88                    # compiler, which looks to be a dead project)
89                    PIC_FLAGS="-fpic"
90                    ;;
91                ccc*)
92                    # All Alpha code is PIC.
93                    ;;
94                xl*)
95                    # IBM XL C 8.0/Fortran 10.1 on PPC
96                    PIC_FLAGS="-qpic"
97                    ;;
98                *)
99                    case `$CC -V 2>&1 | sed 5q` in
100                    *Sun\ C*|*Sun\ F*)
101                        # Sun C 5.9 or Sun Fortran
102                        PIC_FLAGS="-KPIC"
103                        ;;
104                    esac
105                esac
106                ;;
107            solaris*)
108                PIC_FLAGS="-KPIC"
109                ;;
110            sunos4*)
111                PIC_FLAGS="-PIC"
112                ;;
113            esac
114        fi # GCC
115    fi # PIC_FLAGS
116    AC_MSG_RESULT([$PIC_FLAGS])
117fi
118AC_SUBST([PIC_FLAGS])
119])# MESA_PIC_FLAGS
120