Hi Julian,

Thanks for looking into this.

On 3 November 2013 at 15:23, Julian Gilbey wrote:
| On Mon, Oct 21, 2013 at 06:35:26AM -0500, Dirk Eddelbuettel wrote:
| > | > 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
| > 
| > I'd prefer it if we could go over this in a bit more detail.
| 
| Hi Dirk!
| 
| I've looked through the R build system.  It's interesting.  With a
| handful of exceptions, which I'll come to in a moment, every single
| Makefile includes $(top_builddir)/Makeconf, so that all of the
| settings in that file - which is generated from the configure script -
| are used in all of the Makefiles.  In particular, this means that in
| the make-arch-stamp calls to $(MAKE), none of the flags are needed

They do no harm, and make explicit what we do. 

I think that is a plus.  It also standard GNU autotools behaviour.

| (also, there is no use of FC or CXX anywhere in the build system, so
| these are not necessary here, either).  In the install-arch-stamp
| target, in the install-Rscript part, the RHOME variable appears as if
| it should be rhome (lower case) - see src/unix/Makefile.  None of the
| earlier variables are needed for the above reasons.
| 
| One unusual Makefile in the whole build system is
| src/library/stats/src/Makefile, which includes
| $(top_builddir)/etc${R_ARCH}/Makeconf instead, but that works fine.
| Likewise, src/library/grid/src/Makefile does the same, as do several
| other Makefiles in src/library.
| 
| The other Makefiles which don't include the top Makeconf are all in
| src/gnuwin32, which I assume is not such a big deal for Debian.
| 
| So my new suggested patch (which comments out those make invocations
| and replaces them with simplified ones) is attached.

I am just coming off a bad cold right now, but I really do not think that I
want to consider a 100+ line patch for debian/rules even when I am full
capacity.  Sorry -- that just implies too much possibly breakage.

This was about getting dpkg-buildflags in, and I hope we can do that with
less change and possible disruptions.

I made some tests with what you suggested in another package (gretl_1.9.13-2)
and it did not completely resolve all those lintian flags -- I think a linker
warning remaining.  There I just did 

cppflags  = $(shell dpkg-buildflags --get CPPFLAGS)
cflags    = $(shell dpkg-buildflags --get CFLAGS)
ldflags   = $(shell dpkg-buildflags --get LDFLAGS)

[...]

        $(MAKE) CC=gcc \
                CFLAGS="$(cflags) -D_REENTRANT" \
                CPPFLAGS="$(cppflags)" \
                LDFLAGS="$(ldflags)"

I hope to try something similar for R.

Dirk
 
