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
#
15
AC_DEFUN([MESA_PIC_FLAGS],
16
[AC_REQUIRE([AC_PROG_CC])dnl
17
AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code])
18
AC_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
26
if test "$enable_pic" = auto && test "$enable_static" = yes; then
27
    enable_pic=no
28
fi
29
# if PIC hasn't been explicitly disabled, try to figure out the flags
30
if 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])
117
fi
118
AC_SUBST([PIC_FLAGS])
119
])# MESA_PIC_FLAGS