On Sun, Oct 20, 2013 at 12:34:04PM -0500, Dirk Eddelbuettel wrote: > | Ah, I'm guessing it comes from /usr/lib/R/etc/Makeconf (I straced R > | CMD config LDFLAGS). That seems to be created at R build time, so I > | wonder whether simply tweaking that would do the trick? > > Good thinking -- yes it would. We code'em down in debian/rules for > configure, they then tend to get passed through. > > That would probably be worth it! (And in case you look at the debian/rules > for r-base, it is a bit of a mess that grew over ten+ years -- not proud of > it but heck it works :) > > | I've just had a look at the debian/rules file for r-base. At present, > | optimflags seems to be derived from a hand-written set of rules. > | Could it be replaced by something vaguely like the following: > | > | optimflags = $(shell dpkg-buildflags --get CFLAGS) > | ldflags = $(shell dpkg-buildflags --get LDFLAGS) > > Very nice. I was fully unaware of that option to dpkg-buildflags.
I was unaware of the script in its entirety until today ;-) > | etc., and the same for CPPFLAGS, CXXFLAGS, FFLAGS, and then set these > | environment variables when you run configure, instead of setting > | LDFLAGS to be empty? I could write a whole patch if you wish, but > | only if you would like me to. > > I'd appreciate it if you took a stab at it. There is a ton of special casing > in there. Would we need a ton of post-processing with sed to account for > that? I;d hesitate to just say 'hell with it', breaking everything and > trying to put it back together on arch at a time. > > But yes, the added flags should probably be going in there... OK, attached is a suggested patch. It seems to work for me. There are some of the parts where I've added other flags in addition to the ones that were already there - I don't know if this is necessary or not. Also, the definition of fflags is currently broken, as noted in the patch, as there is a bug in dpkg-dev (which I've just reported) - it should be fixed pretty soon. I've left all of the old code in the file, clearly commented out. It might be worth removing it entirely, or perhaps not. Also, I noticed that there is an old rules,v file in the debian/ directory, which made it slightly hard to edit the rules file. I don't know how you're currently doing your version tracking, but if it's no longer with RCS, you may wish to delete this file! HTH! Julian
--- rules.old 2013-10-20 19:06:09.000000000 +0100 +++ rules 2013-10-20 19:29:26.938407738 +0100 @@ -77,86 +77,97 @@ f95compiler = gfortran compiler = "gcc -std=gnu99" cxxcompiler = g++ -optimflags = -O3 -pipe -# edd 22 Apr 2012 gcc-4.7 needs -O2 to build R (also #67359) -ifneq "$(shell gcc --version | head -1 | cut -d' ' -f4 | grep '^4.7')" "" -optimflags = -O2 -pipe -endif - -# edd 04 Sep 2001 default compiler flags, lowered for m68k -#compilerflags = -O2 -# m68k barks when using g77, and when gcc use -O2 -# edd 26 Nov 2002 switched back to g77 -# edd 02 Jun 2003 switched back -# cts 04 Jun 2003 use -O1 on m68k -#ifeq ($(arch),m68k) -#fortrancompiler = F2C=f2c -#compilerflags = -O1 -#endif - -# edd 14 Nov 2003 turn blas off on arm -# edd 12 May 2010 no longer needed -- thx to Modestas Vainius -#ifeq ($(arch),arm) -#atlas = --without-blas -#endif - -## edd 09 Nov 2001 ia64 needs gcc-3.0, hppa gets it by default -#ifeq ($(arch),ia64) -#fortrancompiler = F77=g77-3.0 -#compiler = gcc-3.0 -#cxxcompiler = g++-3.0 -#compilerflags = -O2 -#endif - -## lam...@debian.org 06 Dec 2001 hppa needs -ffunction-sections -ifeq ($(arch),hppa) -optimflags = -O2 -ffunction-sections -endif - -## edd 20 Jun 2002 no optimisation or debugging on baby systems -## edd 02 Jun 2003 use this on arm only -## edd 12 May 2010 no longer use it on arm either -- thx Modestas -## edd 04 Aug 2010 on mips and mipsel, don't use -g -##ifneq "$(findstring $(arch), m68k arm)" "" -#ifneq "$(findstring $(arch), arm)" "" -ifneq "$(findstring $(arch), mips mipsel)" "" -optimflags = -g0 -#optimflags = -O0 -g0 -endif - -## edd 04 Apr 2009 Alpha dies on deriv.c, trying will less optimisation -## edd 16 Apr 2009 commented-out as Kurt Roeckx applied a gcc patch -#ifeq ($(arch),alpha) -#optimflags = -O2 -g0 -#endif - -## edd 09 Apr 2006 per patch from Andreas Jochens in #361604 -ifeq ($(arch),powerpc64) -optimflags += -mminimal-toc -endif - -## edd 26 Jul 2013 kFreeBSD wants -O2 per #714506 -ifeq ($(buildos),kfreebsd) -optimflags = -O2 -pipe -endif - - -## edd 04 Apr 2006 generalize from old compilerflags to per-compiler -## edd 11 Oct 2011 -std=gnu goes to CC (thanks to Kurt Hornik) -cflags = $(optimflags) -cxxflags = $(optimflags) -fcflags = $(optimflags) - -## edd 17 Sep 2006 suggested by Brian Ripley in email dated 15 Sep 2006 -#ldflags = -Wl,-O1,-Bdirect,--hash-style=both -ldflags = -Wl,-O1 -## edd 06 May 2007 try it -## edd 05 Feb 2008 still no go under gcc 4.3 -#ldflags = -Wl,-O1,-Bdirect,--hash-style=both - -## edd 16 Apr 2008 add -g to optim flags to allow for -dbg package -optimflags += -g +# jdg 20 Oct 2013 remove all of the architecture-specific optimisations +# from this makefile, and let dpkg-buildflags do this work +# optimflags = -O3 -pipe +# +# # edd 22 Apr 2012 gcc-4.7 needs -O2 to build R (also #67359) +# ifneq "$(shell gcc --version | head -1 | cut -d' ' -f4 | grep '^4.7')" "" +# optimflags = -O2 -pipe +# endif +# +# # edd 04 Sep 2001 default compiler flags, lowered for m68k +# #compilerflags = -O2 +# # m68k barks when using g77, and when gcc use -O2 +# # edd 26 Nov 2002 switched back to g77 +# # edd 02 Jun 2003 switched back +# # cts 04 Jun 2003 use -O1 on m68k +# #ifeq ($(arch),m68k) +# #fortrancompiler = F2C=f2c +# #compilerflags = -O1 +# #endif +# +# # edd 14 Nov 2003 turn blas off on arm +# # edd 12 May 2010 no longer needed -- thx to Modestas Vainius +# #ifeq ($(arch),arm) +# #atlas = --without-blas +# #endif +# +# ## edd 09 Nov 2001 ia64 needs gcc-3.0, hppa gets it by default +# #ifeq ($(arch),ia64) +# #fortrancompiler = F77=g77-3.0 +# #compiler = gcc-3.0 +# #cxxcompiler = g++-3.0 +# #compilerflags = -O2 +# #endif +# +# ## lam...@debian.org 06 Dec 2001 hppa needs -ffunction-sections +# ifeq ($(arch),hppa) +# optimflags = -O2 -ffunction-sections +# endif +# +# ## edd 20 Jun 2002 no optimisation or debugging on baby systems +# ## edd 02 Jun 2003 use this on arm only +# ## edd 12 May 2010 no longer use it on arm either -- thx Modestas +# ## edd 04 Aug 2010 on mips and mipsel, don't use -g +# ##ifneq "$(findstring $(arch), m68k arm)" "" +# #ifneq "$(findstring $(arch), arm)" "" +# ifneq "$(findstring $(arch), mips mipsel)" "" +# optimflags = -g0 +# #optimflags = -O0 -g0 +# endif +# +# ## edd 04 Apr 2009 Alpha dies on deriv.c, trying will less optimisation +# ## edd 16 Apr 2009 commented-out as Kurt Roeckx applied a gcc patch +# #ifeq ($(arch),alpha) +# #optimflags = -O2 -g0 +# #endif +# +# ## edd 09 Apr 2006 per patch from Andreas Jochens in #361604 +# ifeq ($(arch),powerpc64) +# optimflags += -mminimal-toc +# endif +# +# ## edd 26 Jul 2013 kFreeBSD wants -O2 per #714506 +# ifeq ($(buildos),kfreebsd) +# optimflags = -O2 -pipe +# endif +# +# +# ## edd 04 Apr 2006 generalize from old compilerflags to per-compiler +# ## edd 11 Oct 2011 -std=gnu goes to CC (thanks to Kurt Hornik) +# cflags = $(optimflags) +# cxxflags = $(optimflags) +# fcflags = $(optimflags) +# +# ## edd 17 Sep 2006 suggested by Brian Ripley in email dated 15 Sep 2006 +# #ldflags = -Wl,-O1,-Bdirect,--hash-style=both +# ldflags = -Wl,-O1 +# ## edd 06 May 2007 try it +# ## edd 05 Feb 2008 still no go under gcc 4.3 +# #ldflags = -Wl,-O1,-Bdirect,--hash-style=both +# +# ## edd 16 Apr 2008 add -g to optim flags to allow for -dbg package +# optimflags += -g + +cflags = $(shell dpkg-buildflags --get CFLAGS) +cppflags = $(shell dpkg-buildflags --get CPPFLAGS) +cxxflags = $(shell dpkg-buildflags --get CXXFLAGS) +# The following should really be --get FFLAGS, but there appears to be +# a bug in dpkg-dev whereby FFLAGS doesn't get the hardening flags (bug#726932) +fflags = $(shell dpkg-buildflags --get CFLAGS) +ldflags = $(shell dpkg-buildflags --get LDFLAGS) #arch = kfreebsd-amd64 maketest: @@ -232,15 +243,15 @@ LIBnn=lib \ AWK=/usr/bin/awk \ CC=$(compiler) \ - CXX=${cxxcompiler} \ - ${fortrancompiler} \ - FC=${f95compiler} \ + CXX=${cxxcompiler} \ + ${fortrancompiler} \ + FC=${f95compiler} \ CFLAGS="$(cflags)" \ CXXFLAGS="$(cxxflags)" \ - FFLAGS="$(fcflags)" \ - FCFLAGS="$(fcflags)" \ - CPPFLAGS= \ - LDFLAGS= \ + FFLAGS="$(fflags)" \ + FCFLAGS="$(fflags)" \ + CPPFLAGS="$(cppflags)" \ + LDFLAGS="$(ldflags)" \ FLIBS= \ rsharedir=/usr/share/R/share \ rincludedir=/usr/share/R/include \ @@ -274,8 +285,9 @@ @echo "*** make-arch ***" $(MAKE) CFLAGS="$(cflags)" \ CXXFLAGS="$(cxxflags)" \ - FFLAGS="$(fcflags)" \ - FCFLAGS="$(fcflags)" \ + CPPFLAGS="$(cppflags)" \ + FFLAGS="$(fflags)" \ + FCFLAGS="$(fflags)" \ CC=${compiler} \ CXX=${cxxcompiler} \ ${fortrancompiler} \ @@ -297,7 +309,9 @@ (cd src/nmath/standalone; \ $(MAKE) CFLAGS="$(cflags) -D_REENTRANT" \ CXXFLAGS="$(cxxflags) -D_REENTRANT" \ - FFLAGS="$(fcflags) -D_REENTRANT" \ + CPPFLAGS="$(cppflags)" \ + LDFLAGS="$(ldflags)" \ + FFLAGS="$(fflags) -D_REENTRANT" \ CC=${compiler} \ CXX=${cxxcompiler} \ ${fortrancompiler} \ @@ -391,7 +405,9 @@ rm -vf Rscript $(debtmp)/usr/bin/Rscript; \ $(MAKE) CFLAGS="$(cflags) -D_REENTRANT" \ CXXFLAGS="$(cxxflags) -D_REENTRANT" \ - FFLAGS="$(fcflags) -D_REENTRANT" \ + CPPFLAGS="$(cppflags)" \ + LDFLAGS="$(ldflags)" \ + FFLAGS="$(fflags) -D_REENTRANT" \ CC=${compiler} \ CXX=${cxxcompiler} \ ${fortrancompiler} \