|    Julian
| 
| ----------------------------------------------------------------------
| --- debian/rules.old  2013-10-20 19:06:09.000000000 +0100
| +++ debian/rules      2013-11-03 15:17:07.889258096 +0000
| @@ -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                \
| @@ -272,15 +283,18 @@
|  make-arch: configure make-arch-stamp 
|  make-arch-stamp: 
|       @echo "*** make-arch ***"
| -     $(MAKE)         CFLAGS="$(cflags)"                      \
| -                     CXXFLAGS="$(cxxflags)"                  \
| -                     FFLAGS="$(fcflags)"                     \
| -                     FCFLAGS="$(fcflags)"                    \
| -                     CC=${compiler}                          \
| -                     CXX=${cxxcompiler}                      \
| -                     ${fortrancompiler}                      \
| -                     LDFLAGS="$(ldflags)"                    \
| -                     R
| +     $(MAKE) R
| +## This was the old version: the make variables are unnecessary, as the
| +## needed ones are picked up from the generated Makeconf file
| +#    $(MAKE)         CFLAGS="$(cflags)"                      \
| +#                    CXXFLAGS="$(cxxflags)"                  \
| +#                    FFLAGS="$(fflags)"                      \
| +#                    FCFLAGS="$(fflags)"                     \
| +#                    CC=${compiler}                          \
| +#                    CXX=${cxxcompiler}                      \
| +#                    ${fortrancompiler}                      \
| +#                    LDFLAGS="$(ldflags)"                    \
| +#                    R
|  
|          # the top-level 'make stamp-recommended' target implies 'make docs'
|          # which (for the buildds) implies a lot of time wasted generating 
| @@ -292,17 +306,22 @@
|  #                    CXX=${cxxcompiler}                      \
|  #                    ${fortrancompiler}                      \
|  #                    stamp-recommended
| +## Likewise, this could be simplified to $(MAKE) stamp-recommended
|  
|          # make standalone math lib
|       (cd src/nmath/standalone;                               \
| -             $(MAKE) CFLAGS="$(cflags) -D_REENTRANT"         \
| -                     CXXFLAGS="$(cxxflags) -D_REENTRANT"     \
| -                     FFLAGS="$(fcflags) -D_REENTRANT"        \
| -                     CC=${compiler}                          \
| -                     CXX=${cxxcompiler}                      \
| -                     ${fortrancompiler}                      \
| -                     libRmath_la_LDFLAGS=-Wl,-soname,libRmath.so.$(somaj) \
| +             $(MAKE) libRmath_la_LDFLAGS=-Wl,-soname,libRmath.so.$(somaj) \
|                       shared static )
| +## Again, the original version
| +#    (cd src/nmath/standalone;                               \
| +#            $(MAKE) CFLAGS="$(cflags) -D_REENTRANT"         \
| +#                    CXXFLAGS="$(cxxflags) -D_REENTRANT"     \
| +#                    FFLAGS="$(fflags) -D_REENTRANT"         \
| +#                    CC=${compiler}                          \
| +#                    CXX=${cxxcompiler}                      \
| +#                    ${fortrancompiler}                      \
| +#                    libRmath_la_LDFLAGS=-Wl,-soname,libRmath.so.$(somaj) \
| +#                    shared static )
|  
|          # edd 25 Jan 2004  make install needs html docs
|          # edd 03 Feb 2004  new test, try without 
| @@ -386,18 +405,25 @@
|       $(MAKE) DESTDIR=$(debtmp) install
|  
|          # edd 16 Apr 2008  make Rscript _again_ as the build is broken
| -        #                  and we need an explicit RHOME
| +        #                  and we need an explicit rhome
|       (cd src/unix;                                           \
|               rm -vf Rscript $(debtmp)/usr/bin/Rscript;       \
| -             $(MAKE) CFLAGS="$(cflags) -D_REENTRANT"         \
| -                     CXXFLAGS="$(cxxflags) -D_REENTRANT"     \
| -                     FFLAGS="$(fcflags) -D_REENTRANT"        \
| -                     CC=${compiler}                          \
| -                     CXX=${cxxcompiler}                      \
| -                     ${fortrancompiler}                      \
| -                     RHOME=/usr/lib/R                        \
| +             $(MAKE) rhome=/usr/lib/R                        \
|                       DESTDIR=$(debtmp)                       \
|                       install-Rscript )
| +## Here is the original version; all of the needed variables except
| +## for rhome and DESTDIR are picked up from Makeconf
| +#    (cd src/unix;                                           \
| +#            rm -vf Rscript $(debtmp)/usr/bin/Rscript;       \
| +#            $(MAKE) CFLAGS="$(cflags) -D_REENTRANT"         \
| +#                    CXXFLAGS="$(cxxflags) -D_REENTRANT"     \
| +#                    FFLAGS="$(fflags) -D_REENTRANT"         \
| +#                    CC=${compiler}                          \
| +#                    CXX=${cxxcompiler}                      \
| +#                    ${fortrancompiler}                      \
| +#                    RHOME=/usr/lib/R                        \
| +#                    DESTDIR=$(debtmp)                       \
| +#                    install-Rscript )
|       #ls -ltr $(debtmp)/usr/bin/
|       #strings src/unix/Rscript                                       
|       cp -vax src/unix/Rscript $(debtmp)/usr/bin/

-- 
Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to