]> git.puffer.fish Git - mirror/frr.git/commitdiff
[build] Test for GNU-style PIE support in toolchain and enable
authorPaul P Komkoff Jr <i@stingr.net>
Wed, 13 Aug 2008 15:17:04 +0000 (16:17 +0100)
committerPaul Jakma <paul@quagga.net>
Fri, 22 Aug 2008 18:52:12 +0000 (19:52 +0100)
2008-08-13 Paul P Komkoff Jr <i@stingr.net>

* configure.ac: add a configure flag and autoconf macro, which will
  determine if your toolchain supports PIE.
* */Makefile.am: add corresponding CFLAGS and LDFLAGS into
  appropriate places.

Signed-off-by: Paul Jakma <paul@quagga.net>
12 files changed:
bgpd/Makefile.am
configure.ac
guile/Makefile.am
isisd/Makefile.am
ospf6d/Makefile.am
ospfclient/Makefile.am
ripd/Makefile.am
ripngd/Makefile.am
tests/Makefile.am
vtysh/Makefile.am
watchquagga/Makefile.am
zebra/Makefile.am

index 80e93284120bec201952a76704de75cae4b12d4b..1b17d38639b96e453554de7ba18193d6eb9501ca 100644 (file)
@@ -4,6 +4,9 @@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib @SNMP_INCLUDES@
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_LIBRARIES = libbgp.a
 sbin_PROGRAMS = bgpd
 
index 746b5cea5ac399b956c3d0471f83795ca971ec77..5c6c0d7df845ff3f7bbd19b619efae950678b100 100755 (executable)
@@ -60,9 +60,10 @@ fi
 dnl --------------------
 dnl Check CC and friends
 dnl --------------------
+AC_LANG([C])
 AC_PROG_CC
 AC_PROG_CPP
-
+AM_PROG_CC_C_O
 AC_PROG_EGREP
 
 dnl autoconf 2.59 appears not to support AC_PROG_SED
@@ -1395,6 +1396,31 @@ dnl ----------
 CONFDATE=`date '+%Y%m%d'`
 AC_SUBST(CONFDATE)
 
+dnl Conditionally enable PIE support for GNU toolchains.
+enable_pie=yes
+
+AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
+if test "$enable_pie" = "yes"; then
+  AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
+    save_CFLAGS=$CFLAGS
+    save_LDFLAGS=$LDFLAGS
+    CFLAGS="$CFLAGS -fPIE"
+    LDFLAGS="$LDFLAGS -pie"
+    AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
+      [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
+    )
+    CFLAGS=$save_CFLAGS
+    LDFLAGS=$save_LDFLAGS
+  ])
+  if test "$ap_cv_cc_pie" = "yes"; then
+    PICFLAGS="-fPIE"
+    PILDFLAGS="-pie"
+  fi
+fi
+
+AC_SUBST(PICFLAGS)
+AC_SUBST(PILDFLAGS)
+
 dnl ------------------------------
 dnl set paths for state directory
 dnl ------------------------------
index ecdb8f32a457867c3fdd5f13c340cd15c1ea4abe..5beb71c41be28a136387762103ba86fee5ba28af 100644 (file)
@@ -3,6 +3,9 @@
 INCLUDES = @GUILE_CFLAGS@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib
 DEFS = @DEFS@ -I. -I$(srcdir)
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 bin_PROGRAMS = zebra-guile
 zebra_guile_SOURCES = zebra-guile.c zebra-support.c guile-bgp.c
 noinst_HEADERS = zebra-guile.h
index 859facd61170e764c0ba74bd57c437ca50779a17..9c3033906db1e05ae309e1b4f5eb926b460d024f 100644 (file)
@@ -5,6 +5,10 @@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib \
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
 LIBS = @LIBS@ 
+
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_LIBRARIES = libisis.a
 sbin_PROGRAMS = isisd 
 SUBDIRS = topology
index ad8287136bc08d3fbe9c4dcd7376ea082e0a9776..01bc6fe068ae1f0e22886a2a0326373064b09a8b 100644 (file)
@@ -4,6 +4,9 @@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib @SNMP_INCLUDES@
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_LIBRARIES = libospf6.a
 sbin_PROGRAMS = ospf6d
 
index ab2a3786e575eb1a56a389ffa9f664457a15fb39..b8aae84bbfc1b8819e88c5fb652fec75cd82f8d2 100644 (file)
@@ -21,4 +21,6 @@ ospfclient_SOURCES = \
 ospfclient_LDADD = libospfapiclient.la \
        ../ospfd/libospf.la ../lib/libzebra.la @LIBCAP@
 
+ospfclient_CFLAGS = $(AM_CFLAGS) $(PICFLAGS)
+ospfclient_LDFLAGS = $(AM_LDFLAGS) $(PILDFLAGS)
 
index c36b58c6d740dd3a8d3e35e77b6679f086133341..2fa26659eb4085a3a9308b464522b9bcd60a1e28 100644 (file)
@@ -4,6 +4,9 @@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib @SNMP_INCLUDES@
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_LIBRARIES = librip.a
 sbin_PROGRAMS = ripd
 
index ad1e27886afd52859639556b0294fd3660869d1a..c6bd4868d7d01ba2f9102cd4a02ecff254e69386 100644 (file)
@@ -4,6 +4,9 @@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib @SNMP_INCLUDES@
 DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 INSTALL_SDATA=@INSTALL@ -m 600
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_LIBRARIES = libripng.a
 sbin_PROGRAMS = ripngd
 
index d00485f1378683aed976877ec1b2747bbd0eaa81..c93fa08c4bafd5b55210a8f6587be05a854d1d19 100644 (file)
@@ -1,6 +1,9 @@
 INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib
 DEFS = @DEFS@ $(LOCAL_OPTS) -DSYSCONFDIR=\"$(sysconfdir)/\"
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 noinst_PROGRAMS = testsig testbuffer testmemory heavy heavywq heavythread \
                aspathtest testprivs teststream testbgpcap ecommtest \
                testbgpmpattr
index dbd1d3d2c029a3d3344821d44ba9efa4e7404ce4..4886a642def55c67caa66e3668b04edaf8f307e4 100644 (file)
@@ -5,6 +5,9 @@ DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
 
 LIBS = @LIBS@ @CURSES@ @LIBPAM@
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 bin_PROGRAMS = vtysh
 
 vtysh_SOURCES = vtysh_main.c vtysh.c vtysh_user.c vtysh_config.c
index e422535a0bf137dc244cf078bd42d33637786b83..a49f62e8f22c7689e4e0d6383079b5988304ec04 100644 (file)
@@ -3,6 +3,9 @@
 INCLUDES = @INCLUDES@ -I$(top_srcdir) -I$(top_srcdir)/lib
 DEFS = @DEFS@ -DSTATEDIR=\"$(localstatedir)/\"
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 sbin_PROGRAMS = watchquagga
 
 watchquagga_SOURCES = watchquagga.c
index 5d8db4115c788c5232863a4aeecd62a4d6f7e490..542f36f4b5e57c180dfeb079616f8687498a8128 100644 (file)
@@ -19,6 +19,9 @@ ioctl_method = @IOCTL_METHOD@
 otherobj = $(ioctl_method) $(ipforward) $(if_method) $(if_proc) \
        $(rt_method) $(rtread_method) $(kernel_method) $(other_method)
 
+AM_CFLAGS = $(PICFLAGS)
+AM_LDFLAGS = $(PILDFLAGS)
+
 sbin_PROGRAMS = zebra
 
 noinst_PROGRAMS = testzebra