Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

autoconf: Attempt to figure out the PIC flags for the platform

This commit adds an autoconf macro, MESA_PIC_FLAGS, which sets the
PIC flags according to platform and static/shared setting. The platform
specifics are taken straight from libtool.m4 and stripped down to just
the flags and platforms we cover in Mesa. This should hopefully make it
possible to use autoconf on non-GCC platforms.

The macro is added external to configure.ac in acinclude.m4 since it's
pretty bloated.

Note to BSDers: Previously, x86 defaulted to non-PIC on FreeBSD. I
didn't carry that preference into this macro. Instead, you can just use
--disable-pic where desired.
  • Loading branch information...
commit d368eed9c78aa3ced8540c66bdc4c5e1d4a067b4 1 parent 0dbd5c8
@dbnicholson dbnicholson authored
Showing with 125 additions and 17 deletions.
  1. +3 −2 Makefile
  2. +119 −0 acinclude.m4
  3. +3 −15 configure.ac
View
5 Makefile
@@ -191,6 +191,7 @@ MAIN_FILES = \
$(DIRECTORY)/Makefile* \
$(DIRECTORY)/configure \
$(DIRECTORY)/configure.ac \
+ $(DIRECTORY)/acinclude.m4 \
$(DIRECTORY)/aclocal.m4 \
$(DIRECTORY)/descrip.mms \
$(DIRECTORY)/mms-config. \
@@ -455,9 +456,9 @@ ACLOCAL = aclocal
ACLOCAL_FLAGS =
AUTOCONF = autoconf
AC_FLAGS =
-aclocal.m4: configure.ac
+aclocal.m4: configure.ac acinclude.m4
$(ACLOCAL) $(ACLOCAL_FLAGS)
-configure: configure.ac aclocal.m4
+configure: configure.ac aclocal.m4 acinclude.m4
$(AUTOCONF) $(AC_FLAGS)
rm_depend:
View
119 acinclude.m4
@@ -0,0 +1,119 @@
+# A few convenience macros for Mesa, mostly to keep all the platform
+# specifics out of configure.ac.
+
+# MESA_PIC_FLAGS()
+#
+# Find out whether to build PIC code using the option --enable-pic and
+# the configure enable_static/enable_shared settings. If PIC is needed,
+# figure out the necessary flags for the platform and compiler.
+#
+# The platform checks have been shamelessly taken from libtool and
+# stripped down to just what's needed for Mesa. See _LT_COMPILER_PIC in
+# /usr/share/aclocal/libtool.m4 or
+# http://git.savannah.gnu.org/gitweb/?p=libtool.git;a=blob;f=libltdl/m4/libtool.m4;hb=HEAD
+#
+AC_DEFUN([MESA_PIC_FLAGS],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_ARG_VAR([PIC_FLAGS], [compiler flags for PIC code])
+AC_ARG_ENABLE([pic],
+ [AS_HELP_STRING([--disable-pic],
+ [compile PIC objects @<:@default=enabled for shared builds
+ on supported platforms@:>@])],
+ [enable_pic="$enableval"
+ test "x$enable_pic" = x && enable_pic=auto],
+ [enable_pic=auto])
+# disable PIC by default for static builds
+if test "$enable_pic" = auto && test "$enable_static" = yes; then
+ enable_pic=no
+fi
+# if PIC hasn't been explicitly disabled, try to figure out the flags
+if test "$enable_pic" != no; then
+ AC_MSG_CHECKING([for $CC option to produce PIC])
+ # allow the user's flags to override
+ if test "x$PIC_FLAGS" = x; then
+ # see if we're using GCC
+ if test "x$GCC" = xyes; then
+ case "$host_os" in
+ aix*|beos*|cygwin*|irix5*|irix6*|osf3*|osf4*|osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw*|os2*|pw32*)
+ # This hack is so that the source file can tell whether
+ # it is being built for inclusion in a dll (and should
+ # export symbols for example).
+ PIC_FLAGS="-DDLL_EXPORT"
+ ;;
+ darwin*|rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ PIC_FLAGS="-fno-common"
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
+ # but not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ PIC_FLAGS="-fPIC"
+ ;;
+ esac
+ ;;
+ *)
+ # Everyone else on GCC uses -fPIC
+ PIC_FLAGS="-fPIC"
+ ;;
+ esac
+ else # !GCC
+ case "$host_os" in
+ hpux9*|hpux10*|hpux11*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX,
+ # but not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ PIC_FLAGS="+Z"
+ ;;
+ esac
+ ;;
+ linux*|k*bsd*-gnu)
+ case `basename "$CC"` in
+ icc*|ecc*|ifort*)
+ PIC_FLAGS="-KPIC"
+ ;;
+ pgcc*|pgf77*|pgf90*|pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc
+ # compiler, which looks to be a dead project)
+ PIC_FLAGS="-fpic"
+ ;;
+ ccc*)
+ # All Alpha code is PIC.
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ PIC_FLAGS="-qpic"
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*|*Sun\ F*)
+ # Sun C 5.9 or Sun Fortran
+ PIC_FLAGS="-KPIC"
+ ;;
+ esac
+ esac
+ ;;
+ solaris*)
+ PIC_FLAGS="-KPIC"
+ ;;
+ sunos4*)
+ PIC_FLAGS="-PIC"
+ ;;
+ esac
+ fi # GCC
+ fi # PIC_FLAGS
+ AC_MSG_RESULT([$PIC_FLAGS])
+fi
+AC_SUBST([PIC_FLAGS])
+])# MESA_PIC_FLAGS
View
18 configure.ac
@@ -879,21 +879,9 @@ AC_SUBST([ASM_FLAGS])
AC_SUBST([ASM_SOURCES])
AC_SUBST([ASM_API])
-PIC_FLAGS=""
-case "$host_os" in
-linux*)
- PIC_FLAGS="-fPIC"
- ;;
-freebsd* | dragonfly*)
- PIC_FLAGS="-fPIC"
- case "$host_cpu" in
- i?86)
- PIC_FLAGS=""
- ;;
- esac
- ;;
-esac
-AC_SUBST([PIC_FLAGS])
+dnl PIC code macro
+MESA_PIC_FLAGS
+
dnl Restore LDFLAGS and CPPFLAGS
LDFLAGS="$_SAVE_LDFLAGS"
Please sign in to comment.
Something went wrong with that request. Please try again.