summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2020-08-06 18:00:00 +0000
committerDmitry V. Levin <ldv@altlinux.org>2020-08-07 08:00:00 +0000
commit91791489f5fd71a0e3c16d7b3a3570488f9d4969 (patch)
treed4c0154189e298b1916691571558553ec610771a /configure.ac
parentb8e9a2eeebb88b737a45ce460d1da45d609407b2 (diff)
configure.ac: rewrite --disable-pie and -fpie/pie check
* configure.ac: Rewrite -fpie/pie check using AC_LINK_IFELSE to make the code more readable. Add --enable-pie=check support and make it the default, terminate if --enable-pie is specified but -fpie/pie support is not available.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac62
1 files changed, 34 insertions, 28 deletions
diff --git a/configure.ac b/configure.ac
index a8e5d9ff..98e52410 100644
--- a/configure.ac
+++ b/configure.ac
@@ -174,34 +174,40 @@ rm -f conftest*])
AM_CONDITIONAL([HAVE_VERSIONING],
[test "$libc_cv_ld_version_script_option" = "yes"])
-dnl
-dnl check for -fPIE/-pie support
-dnl
-dnl icc handles -fpie as -fp without error, so blacklist icc
-dnl
-AC_ARG_ENABLE(pie,AS_HELP_STRING([--disable-pie],
- [disable position-independent executables (PIE)]),
- USE_PIE=$enableval, USE_PIE=yes)
-
-AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
- cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
- if test "$USE_PIE" = "yes" -a "$CC" != "icc" &&
- AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fpie
- -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_fpie=yes
- PIE_CFLAGS="-fpie"
- PIE_LDFLAGS="-pie"
- else
- libc_cv_fpie=no
- PIE_CFLAGS=""
- PIE_LDFLAGS=""
- fi
- rm -f conftest*])
-AC_SUBST(libc_cv_fpie)
+AC_ARG_ENABLE([pie],
+ [AS_HELP_STRING([--disable-pie],
+ [disable position-independent executables (PIE)])],
+ [], [enable_pie=check])
+case "$enable_pie" in
+ no) ;;
+ yes|check)
+ dnl Check for -fpie/-pie support
+ AC_CACHE_CHECK([for -fpie/-pie support],
+ [pam_cv_pie],
+ [saved_CFLAGS="$CFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ CFLAGS="$CFLAGS -fpie"
+ LDFLAGS="$LDFLAGS -pie"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+ [pam_cv_pie=yes],
+ [pam_cv_pie=no])
+ LDFLAGS="$saved_LDFLAGS"
+ CFLAGS="$saved_CFLAGS"])
+ AS_IF([test "$pam_cv_pie" = yes],
+ [enable_pie=yes],
+ [AS_IF([test "$enable_pie" = yes],
+ [AC_MSG_FAILURE([requested -fpie/-pie support not found])],
+ [enable_pie=no])])
+ ;;
+ *) AC_MSG_ERROR([bad value $enable_pie for --enable-pie option]) ;;
+esac
+
+AS_IF([test "$enable_pie" = yes],
+ [PIE_CFLAGS="-fpie"
+ PIE_LDFLAGS="-pie"],
+ [PIE_CFLAGS=
+ PIE_LDFLAGS=])
+
AC_SUBST(PIE_CFLAGS)
AC_SUBST(PIE_LDFLAGS)